Refactored virtual allocator. (COMPATIBILITY BREAKING!) Added TLSF algoritym.
Refactored virtual allocator: Added type VmaVirtualAllocation, member VmaVirtualAllocationInfo::offset, changed parameters of vmaVirtualAllocate, vmaVirtualFree, vmaSetVirtualAllocationUserData, vmaGetVirtualAllocationInfo.
Added TLSF algorithm: Added VMA_POOL_CREATE_TLSF_ALGORITHM_BIT, VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT.
Some internal refactoring.
Improved documentation: Grouped API elements into Doxygen modules.
Code mostly by @medranSolus.
diff --git a/docs/html/allocation_annotation.html b/docs/html/allocation_annotation.html
index 237c388..6ba3888 100644
--- a/docs/html/allocation_annotation.html
+++ b/docs/html/allocation_annotation.html
@@ -78,30 +78,30 @@
<div class="line">MyBufferMetadata* pMetadata = CreateBufferMetadata();</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a> = pMetadata;</div>
<div class="line"> </div>
<div class="line">VkBuffer buffer;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocCreateInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1053</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocCreateInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="agroup__group__alloc_html_gac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a8259e85c272683434f4abb4ddddffe19"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">VmaAllocationCreateInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1173</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
</div><!-- fragment --><p >The pointer may be later retrieved as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a>:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &allocInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &allocInfo);</div>
<div class="line">MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.<a class="code hl_variable" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1189</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation.</div></div>
-</div><!-- fragment --><p >It can also be changed using function <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>.</p>
-<p >Values of (non-zero) allocations' <code>pUserData</code> are printed in JSON report created by <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>, in hexadecimal form.</p>
+<div class="ttc" id="agroup__group__alloc_html_ga86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation.</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1276</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_adc507656149c04de7ed95d0042ba2a13"><div class="ttname"><a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">VmaAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1323</div></div>
+</div><!-- fragment --><p >It can also be changed using function <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>.</p>
+<p >Values of (non-zero) allocations' <code>pUserData</code> are printed in JSON report created by <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>, in hexadecimal form.</p>
<h1><a class="anchor" id="allocation_names"></a>
Allocation names</h1>
-<p >There is alternative mode available where <code>pUserData</code> pointer is used to point to a null-terminated string, giving a name to the allocation. To use this mode, set <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> flag in <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. Then <code>pUserData</code> passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or argument to <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a> must be either null or pointer to a null-terminated string. The library creates internal copy of the string, so the pointer you pass doesn't need to be valid for whole lifetime of the allocation. You can free it after the call.</p>
+<p >There is alternative mode available where <code>pUserData</code> pointer is used to point to a null-terminated string, giving a name to the allocation. To use this mode, set <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> flag in <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. Then <code>pUserData</code> passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or argument to <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a> must be either null or pointer to a null-terminated string. The library creates internal copy of the string, so the pointer you pass doesn't need to be valid for whole lifetime of the allocation. You can free it after the call.</p>
<div class="fragment"><div class="line">VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };</div>
<div class="line"><span class="comment">// Fill imageInfo...</span></div>
<div class="line"> </div>
@@ -109,22 +109,22 @@
<div class="line">imageName += fileName;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a>;</div>
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a> = imageName.c_str();</div>
<div class="line"> </div>
<div class="line">VkImage image;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(allocator, &imageInfo, &allocCreateInfo, &image, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1016</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a02a94f25679275851a53e82eacbcfc73"><div class="ttname"><a href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a></div><div class="ttdeci">VkResult vmaCreateImage(VmaAllocator allocator, const VkImageCreateInfo *pImageCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkImage *pImage, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Function similar to vmaCreateBuffer().</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:518</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a>(allocator, &imageInfo, &allocCreateInfo, &image, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga02a94f25679275851a53e82eacbcfc73"><div class="ttname"><a href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a></div><div class="ttdeci">VkResult vmaCreateImage(VmaAllocator allocator, const VkImageCreateInfo *pImageCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkImage *pImage, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Function similar to vmaCreateBuffer().</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"><div class="ttname"><a href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:550</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1136</div></div>
</div><!-- fragment --><p >The value of <code>pUserData</code> pointer of the allocation will be different than the one you passed when setting allocation's name - pointing to a buffer managed internally that holds copy of the string.</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &allocInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocation, &allocInfo);</div>
<div class="line"><span class="keyword">const</span> <span class="keywordtype">char</span>* imageName = (<span class="keyword">const</span> <span class="keywordtype">char</span>*)allocInfo.<a class="code hl_variable" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a>;</div>
<div class="line">printf(<span class="stringliteral">"Image name: %s\n"</span>, imageName);</div>
-</div><!-- fragment --><p >That string is also printed in JSON report created by <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>.</p>
+</div><!-- fragment --><p >That string is also printed in JSON report created by <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>.</p>
<dl class="section note"><dt>Note</dt><dd>Passing string name to VMA allocation doesn't automatically set it to the Vulkan buffer or image created with it. You must do it manually using an extension like VK_EXT_debug_utils, which is independent of this library. </dd></dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
index a60a1a2..ca0cb64 100644
--- a/docs/html/annotated.html
+++ b/docs/html/annotated.html
@@ -69,28 +69,29 @@
<table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocation.html" target="_self">VmaAllocation</a></td><td class="desc">Represents single memory allocation </td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocation_create_info.html" target="_self">VmaAllocationCreateInfo</a></td><td class="desc"></td></tr>
-<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocation_info.html" target="_self">VmaAllocationInfo</a></td><td class="desc">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocation_info.html" target="_self">VmaAllocationInfo</a></td><td class="desc">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> </td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocator.html" target="_self">VmaAllocator</a></td><td class="desc">Represents main object of this library initialized </td></tr>
<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocator_create_info.html" target="_self">VmaAllocatorCreateInfo</a></td><td class="desc">Description of a Allocator to be created </td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_allocator_info.html" target="_self">VmaAllocatorInfo</a></td><td class="desc">Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object </td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_budget.html" target="_self">VmaBudget</a></td><td class="desc">Statistics of current memory usage and available budget, in bytes, for specific memory heap </td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_context.html" target="_self">VmaDefragmentationContext</a></td><td class="desc">Represents Opaque object that represents started defragmentation process </td></tr>
-<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_info.html" target="_self">VmaDefragmentationInfo</a></td><td class="desc">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_info.html" target="_self">VmaDefragmentationInfo</a></td><td class="desc">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> </td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_info2.html" target="_self">VmaDefragmentationInfo2</a></td><td class="desc">Parameters for defragmentation </td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_pass_info.html" target="_self">VmaDefragmentationPassInfo</a></td><td class="desc">Parameters for incremental defragmentation steps </td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_pass_move_info.html" target="_self">VmaDefragmentationPassMoveInfo</a></td><td class="desc"></td></tr>
-<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_stats.html" target="_self">VmaDefragmentationStats</a></td><td class="desc">Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_defragmentation_stats.html" target="_self">VmaDefragmentationStats</a></td><td class="desc">Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> </td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_device_memory_callbacks.html" target="_self">VmaDeviceMemoryCallbacks</a></td><td class="desc">Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code> </td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_pool.html" target="_self">VmaPool</a></td><td class="desc">Represents custom memory pool </td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_pool_create_info.html" target="_self">VmaPoolCreateInfo</a></td><td class="desc">Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> </td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_pool_stats.html" target="_self">VmaPoolStats</a></td><td class="desc">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> </td></tr>
<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_stat_info.html" target="_self">VmaStatInfo</a></td><td class="desc">Calculated statistics of memory usage in entire allocator </td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_stats.html" target="_self">VmaStats</a></td><td class="desc">General statistics from current state of Allocator </td></tr>
-<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_allocation_create_info.html" target="_self">VmaVirtualAllocationCreateInfo</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a> </td></tr>
-<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_allocation_info.html" target="_self">VmaVirtualAllocationInfo</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a> </td></tr>
-<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_block.html" target="_self">VmaVirtualBlock</a></td><td class="desc">Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory </td></tr>
-<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_block_create_info.html" target="_self">VmaVirtualBlockCreateInfo</a></td><td class="desc">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a> </td></tr>
-<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_vulkan_functions.html" target="_self">VmaVulkanFunctions</a></td><td class="desc">Pointers to some Vulkan functions - a subset used by the library </td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_allocation.html" target="_self">VmaVirtualAllocation</a></td><td class="desc">Represents single memory allocation done inside <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> </td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_allocation_create_info.html" target="_self">VmaVirtualAllocationCreateInfo</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a> </td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_allocation_info.html" target="_self">VmaVirtualAllocationInfo</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a> </td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_block.html" target="_self">VmaVirtualBlock</a></td><td class="desc">Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory </td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_virtual_block_create_info.html" target="_self">VmaVirtualBlockCreateInfo</a></td><td class="desc">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a> </td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_vma_vulkan_functions.html" target="_self">VmaVulkanFunctions</a></td><td class="desc">Pointers to some Vulkan functions - a subset used by the library </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/docs/html/choosing_memory_type.html b/docs/html/choosing_memory_type.html
index a63e187..6dfcd86 100644
--- a/docs/html/choosing_memory_type.html
+++ b/docs/html/choosing_memory_type.html
@@ -71,48 +71,48 @@
<div class="contents">
<div class="textblock"><p >Physical devices in Vulkan support various combinations of memory heaps and types. Help with choosing correct and optimal memory type for your specific resource is one of the key features of this library. You can use it by filling appropriate members of <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> structure, as described below. You can also combine multiple methods.</p>
<ol type="1">
-<li>If you just want to find memory type index that meets your requirements, you can use function: <a class="el" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a" title="Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndex()</a>, <a class="el" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888" title="Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForBufferInfo()</a>, <a class="el" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472" title="Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForImageInfo()</a>.</li>
-<li>If you want to allocate a region of device memory without association with any specific image or buffer, you can use function <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>. Usage of this function is not recommended and usually not needed. <a class="el" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1" title="General purpose memory allocation for multiple allocation objects at once.">vmaAllocateMemoryPages()</a> function is also provided for creating multiple allocations at once, which may be useful for sparse binding.</li>
-<li>If you already have a buffer or an image created, you want to allocate memory for it and then you will bind it yourself, you can use function <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. For binding you should use functions: <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a> or their extended versions: <a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a>, <a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>.</li>
-<li>If you want to create a buffer or an image, allocate memory for it and bind them together, all in one call, you can use function <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. This is the easiest and recommended way to use this library.</li>
+<li>If you just want to find memory type index that meets your requirements, you can use function: <a class="el" href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a" title="Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndex()</a>, <a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888" title="Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForBufferInfo()</a>, <a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472" title="Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForImageInfo()</a>.</li>
+<li>If you want to allocate a region of device memory without association with any specific image or buffer, you can use function <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>. Usage of this function is not recommended and usually not needed. <a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1" title="General purpose memory allocation for multiple allocation objects at once.">vmaAllocateMemoryPages()</a> function is also provided for creating multiple allocations at once, which may be useful for sparse binding.</li>
+<li>If you already have a buffer or an image created, you want to allocate memory for it and then you will bind it yourself, you can use function <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. For binding you should use functions: <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, <a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a> or their extended versions: <a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a>, <a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>.</li>
+<li>If you want to create a buffer or an image, allocate memory for it and bind them together, all in one call, you can use function <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. This is the easiest and recommended way to use this library.</li>
</ol>
<p >When using 3. or 4., the library internally queries Vulkan for memory types supported for that buffer or image (function <code>vkGetBufferMemoryRequirements()</code>) and uses only one of these types.</p>
<p >If no memory type can be found that meets all the requirements, these functions return <code>VK_ERROR_FEATURE_NOT_PRESENT</code>.</p>
<p >You can leave <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> structure completely filled with zeros. It means no requirements are specified for memory type. It is valid, although not very useful.</p>
<h1><a class="anchor" id="choosing_memory_type_usage"></a>
Usage</h1>
-<p >The easiest way to specify memory requirements is to fill member <a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" title="Intended usage of memory.">VmaAllocationCreateInfo::usage</a> using one of the values of enum <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a>. It defines high level, common usage types. For more details, see description of this enum.</p>
+<p >The easiest way to specify memory requirements is to fill member <a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" title="Intended usage of memory.">VmaAllocationCreateInfo::usage</a> using one of the values of enum <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc" title="Intended usage of the allocated memory.">VmaMemoryUsage</a>. It defines high level, common usage types. For more details, see description of this enum.</p>
<p >For example, if you want to create a uniform buffer that will be filled using transfer only once or infrequently and used for rendering every frame, you can do it using following code:</p>
<div class="fragment"><div class="line">VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">bufferInfo.size = 65536;</div>
<div class="line">bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocInfo = {};</div>
-<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
<div class="line"> </div>
<div class="line">VkBuffer buffer;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="agroup__group__alloc_html_gac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
</div><!-- fragment --><h1><a class="anchor" id="choosing_memory_type_required_preferred_flags"></a>
Required and preferred flags</h1>
<p >You can specify more detailed requirements by filling members <a class="el" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90" title="Flags that must be set in a Memory Type chosen for an allocation.">VmaAllocationCreateInfo::requiredFlags</a> and <a class="el" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d" title="Flags that preferably should be set in a memory type chosen for an allocation.">VmaAllocationCreateInfo::preferredFlags</a> with a combination of bits from enum <code>VkMemoryPropertyFlags</code>. For example, if you want to create a buffer that will be persistently mapped on host (so it must be <code>HOST_VISIBLE</code>) and preferably will also be <code>HOST_COHERENT</code> and <code>HOST_CACHED</code>, use following code:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocInfo = {};</div>
<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a> = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a> = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;</div>
-<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
+<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
<div class="line"> </div>
<div class="line">VkBuffer buffer;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1032</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1027</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1016</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:508</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="agroup__group__alloc_html_ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:540</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1152</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a9166390303ff42d783305bc31c2b6b90"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">VmaAllocationCreateInfo::requiredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags requiredFlags</div><div class="ttdoc">Flags that must be set in a Memory Type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1147</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1136</div></div>
</div><!-- fragment --><p >A memory type is chosen that has all the required flags and as many preferred flags set as possible.</p>
<p >If you use <a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" title="Intended usage of memory.">VmaAllocationCreateInfo::usage</a>, it is just internally converted to a set of required and preferred flags.</p>
<h1><a class="anchor" id="choosing_memory_type_explicit_memory_types"></a>
@@ -126,14 +126,14 @@
<div class="line"> </div>
<div class="line">VkBuffer buffer;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1040</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a3bf940c0271d85d6ba32a4d820075055"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055">VmaAllocationCreateInfo::memoryTypeBits</a></div><div class="ttdeci">uint32_t memoryTypeBits</div><div class="ttdoc">Bitmask containing one bit set for every memory type acceptable for this allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1160</div></div>
</div><!-- fragment --><h1><a class="anchor" id="choosing_memory_type_custom_memory_pools"></a>
Custom memory pools</h1>
<p >If you allocate from custom memory pool, all the ways of specifying memory requirements described above are not applicable and the aforementioned members of <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> structure are ignored. Memory type is selected explicitly when creating the pool and then used to make all the allocations from that pool. For further details, see <a class="el" href="custom_memory_pools.html">Custom memory pools</a>.</p>
<h1><a class="anchor" id="choosing_memory_type_dedicated_allocations"></a>
Dedicated allocations</h1>
-<p >Memory for allocations is reserved out of larger block of <code>VkDeviceMemory</code> allocated from Vulkan internally. That is the main feature of this whole library. You can still request a separate memory block to be created for an allocation, just like you would do in a trivial solution without using any allocator. In that case, a buffer or image is always bound to that memory at offset 0. This is called a "dedicated allocation". You can explicitly request it by using flag <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. The library can also internally decide to use dedicated allocation in some cases, e.g.:</p>
+<p >Memory for allocations is reserved out of larger block of <code>VkDeviceMemory</code> allocated from Vulkan internally. That is the main feature of this whole library. You can still request a separate memory block to be created for an allocation, just like you would do in a trivial solution without using any allocator. In that case, a buffer or image is always bound to that memory at offset 0. This is called a "dedicated allocation". You can explicitly request it by using flag <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. The library can also internally decide to use dedicated allocation in some cases, e.g.:</p>
<ul>
<li>When the size of the allocation is large.</li>
<li>When <a class="el" href="vk_khr_dedicated_allocation.html">VK_KHR_dedicated_allocation</a> extension is enabled and it reports that dedicated allocation is required or recommended for the resource.</li>
diff --git a/docs/html/classes.html b/docs/html/classes.html
index 1a7d444..de5d429 100644
--- a/docs/html/classes.html
+++ b/docs/html/classes.html
@@ -69,7 +69,7 @@
<div class="classindex">
<dl class="classindex even">
<dt class="alphachar"><a id="letter_V" name="letter_V">V</a></dt>
-<dd><a class="el" href="struct_vma_allocation.html">VmaAllocation</a></dd><dd><a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></dd><dd><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></dd><dd><a class="el" href="struct_vma_allocator.html">VmaAllocator</a></dd><dd><a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></dd><dd><a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></dd><dd><a class="el" href="struct_vma_budget.html">VmaBudget</a></dd><dd><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></dd><dd><a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></dd><dd><a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></dd><dd><a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></dd><dd><a class="el" href="struct_vma_pool.html">VmaPool</a></dd><dd><a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></dd><dd><a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a></dd><dd><a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a></dd><dd><a class="el" href="struct_vma_stats.html">VmaStats</a></dd><dd><a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></dd><dd><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></dd><dd><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a></dd><dd><a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></dd><dd><a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></dd></dl>
+<dd><a class="el" href="struct_vma_allocation.html">VmaAllocation</a></dd><dd><a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></dd><dd><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></dd><dd><a class="el" href="struct_vma_allocator.html">VmaAllocator</a></dd><dd><a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></dd><dd><a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></dd><dd><a class="el" href="struct_vma_budget.html">VmaBudget</a></dd><dd><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></dd><dd><a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></dd><dd><a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></dd><dd><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></dd><dd><a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></dd><dd><a class="el" href="struct_vma_pool.html">VmaPool</a></dd><dd><a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></dd><dd><a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a></dd><dd><a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a></dd><dd><a class="el" href="struct_vma_stats.html">VmaStats</a></dd><dd><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a></dd><dd><a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></dd><dd><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></dd><dd><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a></dd><dd><a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></dd><dd><a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></dd></dl>
</div>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/custom_memory_pools.html b/docs/html/custom_memory_pools.html
index 7e31861..54c3ce1 100644
--- a/docs/html/custom_memory_pools.html
+++ b/docs/html/custom_memory_pools.html
@@ -81,7 +81,7 @@
<p >To use custom memory pools:</p>
<ol type="1">
<li>Fill <a class="el" href="struct_vma_pool_create_info.html" title="Describes parameter of created VmaPool.">VmaPoolCreateInfo</a> structure.</li>
-<li>Call <a class="el" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50" title="Allocates Vulkan device memory and creates VmaPool object.">vmaCreatePool()</a> to obtain <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> handle.</li>
+<li>Call <a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50" title="Allocates Vulkan device memory and creates VmaPool object.">vmaCreatePool()</a> to obtain <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> handle.</li>
<li>When making an allocation, set <a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> to this handle. You don't need to specify any other parameters of this structure, like <code>usage</code>.</li>
</ol>
<p >Example:</p>
@@ -92,7 +92,7 @@
<div class="line">poolCreateInfo.<a class="code hl_variable" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">maxBlockCount</a> = 2;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_pool.html">VmaPool</a> pool;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(allocator, &poolCreateInfo, &pool);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a>(allocator, &poolCreateInfo, &pool);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Allocate a buffer out of it.</span></div>
<div class="line">VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
@@ -105,42 +105,42 @@
<div class="line">VkBuffer buf;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1046</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga5c8770ded7c59c8caac6de0c2cb00b50"><div class="ttname"><a href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a></div><div class="ttdeci">VkResult vmaCreatePool(VmaAllocator allocator, const VmaPoolCreateInfo *pCreateInfo, VmaPool *pPool)</div><div class="ttdoc">Allocates Vulkan device memory and creates VmaPool object.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_gac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a6272c0555cfd1fe28bff1afeb6190150"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">VmaAllocationCreateInfo::pool</a></div><div class="ttdeci">VmaPool pool</div><div class="ttdoc">Pool that this allocation should be created in.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1166</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1065</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1068</div></div>
-<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1094</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1276</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html"><div class="ttname"><a href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></div><div class="ttdoc">Describes parameter of created VmaPool.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1185</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_a596fa76b685d3f1f688f84a709a5b319"><div class="ttname"><a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">VmaPoolCreateInfo::memoryTypeIndex</a></div><div class="ttdeci">uint32_t memoryTypeIndex</div><div class="ttdoc">Vulkan memory type index to allocate this pool from.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1188</div></div>
+<div class="ttc" id="astruct_vma_pool_create_info_html_ae41142f2834fcdc82baa4883c187b75c"><div class="ttname"><a href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c">VmaPoolCreateInfo::maxBlockCount</a></div><div class="ttdeci">size_t maxBlockCount</div><div class="ttdoc">Maximum number of blocks that can be allocated in this pool. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1214</div></div>
<div class="ttc" id="astruct_vma_pool_html"><div class="ttname"><a href="struct_vma_pool.html">VmaPool</a></div><div class="ttdoc">Represents custom memory pool.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a5c8770ded7c59c8caac6de0c2cb00b50"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a></div><div class="ttdeci">VkResult vmaCreatePool(VmaAllocator allocator, const VmaPoolCreateInfo *pCreateInfo, VmaPool *pPool)</div><div class="ttdoc">Allocates Vulkan device memory and creates VmaPool object.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
</div><!-- fragment --><p >You have to free all allocations made from this pool before destroying it.</p>
-<div class="fragment"><div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, buf, alloc);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(allocator, pool);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a5485779c8f1948238fc4e92232fa65e1"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a></div><div class="ttdeci">void vmaDestroyPool(VmaAllocator allocator, VmaPool pool)</div><div class="ttdoc">Destroys VmaPool object and frees Vulkan device memory.</div></div>
-</div><!-- fragment --><p >New versions of this library support creating dedicated allocations in custom pools. It is supported only when <a class="el" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676" title="Size of a single VkDeviceMemory block to be allocated as part of this pool, in bytes....">VmaPoolCreateInfo::blockSize</a> = 0. To use this feature, set <a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> to the pointer to your custom pool and <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a> to <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</p>
+<div class="fragment"><div class="line"><a class="code hl_function" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, buf, alloc);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a>(allocator, pool);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga5485779c8f1948238fc4e92232fa65e1"><div class="ttname"><a href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a></div><div class="ttdeci">void vmaDestroyPool(VmaAllocator allocator, VmaPool pool)</div><div class="ttdoc">Destroys VmaPool object and frees Vulkan device memory.</div></div>
+</div><!-- fragment --><p >New versions of this library support creating dedicated allocations in custom pools. It is supported only when <a class="el" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676" title="Size of a single VkDeviceMemory block to be allocated as part of this pool, in bytes....">VmaPoolCreateInfo::blockSize</a> = 0. To use this feature, set <a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> to the pointer to your custom pool and <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a> to <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</p>
<h1><a class="anchor" id="custom_memory_pools_MemTypeIndex"></a>
Choosing memory type index</h1>
-<p >When creating a pool, you must explicitly specify memory type index. To find the one suitable for your buffers or images, you can use helper functions <a class="el" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888" title="Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForBufferInfo()</a>, <a class="el" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472" title="Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForImageInfo()</a>. You need to provide structures with example parameters of buffers or images that you are going to create in that pool.</p>
+<p >When creating a pool, you must explicitly specify memory type index. To find the one suitable for your buffers or images, you can use helper functions <a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888" title="Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForBufferInfo()</a>, <a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472" title="Helps to find memoryTypeIndex, given VkImageCreateInfo and VmaAllocationCreateInfo.">vmaFindMemoryTypeIndexForImageInfo()</a>. You need to provide structures with example parameters of buffers or images that you are going to create in that pool.</p>
<div class="fragment"><div class="line">VkBufferCreateInfo exampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">exampleBufCreateInfo.size = 1024; <span class="comment">// Whatever.</span></div>
<div class="line">exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; <span class="comment">// Change if needed.</span></div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>; <span class="comment">// Change if needed.</span></div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>; <span class="comment">// Change if needed.</span></div>
<div class="line"> </div>
<div class="line">uint32_t memTypeIndex;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a>(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex);</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> poolCreateInfo = {};</div>
<div class="line">poolCreateInfo.<a class="code hl_variable" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a> = memTypeIndex;</div>
<div class="line"><span class="comment">// ...</span></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ae790ab9ffaf7667fb8f62523e6897888"><div class="ttname"><a href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a></div><div class="ttdeci">VkResult vmaFindMemoryTypeIndexForBufferInfo(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</div><div class="ttdoc">Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_gae790ab9ffaf7667fb8f62523e6897888"><div class="ttname"><a href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a></div><div class="ttdeci">VkResult vmaFindMemoryTypeIndexForBufferInfo(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</div><div class="ttdoc">Helps to find memoryTypeIndex, given VkBufferCreateInfo and VmaAllocationCreateInfo.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
</div><!-- fragment --><p >When creating buffers/images allocated in that pool, provide following parameters:</p>
<ul>
<li><code>VkBufferCreateInfo</code>: Prefer to pass same parameters as above. Otherwise you risk creating resources in a memory type that is not suitable for them, which may result in undefined behavior. Using different <code>VK_BUFFER_USAGE_</code> flags may work, but you shouldn't create images in a pool intended for buffers or the other way around.</li>
@@ -150,12 +150,12 @@
Linear allocation algorithm</h1>
<p >Each Vulkan memory block managed by this library has accompanying metadata that keeps track of used and unused regions. By default, the metadata structure and algorithm tries to find best place for new allocations among free regions to optimize memory usage. This way you can allocate and free objects in any order.</p>
<p ><img src="../gfx/Linear_allocator_1_algo_default.png" alt="Default allocation algorithm" class="inline"/></p>
-<p >Sometimes there is a need to use simpler, linear allocation algorithm. You can create custom pool that uses such algorithm by adding flag <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> to <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a> while creating <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. Then an alternative metadata management is used. It always creates new allocations after last one and doesn't reuse free regions after allocations freed in the middle. It results in better allocation performance and less memory consumed by metadata.</p>
+<p >Sometimes there is a need to use simpler, linear allocation algorithm. You can create custom pool that uses such algorithm by adding flag <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> to <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a> while creating <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. Then an alternative metadata management is used. It always creates new allocations after last one and doesn't reuse free regions after allocations freed in the middle. It results in better allocation performance and less memory consumed by metadata.</p>
<p ><img src="../gfx/Linear_allocator_2_algo_linear.png" alt="Linear allocation algorithm" class="inline"/></p>
<p >With this one flag, you can create a custom pool that can be used in many ways: free-at-once, stack, double stack, and ring buffer. See below for details. You don't need to specify explicitly which of these options you are going to use - it is detected automatically.</p>
<h2><a class="anchor" id="linear_algorithm_free_at_once"></a>
Free-at-once</h2>
-<p >In a pool that uses linear algorithm, you still need to free all the allocations individually, e.g. by using <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a>. You can free them in any order. New allocations are always made after last one - free space in the middle is not reused. However, when you release all the allocation and the pool becomes empty, allocation starts from the beginning again. This way you can use linear algorithm to speed up creation of allocations that you are going to release all at once.</p>
+<p >In a pool that uses linear algorithm, you still need to free all the allocations individually, e.g. by using <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a>. You can free them in any order. New allocations are always made after last one - free space in the middle is not reused. However, when you release all the allocation and the pool becomes empty, allocation starts from the beginning again. This way you can use linear algorithm to speed up creation of allocations that you are going to release all at once.</p>
<p ><img src="../gfx/Linear_allocator_3_free_at_once.png" alt="Free-at-once" class="inline"/></p>
<p >This mode is also available for pools created with <a class="el" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c" title="Maximum number of blocks that can be allocated in this pool. Optional.">VmaPoolCreateInfo::maxBlockCount</a> value that allows multiple memory blocks.</p>
<h2><a class="anchor" id="linear_algorithm_stack"></a>
@@ -170,7 +170,7 @@
<li>First, default one, growing up from offset 0.</li>
<li>Second, "upper" one, growing down from the end towards lower offsets.</li>
</ul>
-<p >To make allocation from the upper stack, add flag <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> to <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>.</p>
+<p >To make allocation from the upper stack, add flag <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> to <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>.</p>
<p ><img src="../gfx/Linear_allocator_7_double_stack.png" alt="Double stack" class="inline"/></p>
<p >Double stack is available only in pools with one memory block - <a class="el" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c" title="Maximum number of blocks that can be allocated in this pool. Optional.">VmaPoolCreateInfo::maxBlockCount</a> must be 1. Otherwise behavior is undefined.</p>
<p >When the two stacks' ends meet so there is not enough space between them for a new allocation, such allocation fails with usual <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> error.</p>
@@ -184,7 +184,7 @@
<p >There is another allocation algorithm that can be used with custom pools, called "buddy". Its internal data structure is based on a binary tree of blocks, each having size that is a power of two and a half of its parent's size. When you want to allocate memory of certain size, a free node in the tree is located. If it is too large, it is recursively split into two halves (called "buddies"). However, if requested allocation size is not a power of two, the size of the allocation is aligned up to the nearest power of two and the remaining space is wasted. When two buddy nodes become free, they are merged back into one larger node.</p>
<p ><img src="../gfx/Buddy_allocator.png" alt="Buddy allocator" class="inline"/></p>
<p >The advantage of buddy allocation algorithm over default algorithm is faster allocation and deallocation, as well as smaller external fragmentation. The disadvantage is more wasted space (internal fragmentation). For more information, please search the Internet for "Buddy memory allocation" - sources that describe this concept in general.</p>
-<p >To use buddy allocation algorithm with a custom pool, add flag <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> to <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a> while creating <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object.</p>
+<p >To use buddy allocation algorithm with a custom pool, add flag <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> to <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a> while creating <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object.</p>
<p >Several limitations apply to pools that use buddy algorithm:</p>
<ul>
<li>It is recommended to use <a class="el" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676" title="Size of a single VkDeviceMemory block to be allocated as part of this pool, in bytes....">VmaPoolCreateInfo::blockSize</a> that is a power of two. Otherwise, only largest power of two smaller than the size is used for allocations. The remaining space always stays unused.</li>
diff --git a/docs/html/debugging_memory_usage.html b/docs/html/debugging_memory_usage.html
index da8ef43..31493a4 100644
--- a/docs/html/debugging_memory_usage.html
+++ b/docs/html/debugging_memory_usage.html
@@ -89,7 +89,7 @@
<p >If your bug goes away after enabling margins, it means it may be caused by memory being overwritten outside of allocation boundaries. It is not 100% certain though. Change in application behavior may also be caused by different order and distribution of allocations across memory blocks after margins are applied.</p>
<p >The margin is applied also before first and after last allocation in a block. It may occur only once between two adjacent allocations.</p>
<p >Margins work with all types of memory.</p>
-<p >Margin is applied only to allocations made out of memory blocks and not to dedicated allocations, which have their own memory block of specific size. It is thus not applied to allocations made using <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> flag or those automatically decided to put into dedicated allocations, e.g. due to its large size or recommended by VK_KHR_dedicated_allocation extension. Margins are also not active in custom pools created with <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> flag.</p>
+<p >Margin is applied only to allocations made out of memory blocks and not to dedicated allocations, which have their own memory block of specific size. It is thus not applied to allocations made using <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> flag or those automatically decided to put into dedicated allocations, e.g. due to its large size or recommended by VK_KHR_dedicated_allocation extension. Margins are also not active in custom pools created with <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> flag.</p>
<p >Margins appear in <a class="el" href="statistics.html#statistics_json_dump">JSON dump</a> as part of free space.</p>
<p >Note that enabling margins increases memory usage and fragmentation.</p>
<h1><a class="anchor" id="debugging_memory_usage_corruption_detection"></a>
@@ -100,7 +100,7 @@
<div class="line"><span class="preprocessor">#include "vk_mem_alloc.h"</span></div>
</div><!-- fragment --><p >When this feature is enabled, number of bytes specified as <code>VMA_DEBUG_MARGIN</code> (it must be multiply of 4) before and after every allocation is filled with a magic number. This idea is also know as "canary". Memory is automatically mapped and unmapped if necessary.</p>
<p >This number is validated automatically when the allocation is destroyed. If it is not equal to the expected value, <code>VMA_ASSERT()</code> is executed. It clearly means that either CPU or GPU overwritten the memory outside of boundaries of the allocation, which indicates a serious bug.</p>
-<p >You can also explicitly request checking margins of all allocations in all memory blocks that belong to specified memory types by using function <a class="el" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98" title="Checks magic number in margins around all allocations in given memory types (in both default and cust...">vmaCheckCorruption()</a>, or in memory blocks that belong to specified custom pool, by using function <a class="el" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89" title="Checks magic number in margins around all allocations in given memory pool in search for corruptions.">vmaCheckPoolCorruption()</a>.</p>
+<p >You can also explicitly request checking margins of all allocations in all memory blocks that belong to specified memory types by using function <a class="el" href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98" title="Checks magic number in margins around all allocations in given memory types (in both default and cust...">vmaCheckCorruption()</a>, or in memory blocks that belong to specified custom pool, by using function <a class="el" href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89" title="Checks magic number in margins around all allocations in given memory pool in search for corruptions.">vmaCheckPoolCorruption()</a>.</p>
<p >Margin validation (corruption detection) works only for memory types that are <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/defragmentation.html b/docs/html/defragmentation.html
index 3db8b4f..601a2ba 100644
--- a/docs/html/defragmentation.html
+++ b/docs/html/defragmentation.html
@@ -70,15 +70,15 @@
</div><!--header-->
<div class="contents">
<div class="textblock"><p >Interleaved allocations and deallocations of many objects of varying size can cause fragmentation over time, which can lead to a situation where the library is unable to find a continuous range of free memory for a new allocation despite there is enough free space, just scattered across many small free ranges between existing allocations.</p>
-<p >To mitigate this problem, you can use defragmentation feature: structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a>, function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>, <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>. Given set of allocations, this function can move them to compact used memory, ensure more continuous free space and possibly also free some <code>VkDeviceMemory</code> blocks.</p>
+<p >To mitigate this problem, you can use defragmentation feature: structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a>, function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>, <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>. Given set of allocations, this function can move them to compact used memory, ensure more continuous free space and possibly also free some <code>VkDeviceMemory</code> blocks.</p>
<p >What the defragmentation does is:</p>
<ul>
-<li>Updates <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects to point to new <code>VkDeviceMemory</code> and offset. After allocation has been moved, its <a class="el" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67" title="Handle to Vulkan memory object.">VmaAllocationInfo::deviceMemory</a> and/or <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268" title="Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...">VmaAllocationInfo::offset</a> changes. You must query them again using <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you need them.</li>
+<li>Updates <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects to point to new <code>VkDeviceMemory</code> and offset. After allocation has been moved, its <a class="el" href="struct_vma_allocation_info.html#ae0bfb7dfdf79a76ffefc9a94677a2f67" title="Handle to Vulkan memory object.">VmaAllocationInfo::deviceMemory</a> and/or <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268" title="Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...">VmaAllocationInfo::offset</a> changes. You must query them again using <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you need them.</li>
<li>Moves actual data in memory.</li>
</ul>
<p >What it doesn't do, so you need to do it yourself:</p>
<ul>
-<li>Recreate buffers and images that were bound to allocations that were defragmented and bind them with their new places in memory. You must use <code>vkDestroyBuffer()</code>, <code>vkDestroyImage()</code>, <code>vkCreateBuffer()</code>, <code>vkCreateImage()</code>, <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a> for that purpose and NOT <a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e" title="Destroys Vulkan image and frees allocated memory.">vmaDestroyImage()</a>, <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, because you don't need to destroy or create allocation objects!</li>
+<li>Recreate buffers and images that were bound to allocations that were defragmented and bind them with their new places in memory. You must use <code>vkDestroyBuffer()</code>, <code>vkDestroyImage()</code>, <code>vkCreateBuffer()</code>, <code>vkCreateImage()</code>, <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, <a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a> for that purpose and NOT <a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a>, <a class="el" href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e" title="Destroys Vulkan image and frees allocated memory.">vmaDestroyImage()</a>, <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, because you don't need to destroy or create allocation objects!</li>
<li>Recreate views and update descriptors that point to these buffers and images.</li>
</ul>
<h1><a class="anchor" id="defragmentation_cpu"></a>
@@ -107,8 +107,8 @@
<div class="line">defragInfo.<a class="code hl_variable" href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">maxCpuAllocationsToMove</a> = UINT32_MAX; <span class="comment">// No limit.</span></div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> defragCtx;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &defragInfo, <span class="keyword">nullptr</span>, &defragCtx);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(allocator, defragCtx);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &defragInfo, <span class="keyword">nullptr</span>, &defragCtx);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(allocator, defragCtx);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">for</span>(uint32_t i = 0; i < allocCount; ++i)</div>
<div class="line">{</div>
@@ -125,24 +125,24 @@
<div class="line"> </div>
<div class="line"> <span class="comment">// Bind new buffer to new memory region. Data contained in it is already moved.</span></div>
<div class="line"> <a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocations[i], &allocInfo);</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocations[i], &allocInfo);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
<div class="line"> }</div>
<div class="line">}</div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><div class="ttname"><a href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a></div><div class="ttdeci">VkResult vmaDefragmentationBegin(VmaAllocator allocator, const VmaDefragmentationInfo2 *pInfo, VmaDefragmentationStats *pStats, VmaDefragmentationContext *pContext)</div><div class="ttdoc">Begins defragmentation process.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga6b0929b914b60cf2d45cac4bf3547470"><div class="ttname"><a href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a></div><div class="ttdeci">VkResult vmaBindBufferMemory(VmaAllocator allocator, VmaAllocation allocation, VkBuffer buffer)</div><div class="ttdoc">Binds buffer to allocation.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga8774e20e91e245aae959ba63efa15dd2"><div class="ttname"><a href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a></div><div class="ttdeci">VkResult vmaDefragmentationEnd(VmaAllocator allocator, VmaDefragmentationContext context)</div><div class="ttdoc">Ends defragmentation process.</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1276</div></div>
<div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
<div class="ttc" id="astruct_vma_defragmentation_context_html"><div class="ttname"><a href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></div><div class="ttdoc">Represents Opaque object that represents started defragmentation process.</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1197</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1203</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1217</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1246</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1211</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1241</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a36ba776fd7fd5cb1e9359fdc0d8e6e8a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a></div><div class="ttdeci">VkResult vmaDefragmentationBegin(VmaAllocator allocator, const VmaDefragmentationInfo2 *pInfo, VmaDefragmentationStats *pStats, VmaDefragmentationContext *pContext)</div><div class="ttdoc">Begins defragmentation process.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a6b0929b914b60cf2d45cac4bf3547470"><div class="ttname"><a href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a></div><div class="ttdeci">VkResult vmaBindBufferMemory(VmaAllocator allocator, VmaAllocation allocation, VkBuffer buffer)</div><div class="ttdoc">Binds buffer to allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a86dd08aba8633bfa4ad0df2e76481d8b"><div class="ttname"><a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a></div><div class="ttdeci">void vmaGetAllocationInfo(VmaAllocator allocator, VmaAllocation allocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">Returns current information about specified allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a8774e20e91e245aae959ba63efa15dd2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a></div><div class="ttdeci">VkResult vmaDefragmentationEnd(VmaAllocator allocator, VmaDefragmentationContext context)</div><div class="ttdoc">Ends defragmentation process.</div></div>
-</div><!-- fragment --><p >Setting <a class="el" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc" title="Optional, output. Pointer to array that will be filled with information whether the allocation at cer...">VmaDefragmentationInfo2::pAllocationsChanged</a> is optional. This output array tells whether particular allocation in <a class="el" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32" title="Pointer to array of allocations that can be defragmented.">VmaDefragmentationInfo2::pAllocations</a> at the same index has been modified during defragmentation. You can pass null, but you then need to query every allocation passed to defragmentation for new parameters using <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you might need to recreate and rebind a buffer or image associated with it.</p>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html"><div class="ttname"><a href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1331</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a3cf86ab32c1da779b4923d301a3056ba"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">VmaDefragmentationInfo2::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of allocations in pAllocations array.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1337</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a76d51a644dc7f5405d0cdd0025ecd0cc"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc">VmaDefragmentationInfo2::pAllocationsChanged</a></div><div class="ttdeci">VkBool32 * pAllocationsChanged</div><div class="ttdoc">Optional, output. Pointer to array that will be filled with information whether the allocation at cer...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1351</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a94c2c7223d52878445a8cccce396b671"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671">VmaDefragmentationInfo2::maxCpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxCpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on CPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1380</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_ab6d288f29d028156cf73542d630a2e32"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32">VmaDefragmentationInfo2::pAllocations</a></div><div class="ttdeci">const VmaAllocation * pAllocations</div><div class="ttdoc">Pointer to array of allocations that can be defragmented.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1345</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_af78e1ea40c22d85137b65f6b384a4d0a"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a">VmaDefragmentationInfo2::maxCpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxCpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1375</div></div>
+</div><!-- fragment --><p >Setting <a class="el" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc" title="Optional, output. Pointer to array that will be filled with information whether the allocation at cer...">VmaDefragmentationInfo2::pAllocationsChanged</a> is optional. This output array tells whether particular allocation in <a class="el" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32" title="Pointer to array of allocations that can be defragmented.">VmaDefragmentationInfo2::pAllocations</a> at the same index has been modified during defragmentation. You can pass null, but you then need to query every allocation passed to defragmentation for new parameters using <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you might need to recreate and rebind a buffer or image associated with it.</p>
<p >If you use <a class="el" href="choosing_memory_type.html#choosing_memory_type_custom_memory_pools">Custom memory pools</a>, you can fill <a class="el" href="struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d" title="Numer of pools in pPools array.">VmaDefragmentationInfo2::poolCount</a> and <a class="el" href="struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b" title="Either null or pointer to array of pools to be defragmented.">VmaDefragmentationInfo2::pPools</a> instead of <a class="el" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba" title="Number of allocations in pAllocations array.">VmaDefragmentationInfo2::allocationCount</a> and <a class="el" href="struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32" title="Pointer to array of allocations that can be defragmented.">VmaDefragmentationInfo2::pAllocations</a> to defragment all allocations in given pools. You cannot use <a class="el" href="struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc" title="Optional, output. Pointer to array that will be filled with information whether the allocation at cer...">VmaDefragmentationInfo2::pAllocationsChanged</a> in that case. You can also combine both methods.</p>
<h1><a class="anchor" id="defragmentation_gpu"></a>
Defragmenting GPU memory</h1>
@@ -175,14 +175,14 @@
<div class="line">defragInfo.<a class="code hl_variable" href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">commandBuffer</a> = commandBuffer;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> defragCtx;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &defragInfo, <span class="keyword">nullptr</span>, &defragCtx);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a>(allocator, &defragInfo, <span class="keyword">nullptr</span>, &defragCtx);</div>
<div class="line"> </div>
<div class="line">vkEndCommandBuffer(commandBuffer);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Submit commandBuffer.</span></div>
<div class="line"><span class="comment">// Wait for a fence that ensures commandBuffer execution finished.</span></div>
<div class="line"> </div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(allocator, defragCtx);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a>(allocator, defragCtx);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">for</span>(uint32_t i = 0; i < allocCount; ++i)</div>
<div class="line">{</div>
@@ -199,15 +199,15 @@
<div class="line"> </div>
<div class="line"> <span class="comment">// Bind new buffer to new memory region. Data contained in it is already moved.</span></div>
<div class="line"> <a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocations[i], &allocInfo);</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a>(allocator, allocations[i], &allocInfo);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a>(allocator, allocations[i], buffers[i]);</div>
<div class="line"> }</div>
<div class="line">}</div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1256</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1251</div></div>
-<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1265</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a40d53d33e71ba0b66f844ed63c05a3f6"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6">VmaDefragmentationInfo2::maxGpuAllocationsToMove</a></div><div class="ttdeci">uint32_t maxGpuAllocationsToMove</div><div class="ttdoc">Maximum number of allocations that can be moved to a different place using transfers on GPU side,...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1390</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a4ddbc898d0afe1518f863a3763628f08"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08">VmaDefragmentationInfo2::maxGpuBytesToMove</a></div><div class="ttdeci">VkDeviceSize maxGpuBytesToMove</div><div class="ttdoc">Maximum total numbers of bytes that can be copied while moving allocations to different places using ...</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1385</div></div>
+<div class="ttc" id="astruct_vma_defragmentation_info2_html_a7f71f39590c5316771493d2333f9c1bd"><div class="ttname"><a href="struct_vma_defragmentation_info2.html#a7f71f39590c5316771493d2333f9c1bd">VmaDefragmentationInfo2::commandBuffer</a></div><div class="ttdeci">VkCommandBuffer commandBuffer</div><div class="ttdoc">Optional. Command buffer where GPU copy commands will be posted.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1399</div></div>
</div><!-- fragment --><p >You can combine these two methods by specifying non-zero <code>maxGpu*</code> as well as <code>maxCpu*</code> parameters. The library automatically chooses best method to defragment each memory pool.</p>
-<p >You may try not to block your entire program to wait until defragmentation finishes, but do it in the background, as long as you carefully fullfill requirements described in function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>.</p>
+<p >You may try not to block your entire program to wait until defragmentation finishes, but do it in the background, as long as you carefully fullfill requirements described in function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>.</p>
<h1><a class="anchor" id="defragmentation_additional_notes"></a>
Additional notes</h1>
<p >It is only legal to defragment allocations bound to:</p>
diff --git a/docs/html/deprecated.html b/docs/html/deprecated.html
index 8990531..9410dfe 100644
--- a/docs/html/deprecated.html
+++ b/docs/html/deprecated.html
@@ -66,14 +66,14 @@
</div><!--header-->
<div class="contents">
<div class="textblock"><dl class="reflist">
-<dt>Member <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">VMA_ALLOCATION_CREATE_RESERVED_1_BIT</a> </dt>
+<dt>Member <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">VMA_ALLOCATION_CREATE_RESERVED_1_BIT</a> </dt>
<dd><a class="anchor" id="_deprecated000003"></a>Removed. Do not use. </dd>
-<dt>Member <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">VMA_ALLOCATION_CREATE_RESERVED_2_BIT</a> </dt>
+<dt>Member <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">VMA_ALLOCATION_CREATE_RESERVED_2_BIT</a> </dt>
<dd><a class="anchor" id="_deprecated000004"></a>Removed. Do not use. </dd>
-<dt>Member <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a> (<a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const <a class="el" href="struct_vma_defragmentation_info.html" title="Deprecated. Optional configuration parameters to be passed to function vmaDefragment().">VmaDefragmentationInfo</a> *pDefragmentationInfo, <a class="el" href="struct_vma_defragmentation_stats.html" title="Statistics returned by function vmaDefragment().">VmaDefragmentationStats</a> *pDefragmentationStats)</dt>
-<dd><a class="anchor" id="_deprecated000002"></a>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd>
-<dt>Member <a class="el" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a> </dt>
-<dd><a class="anchor" id="_deprecated000001"></a>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd>
+<dt>Member <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a> (<a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const <a class="el" href="struct_vma_defragmentation_info.html" title="Deprecated. Optional configuration parameters to be passed to function vmaDefragment().">VmaDefragmentationInfo</a> *pDefragmentationInfo, <a class="el" href="struct_vma_defragmentation_stats.html" title="Statistics returned by function vmaDefragment().">VmaDefragmentationStats</a> *pDefragmentationStats)</dt>
+<dd><a class="anchor" id="_deprecated000002"></a>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd>
+<dt>Member <a class="el" href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a> </dt>
+<dd><a class="anchor" id="_deprecated000001"></a>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd>
</dl>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/enabling_buffer_device_address.html b/docs/html/enabling_buffer_device_address.html
index e8cead4..a465503 100644
--- a/docs/html/enabling_buffer_device_address.html
+++ b/docs/html/enabling_buffer_device_address.html
@@ -77,7 +77,7 @@
<p >2) Call <code>vkGetPhysicalDeviceFeatures2</code> for the physical device instead of old <code>vkGetPhysicalDeviceFeatures</code>. Attach additional structure <code>VkPhysicalDeviceBufferDeviceAddressFeatures*</code> to <code>VkPhysicalDeviceFeatures2::pNext</code> to be returned. Check if the device feature is really supported - check if <code>VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress</code> is true.</p>
<p >3) (For Vulkan version < 1.2) While creating device with <code>vkCreateDevice</code>, enable this extension - add "VK_KHR_buffer_device_address" to the list passed as <code>VkDeviceCreateInfo::ppEnabledExtensionNames</code>.</p>
<p >4) While creating the device, also don't set <code>VkDeviceCreateInfo::pEnabledFeatures</code>. Fill in <code>VkPhysicalDeviceFeatures2</code> structure instead and pass it as <code>VkDeviceCreateInfo::pNext</code>. Enable this device feature - attach additional structure <code>VkPhysicalDeviceBufferDeviceAddressFeatures*</code> to <code>VkPhysicalDeviceFeatures2::pNext</code> and set its member <code>bufferDeviceAddress</code> to <code>VK_TRUE</code>.</p>
-<p >5) While creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> with <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" title="Creates Allocator object.">vmaCreateAllocator()</a> inform VMA that you have enabled this feature - add <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> to <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a>.</p>
+<p >5) While creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> with <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb" title="Creates VmaAllocator object.">vmaCreateAllocator()</a> inform VMA that you have enabled this feature - add <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> to <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a>.</p>
<h1><a class="anchor" id="enabling_buffer_device_address_usage"></a>
Usage</h1>
<p >After following steps described above, you can create buffers with <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*</code> using VMA. The library automatically adds <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*</code> to allocated memory blocks wherever it might be needed.</p>
diff --git a/docs/html/functions.html b/docs/html/functions.html
index 003c3ad..6e00a0b 100644
--- a/docs/html/functions.html
+++ b/docs/html/functions.html
@@ -128,7 +128,7 @@
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
-<li>offset : <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo</a>, <a class="el" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo</a></li>
+<li>offset : <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo</a>, <a class="el" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo</a>, <a class="el" href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5">VmaVirtualAllocationInfo</a></li>
</ul>
diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html
index 292254b..bc2b8e8 100644
--- a/docs/html/functions_vars.html
+++ b/docs/html/functions_vars.html
@@ -128,7 +128,7 @@
<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
-<li>offset : <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo</a>, <a class="el" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo</a></li>
+<li>offset : <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268">VmaAllocationInfo</a>, <a class="el" href="struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6">VmaDefragmentationPassMoveInfo</a>, <a class="el" href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5">VmaVirtualAllocationInfo</a></li>
</ul>
diff --git a/docs/html/general_considerations.html b/docs/html/general_considerations.html
index d18fcd9..55e1952 100644
--- a/docs/html/general_considerations.html
+++ b/docs/html/general_considerations.html
@@ -74,8 +74,8 @@
<ul>
<li>The library has no global state, so separate <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> objects can be used independently. There should be no need to create multiple such objects though - one per <code>VkDevice</code> is enough.</li>
<li>By default, all calls to functions that take <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> as first parameter are safe to call from multiple threads simultaneously because they are synchronized internally when needed. This includes allocation and deallocation from default memory pool, as well as custom <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>.</li>
-<li>When the allocator is created with <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d" title="Allocator and all objects created from it will not be synchronized internally, so you must guarantee ...">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> flag, calls to functions that take such <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must be synchronized externally.</li>
-<li>Access to a <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object must be externally synchronized. For example, you must not call <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> and <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> from different threads at the same time if you pass the same <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object to these functions.</li>
+<li>When the allocator is created with <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d" title="Allocator and all objects created from it will not be synchronized internally, so you must guarantee ...">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> flag, calls to functions that take such <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must be synchronized externally.</li>
+<li>Access to a <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object must be externally synchronized. For example, you must not call <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> and <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> from different threads at the same time if you pass the same <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object to these functions.</li>
<li><a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is also not safe to be used from multiple threads simultaneously.</li>
</ul>
<h1><a class="anchor" id="general_considerations_validation_layer_warnings"></a>
@@ -102,7 +102,7 @@
<li>Try to find free range of memory in existing blocks.</li>
<li>If failed, try to create a new block of <code>VkDeviceMemory</code>, with preferred block size.</li>
<li>If failed, try to create such block with size/2, size/4, size/8.</li>
-<li>If failed, try to allocate separate <code>VkDeviceMemory</code> for this allocation, just like when you use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</li>
+<li>If failed, try to allocate separate <code>VkDeviceMemory</code> for this allocation, just like when you use <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</li>
<li>If failed, choose other memory type that meets the requirements specified in <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> and go to point 1.</li>
<li>If failed, return <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>.</li>
</ol>
@@ -111,7 +111,7 @@
<p >Features deliberately excluded from the scope of this library:</p>
<ul>
<li><b>Data transfer.</b> Uploading (streaming) and downloading data of buffers and images between CPU and GPU memory and related synchronization is responsibility of the user. Defining some "texture" object that would automatically stream its data from a staging copy in CPU memory to GPU memory would rather be a feature of another, higher-level library implemented on top of VMA.</li>
-<li><b>Recreation of buffers and images.</b> Although the library has functions for buffer and image creation (<a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>), you need to recreate these objects yourself after defragmentation. That is because the big structures <code>VkBufferCreateInfo</code>, <code>VkImageCreateInfo</code> are not stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object.</li>
+<li><b>Recreation of buffers and images.</b> Although the library has functions for buffer and image creation (<a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>), you need to recreate these objects yourself after defragmentation. That is because the big structures <code>VkBufferCreateInfo</code>, <code>VkImageCreateInfo</code> are not stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object.</li>
<li><b>Handling CPU memory allocation failures.</b> When dynamically creating small C++ objects in CPU memory (not Vulkan memory), allocation failures are not checked and handled gracefully, because that would complicate code significantly and is usually not needed in desktop PC applications anyway. Success of an allocation is just checked with an assert.</li>
<li><b>Code free of any compiler warnings.</b> Maintaining the library to compile and work correctly on so many different platforms is hard enough. Being free of any warnings, on any version of any compiler, is simply not feasible. There are many preprocessor macros that make some variables unused, function parameters unreferenced, or conditional expressions constant in some configurations. The code of this library should not be bigger or more complicated just to silence these warnings. It is recommended to disable such warnings instead.</li>
<li>This is a C++ library with C interface. <b>Bindings or ports to any other programming languages</b> are welcome as external projects but are not going to be included into this repository. </li>
diff --git a/docs/html/globals.html b/docs/html/globals.html
index 823372f..256de89 100644
--- a/docs/html/globals.html
+++ b/docs/html/globals.html
@@ -65,162 +65,165 @@
<div class="textblock">Here is a list of all file members with links to the files they belong to:</div>
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PFN_vmaAllocateDeviceMemoryFunction : <a class="el" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">vk_mem_alloc.h</a></li>
-<li>PFN_vmaFreeDeviceMemoryFunction : <a class="el" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">vk_mem_alloc.h</a></li>
+<li>PFN_vmaAllocateDeviceMemoryFunction : <a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">vk_mem_alloc.h</a></li>
+<li>PFN_vmaFreeDeviceMemoryFunction : <a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">vk_mem_alloc.h</a></li>
</ul>
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
+<li>VK_DEFINE_NON_DISPATCHABLE_HANDLE() : <a class="el" href="group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676">vk_mem_alloc.h</a></li>
<li>VK_ERROR_UNKNOWN : <a class="el" href="vk__mem__alloc_8h.html#a162894cbe84f7d76632eb9af1e4b3558">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_DONT_BIND_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_MAPPED_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_RESERVED_1_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_RESERVED_2_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_DONT_BIND_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_MAPPED_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_RESERVED_1_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_RESERVED_2_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">vk_mem_alloc.h</a></li>
<li>VMA_BIND_MEMORY2 : <a class="el" href="vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d">vk_mem_alloc.h</a></li>
<li>VMA_BUFFER_DEVICE_ADDRESS : <a class="el" href="vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10">vk_mem_alloc.h</a></li>
<li>VMA_DEDICATED_ALLOCATION : <a class="el" href="vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4">vk_mem_alloc.h</a></li>
-<li>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">vk_mem_alloc.h</a></li>
-<li>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">vk_mem_alloc.h</a></li>
+<li>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">vk_mem_alloc.h</a></li>
+<li>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL : <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">vk_mem_alloc.h</a></li>
<li>VMA_MEMORY_BUDGET : <a class="el" href="vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_COPY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_ONLY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_TO_GPU : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_ONLY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_TO_CPU : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_UNKNOWN : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_ALGORITHM_MASK : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_COPY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_ONLY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_TO_GPU : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_ONLY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_TO_CPU : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_MAX_ENUM : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_UNKNOWN : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_ALGORITHM_MASK : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_TLSF_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32">vk_mem_alloc.h</a></li>
<li>VMA_STATS_STRING_ENABLED : <a class="el" href="vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemory() : <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryForBuffer() : <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryForImage() : <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryPages() : <a class="el" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vk_mem_alloc.h</a></li>
-<li>VmaAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">vk_mem_alloc.h</a></li>
-<li>VmaAllocationCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">vk_mem_alloc.h</a></li>
-<li>VmaAllocationCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a">vk_mem_alloc.h</a></li>
-<li>VmaAllocationInfo : <a class="el" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorInfo : <a class="el" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">vk_mem_alloc.h</a></li>
-<li>vmaBeginDefragmentationPass() : <a class="el" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vk_mem_alloc.h</a></li>
-<li>vmaBindBufferMemory() : <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vk_mem_alloc.h</a></li>
-<li>vmaBindBufferMemory2() : <a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vk_mem_alloc.h</a></li>
-<li>vmaBindImageMemory() : <a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vk_mem_alloc.h</a></li>
-<li>vmaBindImageMemory2() : <a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vk_mem_alloc.h</a></li>
-<li>VmaBudget : <a class="el" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">vk_mem_alloc.h</a></li>
-<li>vmaBuildStatsString() : <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vk_mem_alloc.h</a></li>
-<li>vmaBuildVirtualBlockStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6">vk_mem_alloc.h</a></li>
-<li>vmaCalculateStats() : <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vk_mem_alloc.h</a></li>
-<li>vmaCalculateVirtualBlockStats() : <a class="el" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">vk_mem_alloc.h</a></li>
-<li>vmaCheckCorruption() : <a class="el" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vk_mem_alloc.h</a></li>
-<li>vmaCheckPoolCorruption() : <a class="el" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vk_mem_alloc.h</a></li>
-<li>vmaClearVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571">vk_mem_alloc.h</a></li>
-<li>vmaCreateAllocator() : <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vk_mem_alloc.h</a></li>
-<li>vmaCreateBuffer() : <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vk_mem_alloc.h</a></li>
-<li>vmaCreateBufferWithAlignment() : <a class="el" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vk_mem_alloc.h</a></li>
-<li>vmaCreateImage() : <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vk_mem_alloc.h</a></li>
-<li>vmaCreatePool() : <a class="el" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vk_mem_alloc.h</a></li>
-<li>vmaCreateVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">vk_mem_alloc.h</a></li>
-<li>vmaDefragment() : <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vk_mem_alloc.h</a></li>
-<li>vmaDefragmentationBegin() : <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vk_mem_alloc.h</a></li>
-<li>vmaDefragmentationEnd() : <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationFlags : <a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationInfo : <a class="el" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationInfo2 : <a class="el" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationPassInfo : <a class="el" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationPassMoveInfo : <a class="el" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationStats : <a class="el" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">vk_mem_alloc.h</a></li>
-<li>vmaDestroyAllocator() : <a class="el" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vk_mem_alloc.h</a></li>
-<li>vmaDestroyBuffer() : <a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vk_mem_alloc.h</a></li>
-<li>vmaDestroyImage() : <a class="el" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vk_mem_alloc.h</a></li>
-<li>vmaDestroyPool() : <a class="el" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vk_mem_alloc.h</a></li>
-<li>vmaDestroyVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">vk_mem_alloc.h</a></li>
-<li>VmaDeviceMemoryCallbacks : <a class="el" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">vk_mem_alloc.h</a></li>
-<li>vmaEndDefragmentationPass() : <a class="el" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndex() : <a class="el" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndexForBufferInfo() : <a class="el" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndexForImageInfo() : <a class="el" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vk_mem_alloc.h</a></li>
-<li>vmaFlushAllocation() : <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vk_mem_alloc.h</a></li>
-<li>vmaFlushAllocations() : <a class="el" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vk_mem_alloc.h</a></li>
-<li>vmaFreeMemory() : <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vk_mem_alloc.h</a></li>
-<li>vmaFreeMemoryPages() : <a class="el" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vk_mem_alloc.h</a></li>
-<li>vmaFreeStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vk_mem_alloc.h</a></li>
-<li>vmaFreeVirtualBlockStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocationInfo() : <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocationMemoryProperties() : <a class="el" href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocatorInfo() : <a class="el" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vk_mem_alloc.h</a></li>
-<li>vmaGetHeapBudgets() : <a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7">vk_mem_alloc.h</a></li>
-<li>vmaGetMemoryProperties() : <a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vk_mem_alloc.h</a></li>
-<li>vmaGetMemoryTypeProperties() : <a class="el" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vk_mem_alloc.h</a></li>
-<li>vmaGetPhysicalDeviceProperties() : <a class="el" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vk_mem_alloc.h</a></li>
-<li>vmaGetPoolName() : <a class="el" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vk_mem_alloc.h</a></li>
-<li>vmaGetPoolStats() : <a class="el" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vk_mem_alloc.h</a></li>
-<li>vmaGetVirtualAllocationInfo() : <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">vk_mem_alloc.h</a></li>
-<li>vmaInvalidateAllocation() : <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vk_mem_alloc.h</a></li>
-<li>vmaInvalidateAllocations() : <a class="el" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vk_mem_alloc.h</a></li>
-<li>vmaIsVirtualBlockEmpty() : <a class="el" href="vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1">vk_mem_alloc.h</a></li>
-<li>vmaMapMemory() : <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vk_mem_alloc.h</a></li>
-<li>VmaMemoryUsage : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">vk_mem_alloc.h</a></li>
-<li>VmaPoolStats : <a class="el" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">vk_mem_alloc.h</a></li>
-<li>vmaSetAllocationUserData() : <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vk_mem_alloc.h</a></li>
-<li>vmaSetCurrentFrameIndex() : <a class="el" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vk_mem_alloc.h</a></li>
-<li>vmaSetPoolName() : <a class="el" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vk_mem_alloc.h</a></li>
-<li>vmaSetVirtualAllocationUserData() : <a class="el" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">vk_mem_alloc.h</a></li>
-<li>VmaStatInfo : <a class="el" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">vk_mem_alloc.h</a></li>
-<li>VmaStats : <a class="el" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">vk_mem_alloc.h</a></li>
-<li>vmaUnmapMemory() : <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vk_mem_alloc.h</a></li>
-<li>vmaVirtualAllocate() : <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationInfo : <a class="el" href="vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773">vk_mem_alloc.h</a></li>
-<li>vmaVirtualFree() : <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vk_mem_alloc.h</a></li>
-<li>VmaVulkanFunctions : <a class="el" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemory() : <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryForBuffer() : <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryForImage() : <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryPages() : <a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateFlagBits : <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateFlags : <a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateInfo : <a class="el" href="group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a">vk_mem_alloc.h</a></li>
+<li>VmaAllocationInfo : <a class="el" href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateFlagBits : <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateFlags : <a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateInfo : <a class="el" href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorInfo : <a class="el" href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">vk_mem_alloc.h</a></li>
+<li>vmaBeginDefragmentationPass() : <a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vk_mem_alloc.h</a></li>
+<li>vmaBindBufferMemory() : <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vk_mem_alloc.h</a></li>
+<li>vmaBindBufferMemory2() : <a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">vk_mem_alloc.h</a></li>
+<li>vmaBindImageMemory() : <a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vk_mem_alloc.h</a></li>
+<li>vmaBindImageMemory2() : <a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">vk_mem_alloc.h</a></li>
+<li>VmaBudget : <a class="el" href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">vk_mem_alloc.h</a></li>
+<li>vmaBuildStatsString() : <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">vk_mem_alloc.h</a></li>
+<li>vmaBuildVirtualBlockStatsString() : <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">vk_mem_alloc.h</a></li>
+<li>vmaCalculateStats() : <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">vk_mem_alloc.h</a></li>
+<li>vmaCalculateVirtualBlockStats() : <a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vk_mem_alloc.h</a></li>
+<li>vmaCheckCorruption() : <a class="el" href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">vk_mem_alloc.h</a></li>
+<li>vmaCheckPoolCorruption() : <a class="el" href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">vk_mem_alloc.h</a></li>
+<li>vmaClearVirtualBlock() : <a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">vk_mem_alloc.h</a></li>
+<li>vmaCreateAllocator() : <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vk_mem_alloc.h</a></li>
+<li>vmaCreateBuffer() : <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vk_mem_alloc.h</a></li>
+<li>vmaCreateBufferWithAlignment() : <a class="el" href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">vk_mem_alloc.h</a></li>
+<li>vmaCreateImage() : <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vk_mem_alloc.h</a></li>
+<li>vmaCreatePool() : <a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vk_mem_alloc.h</a></li>
+<li>vmaCreateVirtualBlock() : <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vk_mem_alloc.h</a></li>
+<li>vmaDefragment() : <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">vk_mem_alloc.h</a></li>
+<li>vmaDefragmentationBegin() : <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vk_mem_alloc.h</a></li>
+<li>vmaDefragmentationEnd() : <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationFlagBits : <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationFlags : <a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationInfo : <a class="el" href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationInfo2 : <a class="el" href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationPassInfo : <a class="el" href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationPassMoveInfo : <a class="el" href="group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationStats : <a class="el" href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">vk_mem_alloc.h</a></li>
+<li>vmaDestroyAllocator() : <a class="el" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vk_mem_alloc.h</a></li>
+<li>vmaDestroyBuffer() : <a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vk_mem_alloc.h</a></li>
+<li>vmaDestroyImage() : <a class="el" href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">vk_mem_alloc.h</a></li>
+<li>vmaDestroyPool() : <a class="el" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vk_mem_alloc.h</a></li>
+<li>vmaDestroyVirtualBlock() : <a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vk_mem_alloc.h</a></li>
+<li>VmaDeviceMemoryCallbacks : <a class="el" href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">vk_mem_alloc.h</a></li>
+<li>vmaEndDefragmentationPass() : <a class="el" href="group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndex() : <a class="el" href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndexForBufferInfo() : <a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndexForImageInfo() : <a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">vk_mem_alloc.h</a></li>
+<li>vmaFlushAllocation() : <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">vk_mem_alloc.h</a></li>
+<li>vmaFlushAllocations() : <a class="el" href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">vk_mem_alloc.h</a></li>
+<li>vmaFreeMemory() : <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vk_mem_alloc.h</a></li>
+<li>vmaFreeMemoryPages() : <a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">vk_mem_alloc.h</a></li>
+<li>vmaFreeStatsString() : <a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vk_mem_alloc.h</a></li>
+<li>vmaFreeVirtualBlockStatsString() : <a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocationInfo() : <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocationMemoryProperties() : <a class="el" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocatorInfo() : <a class="el" href="group__group__init.html#gafa02231a791b37255720d566a52683e7">vk_mem_alloc.h</a></li>
+<li>vmaGetHeapBudgets() : <a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">vk_mem_alloc.h</a></li>
+<li>vmaGetMemoryProperties() : <a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vk_mem_alloc.h</a></li>
+<li>vmaGetMemoryTypeProperties() : <a class="el" href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">vk_mem_alloc.h</a></li>
+<li>vmaGetPhysicalDeviceProperties() : <a class="el" href="group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0">vk_mem_alloc.h</a></li>
+<li>vmaGetPoolName() : <a class="el" href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">vk_mem_alloc.h</a></li>
+<li>vmaGetPoolStats() : <a class="el" href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">vk_mem_alloc.h</a></li>
+<li>vmaGetVirtualAllocationInfo() : <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vk_mem_alloc.h</a></li>
+<li>vmaInvalidateAllocation() : <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">vk_mem_alloc.h</a></li>
+<li>vmaInvalidateAllocations() : <a class="el" href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">vk_mem_alloc.h</a></li>
+<li>vmaIsVirtualBlockEmpty() : <a class="el" href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">vk_mem_alloc.h</a></li>
+<li>vmaMapMemory() : <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vk_mem_alloc.h</a></li>
+<li>VmaMemoryUsage : <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateFlagBits : <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateFlags : <a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateInfo : <a class="el" href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">vk_mem_alloc.h</a></li>
+<li>VmaPoolStats : <a class="el" href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">vk_mem_alloc.h</a></li>
+<li>vmaSetAllocationUserData() : <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">vk_mem_alloc.h</a></li>
+<li>vmaSetCurrentFrameIndex() : <a class="el" href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">vk_mem_alloc.h</a></li>
+<li>vmaSetPoolName() : <a class="el" href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">vk_mem_alloc.h</a></li>
+<li>vmaSetVirtualAllocationUserData() : <a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vk_mem_alloc.h</a></li>
+<li>VmaStatInfo : <a class="el" href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">vk_mem_alloc.h</a></li>
+<li>VmaStats : <a class="el" href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">vk_mem_alloc.h</a></li>
+<li>vmaUnmapMemory() : <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vk_mem_alloc.h</a></li>
+<li>vmaVirtualAllocate() : <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateFlags : <a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateInfo : <a class="el" href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationInfo : <a class="el" href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateFlags : <a class="el" href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateInfo : <a class="el" href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">vk_mem_alloc.h</a></li>
+<li>vmaVirtualFree() : <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vk_mem_alloc.h</a></li>
+<li>VmaVulkanFunctions : <a class="el" href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">vk_mem_alloc.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html
index 81938ad..93fe59e 100644
--- a/docs/html/globals_enum.html
+++ b/docs/html/globals_enum.html
@@ -63,13 +63,13 @@
<div class="contents">
 <ul>
-<li>VmaAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">vk_mem_alloc.h</a></li>
-<li>VmaMemoryUsage : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateFlagBits : <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateFlagBits : <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationFlagBits : <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">vk_mem_alloc.h</a></li>
+<li>VmaMemoryUsage : <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateFlagBits : <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">vk_mem_alloc.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html
index ec29b6a..dbff0dd 100644
--- a/docs/html/globals_eval.html
+++ b/docs/html/globals_eval.html
@@ -65,57 +65,59 @@
 
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
-<li>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_DONT_BIND_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_MAPPED_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_RESERVED_1_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_RESERVED_2_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT : <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">vk_mem_alloc.h</a></li>
-<li>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">vk_mem_alloc.h</a></li>
-<li>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">vk_mem_alloc.h</a></li>
-<li>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL : <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_COPY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_ONLY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_CPU_TO_GPU : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_ONLY : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_GPU_TO_CPU : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">vk_mem_alloc.h</a></li>
-<li>VMA_MEMORY_USAGE_UNKNOWN : <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_ALGORITHM_MASK : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">vk_mem_alloc.h</a></li>
-<li>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">vk_mem_alloc.h</a></li>
-<li>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_DONT_BIND_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_MAPPED_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_RESERVED_1_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_RESERVED_2_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT : <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">vk_mem_alloc.h</a></li>
+<li>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT : <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">vk_mem_alloc.h</a></li>
+<li>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">vk_mem_alloc.h</a></li>
+<li>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL : <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_COPY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_ONLY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_CPU_TO_GPU : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_ONLY : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_GPU_TO_CPU : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_MAX_ENUM : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">vk_mem_alloc.h</a></li>
+<li>VMA_MEMORY_USAGE_UNKNOWN : <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_ALGORITHM_MASK : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">vk_mem_alloc.h</a></li>
+<li>VMA_POOL_CREATE_TLSF_ALGORITHM_BIT : <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT : <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">vk_mem_alloc.h</a></li>
+<li>VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT : <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691">vk_mem_alloc.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/globals_func.html b/docs/html/globals_func.html
index 80ad5d8..a9aaefa 100644
--- a/docs/html/globals_func.html
+++ b/docs/html/globals_func.html
@@ -65,67 +65,68 @@
 
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
-<li>vmaAllocateMemory() : <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryForBuffer() : <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryForImage() : <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vk_mem_alloc.h</a></li>
-<li>vmaAllocateMemoryPages() : <a class="el" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vk_mem_alloc.h</a></li>
-<li>vmaBeginDefragmentationPass() : <a class="el" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vk_mem_alloc.h</a></li>
-<li>vmaBindBufferMemory() : <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vk_mem_alloc.h</a></li>
-<li>vmaBindBufferMemory2() : <a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vk_mem_alloc.h</a></li>
-<li>vmaBindImageMemory() : <a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vk_mem_alloc.h</a></li>
-<li>vmaBindImageMemory2() : <a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vk_mem_alloc.h</a></li>
-<li>vmaBuildStatsString() : <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vk_mem_alloc.h</a></li>
-<li>vmaBuildVirtualBlockStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6">vk_mem_alloc.h</a></li>
-<li>vmaCalculateStats() : <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vk_mem_alloc.h</a></li>
-<li>vmaCalculateVirtualBlockStats() : <a class="el" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">vk_mem_alloc.h</a></li>
-<li>vmaCheckCorruption() : <a class="el" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vk_mem_alloc.h</a></li>
-<li>vmaCheckPoolCorruption() : <a class="el" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vk_mem_alloc.h</a></li>
-<li>vmaClearVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571">vk_mem_alloc.h</a></li>
-<li>vmaCreateAllocator() : <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vk_mem_alloc.h</a></li>
-<li>vmaCreateBuffer() : <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vk_mem_alloc.h</a></li>
-<li>vmaCreateBufferWithAlignment() : <a class="el" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vk_mem_alloc.h</a></li>
-<li>vmaCreateImage() : <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vk_mem_alloc.h</a></li>
-<li>vmaCreatePool() : <a class="el" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vk_mem_alloc.h</a></li>
-<li>vmaCreateVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">vk_mem_alloc.h</a></li>
-<li>vmaDefragment() : <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vk_mem_alloc.h</a></li>
-<li>vmaDefragmentationBegin() : <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vk_mem_alloc.h</a></li>
-<li>vmaDefragmentationEnd() : <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vk_mem_alloc.h</a></li>
-<li>vmaDestroyAllocator() : <a class="el" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vk_mem_alloc.h</a></li>
-<li>vmaDestroyBuffer() : <a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vk_mem_alloc.h</a></li>
-<li>vmaDestroyImage() : <a class="el" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vk_mem_alloc.h</a></li>
-<li>vmaDestroyPool() : <a class="el" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vk_mem_alloc.h</a></li>
-<li>vmaDestroyVirtualBlock() : <a class="el" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">vk_mem_alloc.h</a></li>
-<li>vmaEndDefragmentationPass() : <a class="el" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndex() : <a class="el" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndexForBufferInfo() : <a class="el" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vk_mem_alloc.h</a></li>
-<li>vmaFindMemoryTypeIndexForImageInfo() : <a class="el" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vk_mem_alloc.h</a></li>
-<li>vmaFlushAllocation() : <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vk_mem_alloc.h</a></li>
-<li>vmaFlushAllocations() : <a class="el" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vk_mem_alloc.h</a></li>
-<li>vmaFreeMemory() : <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vk_mem_alloc.h</a></li>
-<li>vmaFreeMemoryPages() : <a class="el" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vk_mem_alloc.h</a></li>
-<li>vmaFreeStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vk_mem_alloc.h</a></li>
-<li>vmaFreeVirtualBlockStatsString() : <a class="el" href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocationInfo() : <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocationMemoryProperties() : <a class="el" href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">vk_mem_alloc.h</a></li>
-<li>vmaGetAllocatorInfo() : <a class="el" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vk_mem_alloc.h</a></li>
-<li>vmaGetHeapBudgets() : <a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7">vk_mem_alloc.h</a></li>
-<li>vmaGetMemoryProperties() : <a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vk_mem_alloc.h</a></li>
-<li>vmaGetMemoryTypeProperties() : <a class="el" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vk_mem_alloc.h</a></li>
-<li>vmaGetPhysicalDeviceProperties() : <a class="el" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vk_mem_alloc.h</a></li>
-<li>vmaGetPoolName() : <a class="el" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vk_mem_alloc.h</a></li>
-<li>vmaGetPoolStats() : <a class="el" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vk_mem_alloc.h</a></li>
-<li>vmaGetVirtualAllocationInfo() : <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">vk_mem_alloc.h</a></li>
-<li>vmaInvalidateAllocation() : <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vk_mem_alloc.h</a></li>
-<li>vmaInvalidateAllocations() : <a class="el" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vk_mem_alloc.h</a></li>
-<li>vmaIsVirtualBlockEmpty() : <a class="el" href="vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1">vk_mem_alloc.h</a></li>
-<li>vmaMapMemory() : <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vk_mem_alloc.h</a></li>
-<li>vmaSetAllocationUserData() : <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vk_mem_alloc.h</a></li>
-<li>vmaSetCurrentFrameIndex() : <a class="el" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vk_mem_alloc.h</a></li>
-<li>vmaSetPoolName() : <a class="el" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vk_mem_alloc.h</a></li>
-<li>vmaSetVirtualAllocationUserData() : <a class="el" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">vk_mem_alloc.h</a></li>
-<li>vmaUnmapMemory() : <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vk_mem_alloc.h</a></li>
-<li>vmaVirtualAllocate() : <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vk_mem_alloc.h</a></li>
-<li>vmaVirtualFree() : <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vk_mem_alloc.h</a></li>
+<li>VK_DEFINE_NON_DISPATCHABLE_HANDLE() : <a class="el" href="group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemory() : <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryForBuffer() : <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryForImage() : <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">vk_mem_alloc.h</a></li>
+<li>vmaAllocateMemoryPages() : <a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">vk_mem_alloc.h</a></li>
+<li>vmaBeginDefragmentationPass() : <a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vk_mem_alloc.h</a></li>
+<li>vmaBindBufferMemory() : <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vk_mem_alloc.h</a></li>
+<li>vmaBindBufferMemory2() : <a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">vk_mem_alloc.h</a></li>
+<li>vmaBindImageMemory() : <a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vk_mem_alloc.h</a></li>
+<li>vmaBindImageMemory2() : <a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">vk_mem_alloc.h</a></li>
+<li>vmaBuildStatsString() : <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">vk_mem_alloc.h</a></li>
+<li>vmaBuildVirtualBlockStatsString() : <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">vk_mem_alloc.h</a></li>
+<li>vmaCalculateStats() : <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">vk_mem_alloc.h</a></li>
+<li>vmaCalculateVirtualBlockStats() : <a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vk_mem_alloc.h</a></li>
+<li>vmaCheckCorruption() : <a class="el" href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">vk_mem_alloc.h</a></li>
+<li>vmaCheckPoolCorruption() : <a class="el" href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">vk_mem_alloc.h</a></li>
+<li>vmaClearVirtualBlock() : <a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">vk_mem_alloc.h</a></li>
+<li>vmaCreateAllocator() : <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vk_mem_alloc.h</a></li>
+<li>vmaCreateBuffer() : <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vk_mem_alloc.h</a></li>
+<li>vmaCreateBufferWithAlignment() : <a class="el" href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">vk_mem_alloc.h</a></li>
+<li>vmaCreateImage() : <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vk_mem_alloc.h</a></li>
+<li>vmaCreatePool() : <a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vk_mem_alloc.h</a></li>
+<li>vmaCreateVirtualBlock() : <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vk_mem_alloc.h</a></li>
+<li>vmaDefragment() : <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">vk_mem_alloc.h</a></li>
+<li>vmaDefragmentationBegin() : <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vk_mem_alloc.h</a></li>
+<li>vmaDefragmentationEnd() : <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vk_mem_alloc.h</a></li>
+<li>vmaDestroyAllocator() : <a class="el" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vk_mem_alloc.h</a></li>
+<li>vmaDestroyBuffer() : <a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vk_mem_alloc.h</a></li>
+<li>vmaDestroyImage() : <a class="el" href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">vk_mem_alloc.h</a></li>
+<li>vmaDestroyPool() : <a class="el" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vk_mem_alloc.h</a></li>
+<li>vmaDestroyVirtualBlock() : <a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vk_mem_alloc.h</a></li>
+<li>vmaEndDefragmentationPass() : <a class="el" href="group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndex() : <a class="el" href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndexForBufferInfo() : <a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vk_mem_alloc.h</a></li>
+<li>vmaFindMemoryTypeIndexForImageInfo() : <a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">vk_mem_alloc.h</a></li>
+<li>vmaFlushAllocation() : <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">vk_mem_alloc.h</a></li>
+<li>vmaFlushAllocations() : <a class="el" href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">vk_mem_alloc.h</a></li>
+<li>vmaFreeMemory() : <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vk_mem_alloc.h</a></li>
+<li>vmaFreeMemoryPages() : <a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">vk_mem_alloc.h</a></li>
+<li>vmaFreeStatsString() : <a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vk_mem_alloc.h</a></li>
+<li>vmaFreeVirtualBlockStatsString() : <a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocationInfo() : <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocationMemoryProperties() : <a class="el" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vk_mem_alloc.h</a></li>
+<li>vmaGetAllocatorInfo() : <a class="el" href="group__group__init.html#gafa02231a791b37255720d566a52683e7">vk_mem_alloc.h</a></li>
+<li>vmaGetHeapBudgets() : <a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">vk_mem_alloc.h</a></li>
+<li>vmaGetMemoryProperties() : <a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vk_mem_alloc.h</a></li>
+<li>vmaGetMemoryTypeProperties() : <a class="el" href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">vk_mem_alloc.h</a></li>
+<li>vmaGetPhysicalDeviceProperties() : <a class="el" href="group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0">vk_mem_alloc.h</a></li>
+<li>vmaGetPoolName() : <a class="el" href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">vk_mem_alloc.h</a></li>
+<li>vmaGetPoolStats() : <a class="el" href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">vk_mem_alloc.h</a></li>
+<li>vmaGetVirtualAllocationInfo() : <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vk_mem_alloc.h</a></li>
+<li>vmaInvalidateAllocation() : <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">vk_mem_alloc.h</a></li>
+<li>vmaInvalidateAllocations() : <a class="el" href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">vk_mem_alloc.h</a></li>
+<li>vmaIsVirtualBlockEmpty() : <a class="el" href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">vk_mem_alloc.h</a></li>
+<li>vmaMapMemory() : <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vk_mem_alloc.h</a></li>
+<li>vmaSetAllocationUserData() : <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">vk_mem_alloc.h</a></li>
+<li>vmaSetCurrentFrameIndex() : <a class="el" href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">vk_mem_alloc.h</a></li>
+<li>vmaSetPoolName() : <a class="el" href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">vk_mem_alloc.h</a></li>
+<li>vmaSetVirtualAllocationUserData() : <a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vk_mem_alloc.h</a></li>
+<li>vmaUnmapMemory() : <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vk_mem_alloc.h</a></li>
+<li>vmaVirtualAllocate() : <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vk_mem_alloc.h</a></li>
+<li>vmaVirtualFree() : <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vk_mem_alloc.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/globals_type.html b/docs/html/globals_type.html
index 7f308d8..8c946a6 100644
--- a/docs/html/globals_type.html
+++ b/docs/html/globals_type.html
@@ -65,44 +65,44 @@
 
<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
-<li>PFN_vmaAllocateDeviceMemoryFunction : <a class="el" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">vk_mem_alloc.h</a></li>
-<li>PFN_vmaFreeDeviceMemoryFunction : <a class="el" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">vk_mem_alloc.h</a></li>
+<li>PFN_vmaAllocateDeviceMemoryFunction : <a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">vk_mem_alloc.h</a></li>
+<li>PFN_vmaFreeDeviceMemoryFunction : <a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">vk_mem_alloc.h</a></li>
</ul>
<h3><a id="index_v" name="index_v"></a>- v -</h3><ul>
-<li>VmaAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941">vk_mem_alloc.h</a></li>
-<li>VmaAllocationCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">vk_mem_alloc.h</a></li>
-<li>VmaAllocationCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a">vk_mem_alloc.h</a></li>
-<li>VmaAllocationInfo : <a class="el" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">vk_mem_alloc.h</a></li>
-<li>VmaAllocatorInfo : <a class="el" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">vk_mem_alloc.h</a></li>
-<li>VmaBudget : <a class="el" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationFlags : <a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationInfo : <a class="el" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationInfo2 : <a class="el" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationPassInfo : <a class="el" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationPassMoveInfo : <a class="el" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">vk_mem_alloc.h</a></li>
-<li>VmaDefragmentationStats : <a class="el" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">vk_mem_alloc.h</a></li>
-<li>VmaDeviceMemoryCallbacks : <a class="el" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">vk_mem_alloc.h</a></li>
-<li>VmaMemoryUsage : <a class="el" href="vk__mem__alloc_8h.html#a806e8499dde802e59eb72a1dc811c35f">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">vk_mem_alloc.h</a></li>
-<li>VmaPoolCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">vk_mem_alloc.h</a></li>
-<li>VmaPoolStats : <a class="el" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">vk_mem_alloc.h</a></li>
-<li>VmaStatInfo : <a class="el" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">vk_mem_alloc.h</a></li>
-<li>VmaStats : <a class="el" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e">vk_mem_alloc.h</a></li>
-<li>VmaVirtualAllocationInfo : <a class="el" href="vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateFlags : <a class="el" href="vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e">vk_mem_alloc.h</a></li>
-<li>VmaVirtualBlockCreateInfo : <a class="el" href="vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773">vk_mem_alloc.h</a></li>
-<li>VmaVulkanFunctions : <a class="el" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateFlagBits : <a class="el" href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateFlags : <a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">vk_mem_alloc.h</a></li>
+<li>VmaAllocationCreateInfo : <a class="el" href="group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a">vk_mem_alloc.h</a></li>
+<li>VmaAllocationInfo : <a class="el" href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateFlagBits : <a class="el" href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateFlags : <a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorCreateInfo : <a class="el" href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">vk_mem_alloc.h</a></li>
+<li>VmaAllocatorInfo : <a class="el" href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">vk_mem_alloc.h</a></li>
+<li>VmaBudget : <a class="el" href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationFlagBits : <a class="el" href="group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationFlags : <a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationInfo : <a class="el" href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationInfo2 : <a class="el" href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationPassInfo : <a class="el" href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationPassMoveInfo : <a class="el" href="group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5">vk_mem_alloc.h</a></li>
+<li>VmaDefragmentationStats : <a class="el" href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">vk_mem_alloc.h</a></li>
+<li>VmaDeviceMemoryCallbacks : <a class="el" href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">vk_mem_alloc.h</a></li>
+<li>VmaMemoryUsage : <a class="el" href="group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateFlagBits : <a class="el" href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateFlags : <a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">vk_mem_alloc.h</a></li>
+<li>VmaPoolCreateInfo : <a class="el" href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">vk_mem_alloc.h</a></li>
+<li>VmaPoolStats : <a class="el" href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">vk_mem_alloc.h</a></li>
+<li>VmaStatInfo : <a class="el" href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">vk_mem_alloc.h</a></li>
+<li>VmaStats : <a class="el" href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateFlagBits : <a class="el" href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateFlags : <a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationCreateInfo : <a class="el" href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">vk_mem_alloc.h</a></li>
+<li>VmaVirtualAllocationInfo : <a class="el" href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateFlagBits : <a class="el" href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateFlags : <a class="el" href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">vk_mem_alloc.h</a></li>
+<li>VmaVirtualBlockCreateInfo : <a class="el" href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">vk_mem_alloc.h</a></li>
+<li>VmaVulkanFunctions : <a class="el" href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">vk_mem_alloc.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
diff --git a/docs/html/group__group__alloc.html b/docs/html/group__group__alloc.html
new file mode 100644
index 0000000..cc26779
--- /dev/null
+++ b/docs/html/group__group__alloc.html
@@ -0,0 +1,2534 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: Memory allocation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Memory allocation</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images. Most basic ones being: <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="struct_vma_pool_create_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="struct_vma_allocation_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for defragmentation. <a href="struct_vma_defragmentation_info2.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for incremental defragmentation steps. <a href="struct_vma_defragmentation_pass_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_stats.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool.html">VmaPool</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents custom memory pool. <a href="struct_vma_pool.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents single memory allocation. <a href="struct_vma_allocation.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents Opaque object that represents started defragmentation process. <a href="struct_vma_defragmentation_context.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga806e8499dde802e59eb72a1dc811c35f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f">VmaMemoryUsage</a></td></tr>
+<tr class="memdesc:ga806e8499dde802e59eb72a1dc811c35f"><td class="mdescLeft"> </td><td class="mdescRight">Intended usage of the allocated memory. <a href="group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f">More...</a><br /></td></tr>
+<tr class="separator:ga806e8499dde802e59eb72a1dc811c35f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fceecc301f4064dc808d3cd6c038941"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941">VmaAllocationCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga4fceecc301f4064dc808d3cd6c038941"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941">More...</a><br /></td></tr>
+<tr class="separator:ga4fceecc301f4064dc808d3cd6c038941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5225e5e11f8376f6a31a1791f3d6e817"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></td></tr>
+<tr class="separator:ga5225e5e11f8376f6a31a1791f3d6e817"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303">VmaPoolCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303">More...</a><br /></td></tr>
+<tr class="separator:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2770e325ea42e087c1b91fdf46d0292a"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></td></tr>
+<tr class="memdesc:ga2770e325ea42e087c1b91fdf46d0292a"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. See <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. <a href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">More...</a><br /></td></tr>
+<tr class="separator:ga2770e325ea42e087c1b91fdf46d0292a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13415cc0b443353a7b5abda300b833fc"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc">VmaDefragmentationFlagBits</a></td></tr>
+<tr class="memdesc:ga13415cc0b443353a7b5abda300b833fc"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc">More...</a><br /></td></tr>
+<tr class="separator:ga13415cc0b443353a7b5abda300b833fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88a77cef37e5d3c4fc9eb328885d048d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></td></tr>
+<tr class="separator:ga88a77cef37e5d3c4fc9eb328885d048d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3bf110892ea2fb4649fedb68488d026a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a">VmaAllocationCreateInfo</a></td></tr>
+<tr class="separator:ga3bf110892ea2fb4649fedb68488d026a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1017aa83489c0eee8d2163d2bf253f67"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a></td></tr>
+<tr class="memdesc:ga1017aa83489c0eee8d2163d2bf253f67"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">More...</a><br /></td></tr>
+<tr class="separator:ga1017aa83489c0eee8d2163d2bf253f67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1cf7774606721026a68aabe3af2e5b50"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a></td></tr>
+<tr class="memdesc:ga1cf7774606721026a68aabe3af2e5b50"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">More...</a><br /></td></tr>
+<tr class="separator:ga1cf7774606721026a68aabe3af2e5b50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6daeffaa670ce6d11a203a6224c9937"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a></td></tr>
+<tr class="memdesc:gad6daeffaa670ce6d11a203a6224c9937"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for defragmentation. <a href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">More...</a><br /></td></tr>
+<tr class="separator:gad6daeffaa670ce6d11a203a6224c9937"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a></td></tr>
+<tr class="separator:gad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72aebd522242d56abea67b4f47f6549e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a></td></tr>
+<tr class="memdesc:ga72aebd522242d56abea67b4f47f6549e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for incremental defragmentation steps. <a href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">More...</a><br /></td></tr>
+<tr class="separator:ga72aebd522242d56abea67b4f47f6549e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a></td></tr>
+<tr class="memdesc:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">More...</a><br /></td></tr>
+<tr class="separator:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad94034192259c2e34a4d1c5e27810403"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a></td></tr>
+<tr class="memdesc:gad94034192259c2e34a4d1c5e27810403"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">More...</a><br /></td></tr>
+<tr class="separator:gad94034192259c2e34a4d1c5e27810403"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gaa5846affa1e9da3800e3e78fae2305cc"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> { <br />
+  <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3
+, <br />
+  <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a> = 5
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a> = 6
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:gaa5846affa1e9da3800e3e78fae2305cc"><td class="mdescLeft"> </td><td class="mdescRight">Intended usage of the allocated memory. <a href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">More...</a><br /></td></tr>
+<tr class="separator:gaa5846affa1e9da3800e3e78fae2305cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9889c10c798b040d59c92f257cae597"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">VMA_ALLOCATION_CREATE_RESERVED_1_BIT</a> = 0x00000008
+, <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">VMA_ALLOCATION_CREATE_RESERVED_2_BIT</a> = 0x00000010
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a> = 0x00000080
+, <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> = 0x00000100
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT</a> = 0x00000200
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a> = 0x00010000
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> = 0x00020000
+, <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a> = 0x00040000
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT
+, <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a>
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:gad9889c10c798b040d59c92f257cae597"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">More...</a><br /></td></tr>
+<tr class="separator:gad9889c10c798b040d59c92f257cae597"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000008
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32">VMA_POOL_CREATE_TLSF_ALGORITHM_BIT</a> = 0x00000010
+, <br />
+  <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a>
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">More...</a><br /></td></tr>
+<tr class="separator:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6552a65b71d16f378c6994b3ceaef50c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> { <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> = 0x1
+, <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+ }</td></tr>
+<tr class="memdesc:ga6552a65b71d16f378c6994b3ceaef50c"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">More...</a><br /></td></tr>
+<tr class="separator:ga6552a65b71d16f378c6994b3ceaef50c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given memoryTypeBits and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">More...</a><br /></td></tr>
+<tr class="separator:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae790ab9ffaf7667fb8f62523e6897888"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:gae790ab9ffaf7667fb8f62523e6897888"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkBufferCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">More...</a><br /></td></tr>
+<tr class="separator:gae790ab9ffaf7667fb8f62523e6897888"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkImageCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">More...</a><br /></td></tr>
+<tr class="separator:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_pool.html">VmaPool</a> *pPool)</td></tr>
+<tr class="memdesc:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="mdescLeft"> </td><td class="mdescRight">Allocates Vulkan device memory and creates <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">More...</a><br /></td></tr>
+<tr class="separator:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5485779c8f1948238fc4e92232fa65e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
+<tr class="memdesc:ga5485779c8f1948238fc4e92232fa65e1"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object and frees Vulkan device memory. <a href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">More...</a><br /></td></tr>
+<tr class="separator:ga5485779c8f1948238fc4e92232fa65e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad535935619c7a549bf837e1bb0068f89"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
+<tr class="memdesc:gad535935619c7a549bf837e1bb0068f89"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory pool in search for corruptions. <a href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">More...</a><br /></td></tr>
+<tr class="separator:gad535935619c7a549bf837e1bb0068f89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char **ppName)</td></tr>
+<tr class="memdesc:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves name of a custom pool. <a href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">More...</a><br /></td></tr>
+<tr class="separator:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbae3a0b4ab078024462fc85c37f3b58"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char *pName)</td></tr>
+<tr class="memdesc:gadbae3a0b4ab078024462fc85c37f3b58"><td class="mdescLeft"> </td><td class="mdescRight">Sets name of a custom pool. <a href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">More...</a><br /></td></tr>
+<tr class="separator:gadbae3a0b4ab078024462fc85c37f3b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation. <a href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">More...</a><br /></td></tr>
+<tr class="separator:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, size_t allocationCount, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation for multiple allocation objects at once. <a href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">More...</a><br /></td></tr>
+<tr class="separator:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7fdf64415b6c3d83c454f28d2c53df7b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="separator:ga7fdf64415b6c3d83c454f28d2c53df7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0faa3f9e5fb233d29d1e00390650febb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga0faa3f9e5fb233d29d1e00390650febb"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>. <a href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">More...</a><br /></td></tr>
+<tr class="separator:ga0faa3f9e5fb233d29d1e00390650febb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fea5518972ae9094b1526cbcb19b05f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga5fea5518972ae9094b1526cbcb19b05f"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory previously allocated using <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, or <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. <a href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">More...</a><br /></td></tr>
+<tr class="separator:ga5fea5518972ae9094b1526cbcb19b05f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, size_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations)</td></tr>
+<tr class="memdesc:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory and destroys multiple allocations. <a href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">More...</a><br /></td></tr>
+<tr class="separator:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="mdescLeft"> </td><td class="mdescRight">Returns current information about specified allocation. <a href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">More...</a><br /></td></tr>
+<tr class="separator:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9147d31ffc11d62fc187bde283ed14f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void *pUserData)</td></tr>
+<tr class="memdesc:gaf9147d31ffc11d62fc187bde283ed14f"><td class="mdescLeft"> </td><td class="mdescRight">Sets pUserData in given allocation to new value. <a href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">More...</a><br /></td></tr>
+<tr class="separator:gaf9147d31ffc11d62fc187bde283ed14f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga571e87dd38e552249b56b1b0b982fad1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkMemoryPropertyFlags *pFlags)</td></tr>
+<tr class="memdesc:ga571e87dd38e552249b56b1b0b982fad1"><td class="mdescLeft"> </td><td class="mdescRight">Given an allocation, returns Property Flags of its memory type. <a href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">More...</a><br /></td></tr>
+<tr class="separator:ga571e87dd38e552249b56b1b0b982fad1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5bd1243512d099706de88168992f069"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vmaMapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void **ppData)</td></tr>
+<tr class="memdesc:gad5bd1243512d099706de88168992f069"><td class="mdescLeft"> </td><td class="mdescRight">Maps memory represented by given allocation and returns pointer to it. <a href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">More...</a><br /></td></tr>
+<tr class="separator:gad5bd1243512d099706de88168992f069"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="mdescLeft"> </td><td class="mdescRight">Unmaps memory represented by given allocation, mapped previously using <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. <a href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">More...</a><br /></td></tr>
+<tr class="separator:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30c37c1eec6025f397be41644f48490f"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
+<tr class="memdesc:ga30c37c1eec6025f397be41644f48490f"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given allocation. <a href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">More...</a><br /></td></tr>
+<tr class="separator:ga30c37c1eec6025f397be41644f48490f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa8412919139ef413a4215ac6a290fae"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
+<tr class="memdesc:gaaa8412919139ef413a4215ac6a290fae"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given allocation. <a href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">More...</a><br /></td></tr>
+<tr class="separator:gaaa8412919139ef413a4215ac6a290fae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3dd00da721875ed99fa8a881922bdfc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
+<tr class="memdesc:gac3dd00da721875ed99fa8a881922bdfc"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given set of allocations. <a href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">More...</a><br /></td></tr>
+<tr class="separator:gac3dd00da721875ed99fa8a881922bdfc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab25b558d75f7378ec944a1522fdcc3c5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
+<tr class="memdesc:gab25b558d75f7378ec944a1522fdcc3c5"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given set of allocations. <a href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">More...</a><br /></td></tr>
+<tr class="separator:gab25b558d75f7378ec944a1522fdcc3c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49329a7f030dafcf82f7b73334c22e98"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits)</td></tr>
+<tr class="memdesc:ga49329a7f030dafcf82f7b73334c22e98"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. <a href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">More...</a><br /></td></tr>
+<tr class="separator:ga49329a7f030dafcf82f7b73334c22e98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> *pInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pStats, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</td></tr>
+<tr class="memdesc:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="mdescLeft"> </td><td class="mdescRight">Begins defragmentation process. <a href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">More...</a><br /></td></tr>
+<tr class="separator:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8774e20e91e245aae959ba63efa15dd2"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
+<tr class="memdesc:ga8774e20e91e245aae959ba63efa15dd2"><td class="mdescLeft"> </td><td class="mdescRight">Ends defragmentation process. <a href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">More...</a><br /></td></tr>
+<tr class="separator:ga8774e20e91e245aae959ba63efa15dd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context, <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> *pInfo)</td></tr>
+<tr class="separator:gac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b9ffa538bed905af55c747cc48963bd"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
+<tr class="separator:ga1b9ffa538bed905af55c747cc48963bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pDefragmentationStats)</td></tr>
+<tr class="memdesc:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Compacts memory by moving allocations. <a href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">More...</a><br /></td></tr>
+<tr class="separator:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b0929b914b60cf2d45cac4bf3547470"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkBuffer buffer)</td></tr>
+<tr class="memdesc:ga6b0929b914b60cf2d45cac4bf3547470"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation. <a href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">More...</a><br /></td></tr>
+<tr class="separator:ga6b0929b914b60cf2d45cac4bf3547470"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga927c944f45e0f2941182abb6f608e64a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkBuffer buffer, const void *pNext)</td></tr>
+<tr class="memdesc:ga927c944f45e0f2941182abb6f608e64a"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation with additional parameters. <a href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">More...</a><br /></td></tr>
+<tr class="separator:ga927c944f45e0f2941182abb6f608e64a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkImage image)</td></tr>
+<tr class="memdesc:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation. <a href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">More...</a><br /></td></tr>
+<tr class="separator:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkImage image, const void *pNext)</td></tr>
+<tr class="memdesc:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation with additional parameters. <a href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">More...</a><br /></td></tr>
+<tr class="separator:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac72ee55598617e8eecca384e746bab51"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="separator:gac72ee55598617e8eecca384e746bab51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa06a690013a0d01e60894ac378083834"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkDeviceSize minAlignment, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gaa06a690013a0d01e60894ac378083834"><td class="mdescLeft"> </td><td class="mdescRight">Creates a buffer with additional minimum alignment. <a href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">More...</a><br /></td></tr>
+<tr class="separator:gaa06a690013a0d01e60894ac378083834"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan buffer and frees allocated memory. <a href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">More...</a><br /></td></tr>
+<tr class="separator:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02a94f25679275851a53e82eacbcfc73"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkImage *pImage, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga02a94f25679275851a53e82eacbcfc73"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>. <a href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">More...</a><br /></td></tr>
+<tr class="separator:ga02a94f25679275851a53e82eacbcfc73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan image and frees allocated memory. <a href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">More...</a><br /></td></tr>
+<tr class="separator:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p >API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images. Most basic ones being: <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga4fceecc301f4064dc808d3cd6c038941" name="ga4fceecc301f4064dc808d3cd6c038941"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4fceecc301f4064dc808d3cd6c038941">◆ </a></span>VmaAllocationCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. </p>
+
+</div>
+</div>
+<a id="ga5225e5e11f8376f6a31a1791f3d6e817" name="ga5225e5e11f8376f6a31a1791f3d6e817"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5225e5e11f8376f6a31a1791f3d6e817">◆ </a></span>VmaAllocationCreateFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga3bf110892ea2fb4649fedb68488d026a" name="ga3bf110892ea2fb4649fedb68488d026a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3bf110892ea2fb4649fedb68488d026a">◆ </a></span>VmaAllocationCreateInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga1cf7774606721026a68aabe3af2e5b50" name="ga1cf7774606721026a68aabe3af2e5b50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1cf7774606721026a68aabe3af2e5b50">◆ </a></span>VmaAllocationInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. </p>
+
+</div>
+</div>
+<a id="ga13415cc0b443353a7b5abda300b833fc" name="ga13415cc0b443353a7b5abda300b833fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga13415cc0b443353a7b5abda300b833fc">◆ </a></span>VmaDefragmentationFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. </p>
+
+</div>
+</div>
+<a id="ga88a77cef37e5d3c4fc9eb328885d048d" name="ga88a77cef37e5d3c4fc9eb328885d048d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga88a77cef37e5d3c4fc9eb328885d048d">◆ </a></span>VmaDefragmentationFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga2bf47f96bf92bed2a49461bd9af3acfa" name="ga2bf47f96bf92bed2a49461bd9af3acfa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2bf47f96bf92bed2a49461bd9af3acfa">◆ </a></span>VmaDefragmentationInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd></dl>
+
+</div>
+</div>
+<a id="gad6daeffaa670ce6d11a203a6224c9937" name="gad6daeffaa670ce6d11a203a6224c9937"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad6daeffaa670ce6d11a203a6224c9937">◆ </a></span>VmaDefragmentationInfo2</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters for defragmentation. </p>
+<p >To be used with function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. </p>
+
+</div>
+</div>
+<a id="ga72aebd522242d56abea67b4f47f6549e" name="ga72aebd522242d56abea67b4f47f6549e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga72aebd522242d56abea67b4f47f6549e">◆ </a></span>VmaDefragmentationPassInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters for incremental defragmentation steps. </p>
+<p >To be used with function <a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass()</a>. </p>
+
+</div>
+</div>
+<a id="gad6799e8e2b1527abfc84d33bc44aeaf5" name="gad6799e8e2b1527abfc84d33bc44aeaf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad6799e8e2b1527abfc84d33bc44aeaf5">◆ </a></span>VmaDefragmentationPassMoveInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="gad94034192259c2e34a4d1c5e27810403" name="gad94034192259c2e34a4d1c5e27810403"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad94034192259c2e34a4d1c5e27810403">◆ </a></span>VmaDefragmentationStats</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
+
+</div>
+</div>
+<a id="ga806e8499dde802e59eb72a1dc811c35f" name="ga806e8499dde802e59eb72a1dc811c35f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga806e8499dde802e59eb72a1dc811c35f">◆ </a></span>VmaMemoryUsage</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Intended usage of the allocated memory. </p>
+
+</div>
+</div>
+<a id="ga4d4f2efc2509157a9e4ecd4fd7942303" name="ga4d4f2efc2509157a9e4ecd4fd7942303"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4d4f2efc2509157a9e4ecd4fd7942303">◆ </a></span>VmaPoolCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. </p>
+
+</div>
+</div>
+<a id="ga2770e325ea42e087c1b91fdf46d0292a" name="ga2770e325ea42e087c1b91fdf46d0292a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2770e325ea42e087c1b91fdf46d0292a">◆ </a></span>VmaPoolCreateFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. See <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. </p>
+
+</div>
+</div>
+<a id="ga1017aa83489c0eee8d2163d2bf253f67" name="ga1017aa83489c0eee8d2163d2bf253f67"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1017aa83489c0eee8d2163d2bf253f67">◆ </a></span>VmaPoolCreateInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gad9889c10c798b040d59c92f257cae597" name="gad9889c10c798b040d59c92f257cae597"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad9889c10c798b040d59c92f257cae597">◆ </a></span>VmaAllocationCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" name="ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"></a>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT </td><td class="fielddoc"><p >Set this flag if the allocation should have its own memory block. </p>
+<p >Use it for special, big resources, like fullscreen images used as attachments. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" name="ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"></a>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT </td><td class="fielddoc"><p >Set this flag to only try to allocate from existing <code>VkDeviceMemory</code> blocks and never create new such block. </p>
+<p >If new allocation cannot be placed in any of the existing blocks, allocation fails with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> error.</p>
+<p >You should not use <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> and <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> at the same time. It makes no sense.</p>
+<p >If <a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> is not null, this flag is implied and ignored. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" name="ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"></a>VMA_ALLOCATION_CREATE_MAPPED_BIT </td><td class="fielddoc"><p >Set this flag to use a memory that will be persistently mapped and retrieve pointer to it. </p>
+<p >Pointer to mapped memory will be returned through <a class="el" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2" title="Pointer to the beginning of this allocation as mapped data.">VmaAllocationInfo::pMappedData</a>.</p>
+<p >It is valid to use this flag for allocation made from memory type that is not <code>HOST_VISIBLE</code>. This flag is then ignored and memory is not mapped. This is useful if you need an allocation that is efficient to use on GPU (<code>DEVICE_LOCAL</code>) and still want to map it directly if possible on platforms that support it (e.g. Intel GPU). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103" name="ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103"></a>VMA_ALLOCATION_CREATE_RESERVED_1_BIT </td><td class="fielddoc"><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>Removed. Do not use. </dd></dl>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7" name="ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7"></a>VMA_ALLOCATION_CREATE_RESERVED_2_BIT </td><td class="fielddoc"><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000004">Deprecated:</a></b></dt><dd>Removed. Do not use. </dd></dl>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520" name="ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"></a>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT </td><td class="fielddoc"><p >Set this flag to treat <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> as pointer to a null-terminated string. Instead of copying pointer value, a local copy of the string is made and stored in allocation's <code>pUserData</code>. The string is automatically freed together with the allocation. It is also used in <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df" name="ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"></a>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT </td><td class="fielddoc"><p >Allocation will be created from upper stack in a double stack pool.</p>
+<p >This flag is only allowed for custom pools created with <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> flag. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea" name="ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"></a>VMA_ALLOCATION_CREATE_DONT_BIND_BIT </td><td class="fielddoc"><p >Create both buffer/image and allocation, but don't bind them together. It is useful when you want to bind yourself to do some more advanced binding, e.g. using some extensions. The flag is meaningful only with functions that bind by default: <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. Otherwise it is ignored. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d" name="ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"></a>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT </td><td class="fielddoc"><p >Create allocation only if additional device memory required for it, if any, won't exceed memory budget. Otherwise return <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6" name="ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6"></a>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT </td><td class="fielddoc"><p >Set this flag if the allocated memory will have aliasing resources. </p>
+<p >Usage of this flag prevents supplying <code>VkMemoryDedicatedAllocateInfoKHR</code> when VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified. Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d" name="ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"></a>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses smallest possible free range for the allocation. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62" name="ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"></a>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses biggest possible free range for the allocation. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777" name="ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"></a>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses first suitable free range for the allocation.</p>
+<p >"First" doesn't necessarily means the one with smallest offset in memory, but rather the one that is easiest and fastest to find. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d" name="ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory usage. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d" name="ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize allocation time. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706" name="ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory fragmentation. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e" name="ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"></a>VMA_ALLOCATION_CREATE_STRATEGY_MASK </td><td class="fielddoc"><p >A bit mask to extract only <code>STRATEGY</code> bits from entire set of flags. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882" name="ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"></a>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga6552a65b71d16f378c6994b3ceaef50c" name="ga6552a65b71d16f378c6994b3ceaef50c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6552a65b71d16f378c6994b3ceaef50c">◆ </a></span>VmaDefragmentationFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33" name="gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"></a>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL </td><td class="fielddoc"></td></tr>
+<tr><td class="fieldname"><a id="gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97" name="gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"></a>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<a id="gaa5846affa1e9da3800e3e78fae2305cc" name="gaa5846affa1e9da3800e3e78fae2305cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa5846affa1e9da3800e3e78fae2305cc">◆ </a></span>VmaMemoryUsage</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Intended usage of the allocated memory. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd" name="ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"></a>VMA_MEMORY_USAGE_UNKNOWN </td><td class="fielddoc"><p >No intended memory usage specified. Use other members of <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> to specify your requirements. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7" name="ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"></a>VMA_MEMORY_USAGE_GPU_ONLY </td><td class="fielddoc"><p >Memory will be used on device only, so fast access from the device is preferred. It usually means device-local GPU (video) memory. No need to be mappable on host. It is roughly equivalent of <code>D3D12_HEAP_TYPE_DEFAULT</code>.</p>
+<p >Usage:</p>
+<ul>
+<li>Resources written and read by device, e.g. images used as attachments.</li>
+<li>Resources transferred from host once (immutable) or infrequently and read by device multiple times, e.g. textures to be sampled, vertex buffers, uniform (constant) buffers, and majority of other types of resources used on GPU.</li>
+</ul>
+<p >Allocation may still end up in <code>HOST_VISIBLE</code> memory on some implementations. In such case, you are free to map it. You can use <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> with this usage type. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5" name="ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"></a>VMA_MEMORY_USAGE_CPU_ONLY </td><td class="fielddoc"><p >Memory will be mappable on host. It usually means CPU (system) memory. Guarantees to be <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. CPU access is typically uncached. Writes may be write-combined. Resources created in this pool may still be accessible to the device, but access to them can be slow. It is roughly equivalent of <code>D3D12_HEAP_TYPE_UPLOAD</code>.</p>
+<p >Usage: Staging copy of resources used as transfer source. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67" name="ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"></a>VMA_MEMORY_USAGE_CPU_TO_GPU </td><td class="fielddoc"><p >Memory that is both mappable on host (guarantees to be <code>HOST_VISIBLE</code>) and preferably fast to access by GPU. CPU access is typically uncached. Writes may be write-combined.</p>
+<p >Usage: Resources written frequently by host (dynamic), read by device. E.g. textures (with LINEAR layout), vertex buffers, uniform buffers updated every frame or every draw call. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27" name="ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"></a>VMA_MEMORY_USAGE_GPU_TO_CPU </td><td class="fielddoc"><p >Memory mappable on host (guarantees to be <code>HOST_VISIBLE</code>) and cached. It is roughly equivalent of <code>D3D12_HEAP_TYPE_READBACK</code>.</p>
+<p >Usage:</p>
+<ul>
+<li>Resources written by device, read by host - results of some computations, e.g. screen capture, average scene luminance for HDR tone mapping.</li>
+<li>Any resources read or accessed randomly on host, e.g. CPU-side copy of vertex buffer used as source of transfer, but also used for collision detection. </li>
+</ul>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500" name="ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"></a>VMA_MEMORY_USAGE_CPU_COPY </td><td class="fielddoc"><p >CPU memory - memory that is preferably not <code>DEVICE_LOCAL</code>, but also not guaranteed to be <code>HOST_VISIBLE</code>.</p>
+<p >Usage: Staging copy of resources moved from GPU memory to CPU memory as part of custom paging/residency mechanism, to be moved back to GPU memory when needed. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d" name="ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"></a>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED </td><td class="fielddoc"><p >Lazily allocated GPU memory having <code>VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT</code>. Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.</p>
+<p >Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>.</p>
+<p >Allocations with this usage are always created as dedicated - it implies <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e" name="ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"></a>VMA_MEMORY_USAGE_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga9a7c45f9c863695d98c83fa5ac940fe7" name="ga9a7c45f9c863695d98c83fa5ac940fe7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9a7c45f9c863695d98c83fa5ac940fe7">◆ </a></span>VmaPoolCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2" name="gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"></a>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT </td><td class="fielddoc"><p >Use this flag if you always allocate only buffers and linear images or only optimal images out of this pool and so Buffer-Image Granularity can be ignored. </p>
+<p >This is an optional optimization flag.</p>
+<p >If you always allocate using <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, then you don't need to use it because allocator knows exact type of your allocations so it can handle Buffer-Image Granularity in the optimal way.</p>
+<p >If you also allocate using <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a> or <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, exact type of such allocations is not known, so allocator must be conservative in handling Buffer-Image Granularity, which can lead to suboptimal allocation (wasted memory). In that case, if you can make sure you always allocate only buffers and linear images or only optimal images out of this pool, use this flag to make allocator disregard Buffer-Image Granularity and so make allocations faster and more optimal. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" name="gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"></a>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, linear allocation algorithm in this pool. </p>
+<p >Specify this flag to enable linear allocation algorithm, which always creates new allocations after last one and doesn't reuse space from allocations freed in between. It trades memory consumption for simplified algorithm and data structure, which has better performance and uses less memory for metadata.</p>
+<p >By using this flag, you can achieve behavior of free-at-once, stack, ring buffer, and double stack. For details, see documentation chapter <a class="el" href="custom_memory_pools.html#linear_algorithm">Linear allocation algorithm</a>.</p>
+<p >When using this flag, you must specify <a class="el" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c" title="Maximum number of blocks that can be allocated in this pool. Optional.">VmaPoolCreateInfo::maxBlockCount</a> == 1 (or 0 for default). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" name="gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"></a>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, buddy allocation algorithm in this pool. </p>
+<p >It operates on a tree of blocks, each having size that is a power of two and a half of its parent's size. Comparing to default algorithm, this one provides faster allocation and deallocation and decreased external fragmentation, at the expense of more memory wasted (internal fragmentation). For details, see documentation chapter <a class="el" href="custom_memory_pools.html#buddy_algorithm">Buddy allocation algorithm</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32" name="gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32"></a>VMA_POOL_CREATE_TLSF_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, Two-Level Segregated Fit (TLSF) allocation algorithm in this pool. </p>
+<p >This algorithm is based on 2-level lists dividing address space into smaller chunks. The first level is aligned to power of two which serves as buckets for requested memory to fall into, and the second level is lineary subdivided into lists of free memory. This algorithm aims to achieve bounded response time even in the worst case scenario. Allocation time can be sometimes slightly longer than compared to other algorithms but in return the application can avoid stalls in case of fragmentation, giving predictable results, suitable for real-time use cases. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c" name="gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"></a>VMA_POOL_CREATE_ALGORITHM_MASK </td><td class="fielddoc"><p >Bit mask to extract only <code>ALGORITHM</code> bits from entire set of flags. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec" name="gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"></a>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gabf28077dbf82d0908b8acbe8ee8dd9b8" name="gabf28077dbf82d0908b8acbe8ee8dd9b8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabf28077dbf82d0908b8acbe8ee8dd9b8">◆ </a></span>vmaAllocateMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaAllocateMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkMemoryRequirements * </td>
+ <td class="paramname"><em>pVkMemoryRequirements</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>General purpose memory allocation. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pVkMemoryRequirements</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td></td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Handle to allocated memory. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>You should free the memory using <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e" title="Frees memory and destroys multiple allocations.">vmaFreeMemoryPages()</a>.</p>
+<p >It is recommended to use <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>, <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> instead whenever possible. </p>
+
+</div>
+</div>
+<a id="ga7fdf64415b6c3d83c454f28d2c53df7b" name="ga7fdf64415b6c3d83c454f28d2c53df7b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7fdf64415b6c3d83c454f28d2c53df7b">◆ </a></span>vmaAllocateMemoryForBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaAllocateMemoryForBuffer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer </td>
+ <td class="paramname"><em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">buffer</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td></td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Handle to allocated memory. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>You should free the memory using <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a>. </p>
+
+</div>
+</div>
+<a id="ga0faa3f9e5fb233d29d1e00390650febb" name="ga0faa3f9e5fb233d29d1e00390650febb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0faa3f9e5fb233d29d1e00390650febb">◆ </a></span>vmaAllocateMemoryForImage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaAllocateMemoryForImage </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkImage </td>
+ <td class="paramname"><em>image</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Function similar to <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>. </p>
+
+</div>
+</div>
+<a id="gad37e82e492b3de38fc3f4cffd9ad0ae1" name="gad37e82e492b3de38fc3f4cffd9ad0ae1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad37e82e492b3de38fc3f4cffd9ad0ae1">◆ </a></span>vmaAllocateMemoryPages()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaAllocateMemoryPages </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkMemoryRequirements * </td>
+ <td class="paramname"><em>pVkMemoryRequirements</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>allocationCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>General purpose memory allocation for multiple allocation objects at once. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pVkMemoryRequirements</td><td>Memory requirements for each allocation. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Creation parameters for each allocation. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">allocationCount</td><td>Number of allocations to make. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocations</td><td>Pointer to array that will be filled with handles to created allocations. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Pointer to array that will be filled with parameters of created allocations.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>You should free the memory using <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e" title="Frees memory and destroys multiple allocations.">vmaFreeMemoryPages()</a>.</p>
+<p >Word "pages" is just a suggestion to use this function to allocate pieces of memory needed for sparse binding. It is just a general purpose allocation function able to make multiple allocations at once. It may be internally optimized to be more efficient than calling <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a> <code>allocationCount</code> times.</p>
+<p >All allocations are made using same parameters. All of them are created out of the same memory pool and type. If any allocation fails, all allocations already made within this function call are also freed, so that when returned result is not <code>VK_SUCCESS</code>, <code>pAllocation</code> array is always entirely filled with <code>VK_NULL_HANDLE</code>. </p>
+
+</div>
+</div>
+<a id="gac0f01545b6262f7d4d128fc8f8e5c77b" name="gac0f01545b6262f7d4d128fc8f8e5c77b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac0f01545b6262f7d4d128fc8f8e5c77b">◆ </a></span>vmaBeginDefragmentationPass()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaBeginDefragmentationPass </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
+ <td class="paramname"><em>context</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> * </td>
+ <td class="paramname"><em>pInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga6b0929b914b60cf2d45cac4bf3547470" name="ga6b0929b914b60cf2d45cac4bf3547470"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6b0929b914b60cf2d45cac4bf3547470">◆ </a></span>vmaBindBufferMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaBindBufferMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer </td>
+ <td class="paramname"><em>buffer</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Binds buffer to allocation. </p>
+<p >Binds specified buffer to region of memory represented by specified allocation. Gets <code>VkDeviceMemory</code> handle and offset from the allocation. If you want to create a buffer, allocate memory for it and bind them together separately, you should use this function for binding instead of standard <code>vkBindBufferMemory()</code>, because it ensures proper synchronization so that when a <code>VkDeviceMemory</code> object is used by multiple allocations, calls to <code>vkBind*Memory()</code> or <code>vkMapMemory()</code> won't happen from multiple threads simultaneously (which is illegal in Vulkan).</p>
+<p >It is recommended to use function <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> instead of this one. </p>
+
+</div>
+</div>
+<a id="ga927c944f45e0f2941182abb6f608e64a" name="ga927c944f45e0f2941182abb6f608e64a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga927c944f45e0f2941182abb6f608e64a">◆ </a></span>vmaBindBufferMemory2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaBindBufferMemory2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>allocationLocalOffset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer </td>
+ <td class="paramname"><em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>pNext</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Binds buffer to allocation with additional parameters. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramname">allocation</td><td></td></tr>
+ <tr><td class="paramname">allocationLocalOffset</td><td>Additional offset to be added while binding, relative to the beginning of the <code>allocation</code>. Normally it should be 0. </td></tr>
+ <tr><td class="paramname">buffer</td><td></td></tr>
+ <tr><td class="paramname">pNext</td><td>A chain of structures to be attached to <code>VkBindBufferMemoryInfoKHR</code> structure used internally. Normally it should be null.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function is similar to <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, but it provides additional parameters.</p>
+<p >If <code>pNext</code> is not null, <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must have been created with <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> flag or with <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>>= VK_API_VERSION_1_1</code>. Otherwise the call fails. </p>
+
+</div>
+</div>
+<a id="ga3d3ca45799923aa5d138e9e5f9eb2da5" name="ga3d3ca45799923aa5d138e9e5f9eb2da5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3d3ca45799923aa5d138e9e5f9eb2da5">◆ </a></span>vmaBindImageMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaBindImageMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkImage </td>
+ <td class="paramname"><em>image</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Binds image to allocation. </p>
+<p >Binds specified image to region of memory represented by specified allocation. Gets <code>VkDeviceMemory</code> handle and offset from the allocation. If you want to create an image, allocate memory for it and bind them together separately, you should use this function for binding instead of standard <code>vkBindImageMemory()</code>, because it ensures proper synchronization so that when a <code>VkDeviceMemory</code> object is used by multiple allocations, calls to <code>vkBind*Memory()</code> or <code>vkMapMemory()</code> won't happen from multiple threads simultaneously (which is illegal in Vulkan).</p>
+<p >It is recommended to use function <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> instead of this one. </p>
+
+</div>
+</div>
+<a id="gaa8251ee81b0045a443e35b8e8aa021bc" name="gaa8251ee81b0045a443e35b8e8aa021bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa8251ee81b0045a443e35b8e8aa021bc">◆ </a></span>vmaBindImageMemory2()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaBindImageMemory2 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>allocationLocalOffset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkImage </td>
+ <td class="paramname"><em>image</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const void * </td>
+ <td class="paramname"><em>pNext</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Binds image to allocation with additional parameters. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramname">allocation</td><td></td></tr>
+ <tr><td class="paramname">allocationLocalOffset</td><td>Additional offset to be added while binding, relative to the beginning of the <code>allocation</code>. Normally it should be 0. </td></tr>
+ <tr><td class="paramname">image</td><td></td></tr>
+ <tr><td class="paramname">pNext</td><td>A chain of structures to be attached to <code>VkBindImageMemoryInfoKHR</code> structure used internally. Normally it should be null.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function is similar to <a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a>, but it provides additional parameters.</p>
+<p >If <code>pNext</code> is not null, <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must have been created with <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> flag or with <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>>= VK_API_VERSION_1_1</code>. Otherwise the call fails. </p>
+
+</div>
+</div>
+<a id="ga49329a7f030dafcf82f7b73334c22e98" name="ga49329a7f030dafcf82f7b73334c22e98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga49329a7f030dafcf82f7b73334c22e98">◆ </a></span>vmaCheckCorruption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCheckCorruption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>memoryTypeBits</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramname">memoryTypeBits</td><td>Bit mask, where each bit set means that a memory type with that index should be checked.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Corruption detection is enabled only when <code>VMA_DEBUG_DETECT_CORRUPTION</code> macro is defined to nonzero, <code>VMA_DEBUG_MARGIN</code> is defined to nonzero and only for memory types that are <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. For more information, see <a class="el" href="debugging_memory_usage.html#debugging_memory_usage_corruption_detection">Corruption detection</a>.</p>
+<p >Possible return values:</p>
+<ul>
+<li><code>VK_ERROR_FEATURE_NOT_PRESENT</code> - corruption detection is not enabled for any of specified memory types.</li>
+<li><code>VK_SUCCESS</code> - corruption detection has been performed and succeeded.</li>
+<li><code>VK_ERROR_UNKNOWN</code> - corruption detection has been performed and found memory corruptions around one of the allocations. <code>VMA_ASSERT</code> is also fired in that case.</li>
+<li>Other value: Error returned by Vulkan, e.g. memory mapping failure. </li>
+</ul>
+
+</div>
+</div>
+<a id="gad535935619c7a549bf837e1bb0068f89" name="gad535935619c7a549bf837e1bb0068f89"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad535935619c7a549bf837e1bb0068f89">◆ </a></span>vmaCheckPoolCorruption()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCheckPoolCorruption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
+ <td class="paramname"><em>pool</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Checks magic number in margins around all allocations in given memory pool in search for corruptions. </p>
+<p >Corruption detection is enabled only when <code>VMA_DEBUG_DETECT_CORRUPTION</code> macro is defined to nonzero, <code>VMA_DEBUG_MARGIN</code> is defined to nonzero and the pool is created in memory type that is <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. For more information, see <a class="el" href="debugging_memory_usage.html#debugging_memory_usage_corruption_detection">Corruption detection</a>.</p>
+<p >Possible return values:</p>
+<ul>
+<li><code>VK_ERROR_FEATURE_NOT_PRESENT</code> - corruption detection is not enabled for specified pool.</li>
+<li><code>VK_SUCCESS</code> - corruption detection has been performed and succeeded.</li>
+<li><code>VK_ERROR_UNKNOWN</code> - corruption detection has been performed and found memory corruptions around one of the allocations. <code>VMA_ASSERT</code> is also fired in that case.</li>
+<li>Other value: Error returned by Vulkan, e.g. memory mapping failure. </li>
+</ul>
+
+</div>
+</div>
+<a id="gac72ee55598617e8eecca384e746bab51" name="gac72ee55598617e8eecca384e746bab51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac72ee55598617e8eecca384e746bab51">◆ </a></span>vmaCreateBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreateBuffer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkBufferCreateInfo * </td>
+ <td class="paramname"><em>pBufferCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer * </td>
+ <td class="paramname"><em>pBuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pBufferCreateInfo</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pAllocationCreateInfo</td><td></td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pBuffer</td><td>Buffer that was created. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Allocation that was created. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function automatically:</p>
+<ol type="1">
+<li>Creates buffer.</li>
+<li>Allocates appropriate memory for it.</li>
+<li>Binds the buffer with the memory.</li>
+</ol>
+<p >If any of these operations fail, buffer and allocation are not created, returned value is negative error code, *pBuffer and *pAllocation are null.</p>
+<p >If the function succeeded, you must destroy both buffer and allocation when you no longer need them using either convenience function <a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a> or separately, using <code>vkDestroyBuffer()</code> and <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a>.</p>
+<p >If <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" title="Enables usage of VK_KHR_dedicated_allocation extension.">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> flag was used, VK_KHR_dedicated_allocation extension is used internally to query driver whether it requires or prefers the new buffer to have dedicated allocation. If yes, and if dedicated allocation is possible (<a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> is null and <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> is not used), it creates dedicated allocation for this buffer, just like when using <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function creates a new <code>VkBuffer</code>. Sub-allocation of parts of one large buffer, although recommended as a good practice, is out of scope of this library and could be implemented by the user as a higher-level logic on top of VMA. </dd></dl>
+
+</div>
+</div>
+<a id="gaa06a690013a0d01e60894ac378083834" name="gaa06a690013a0d01e60894ac378083834"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa06a690013a0d01e60894ac378083834">◆ </a></span>vmaCreateBufferWithAlignment()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreateBufferWithAlignment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkBufferCreateInfo * </td>
+ <td class="paramname"><em>pBufferCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>minAlignment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer * </td>
+ <td class="paramname"><em>pBuffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a buffer with additional minimum alignment. </p>
+<p >Similar to <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> but provides additional parameter <code>minAlignment</code> which allows to specify custom, minimum alignment to be used when placing the buffer inside a larger memory block, which may be needed e.g. for interop with OpenGL. </p>
+
+</div>
+</div>
+<a id="ga02a94f25679275851a53e82eacbcfc73" name="ga02a94f25679275851a53e82eacbcfc73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga02a94f25679275851a53e82eacbcfc73">◆ </a></span>vmaCreateImage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreateImage </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkImageCreateInfo * </td>
+ <td class="paramname"><em>pImageCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkImage * </td>
+ <td class="paramname"><em>pImage</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Function similar to <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>. </p>
+
+</div>
+</div>
+<a id="ga5c8770ded7c59c8caac6de0c2cb00b50" name="ga5c8770ded7c59c8caac6de0c2cb00b50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5c8770ded7c59c8caac6de0c2cb00b50">◆ </a></span>vmaCreatePool()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreatePool </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> * </td>
+ <td class="paramname"><em>pPool</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Allocates Vulkan device memory and creates <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Parameters of pool to create. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pPool</td><td>Handle to created pool. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga9f0f8f56db5f7f57fe4454f465142dac" name="ga9f0f8f56db5f7f57fe4454f465142dac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9f0f8f56db5f7f57fe4454f465142dac">◆ </a></span>vmaDefragment()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaDefragment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>allocationCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBool32 * </td>
+ <td class="paramname"><em>pAllocationsChanged</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> * </td>
+ <td class="paramname"><em>pDefragmentationInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> * </td>
+ <td class="paramname"><em>pDefragmentationStats</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deprecated. Compacts memory by moving allocations. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pAllocations</td><td>Array of allocations that can be moved during this compation. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">allocationCount</td><td>Number of elements in pAllocations and pAllocationsChanged arrays. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationsChanged</td><td>Array of boolean values that will indicate whether matching allocation in pAllocations array has been moved. This parameter is optional. Pass null if you don't need this information. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pDefragmentationInfo</td><td>Configuration parameters. Optional - pass null to use default values. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pDefragmentationStats</td><td>Statistics returned by the function. Optional - pass null if you don't need this information. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>VK_SUCCESS</code> if completed, negative error code in case of error.</dd></dl>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead.</dd></dl>
+<p >This function works by moving allocations to different places (different <code>VkDeviceMemory</code> objects and/or different offsets) in order to optimize memory usage. Only allocations that are in <code>pAllocations</code> array can be moved. All other allocations are considered nonmovable in this call. Basic rules:</p>
+<ul>
+<li>Only allocations made in memory types that have <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code> and <code>VK_MEMORY_PROPERTY_HOST_COHERENT_BIT</code> flags can be compacted. You may pass other allocations but it makes no sense - these will never be moved.</li>
+<li>Custom pools created with <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> or <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> flag are not defragmented. Allocations passed to this function that come from such pools are ignored.</li>
+<li>Allocations created with <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> or created as dedicated allocations for any other reason are also ignored.</li>
+<li>Both allocations made with or without <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag can be compacted. If not persistently mapped, memory will be mapped temporarily inside this function if needed.</li>
+<li>You must not pass same <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object multiple times in <code>pAllocations</code> array.</li>
+</ul>
+<p >The function also frees empty <code>VkDeviceMemory</code> blocks.</p>
+<p >Warning: This function may be time-consuming, so you shouldn't call it too often (like after every resource creation/destruction). You can call it on special occasions (like when reloading a game level or when you just destroyed a lot of objects). Calling it every frame may be OK, but you should measure that on your platform.</p>
+<p >For more information, see <a class="el" href="defragmentation.html">Defragmentation</a> chapter. </p>
+
+</div>
+</div>
+<a id="ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" name="ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">◆ </a></span>vmaDefragmentationBegin()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaDefragmentationBegin </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> * </td>
+ <td class="paramname"><em>pInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> * </td>
+ <td class="paramname"><em>pStats</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> * </td>
+ <td class="paramname"><em>pContext</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Begins defragmentation process. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pInfo</td><td>Structure filled with parameters of defragmentation. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pStats</td><td>Optional. Statistics of defragmentation. You can pass null if you are not interested in this information. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pContext</td><td>Context object that must be passed to <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to finish defragmentation. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><code>VK_SUCCESS</code> and <code>*pContext == null</code> if defragmentation finished within this function call. <code>VK_NOT_READY</code> and <code>*pContext != null</code> if defragmentation has been started and you need to call <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to finish it. Negative value in case of error.</dd></dl>
+<p>Use this function instead of old, deprecated <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.</p>
+<p >Warning! Between the call to <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> and <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>:</p>
+<ul>
+<li>You should not use any of allocations passed as <code>pInfo->pAllocations</code> or any allocations that belong to pools passed as <code>pInfo->pPools</code>, including calling <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>, or access their data.</li>
+<li>Some mutexes protecting internal data structures may be locked, so trying to make or free any allocations, bind buffers or images, map memory, or launch another simultaneous defragmentation in between may cause stall (when done on another thread) or deadlock (when done on the same thread), unless you are 100% sure that defragmented allocations are in different pools.</li>
+<li>Information returned via <code>pStats</code> and <code>pInfo->pAllocationsChanged</code> are undefined. They become valid after call to <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</li>
+<li>If <code>pInfo->commandBuffer</code> is not null, you must submit that command buffer and make sure it finished execution before calling <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</li>
+</ul>
+<p >For more information and important limitations regarding defragmentation, see documentation chapter: <a class="el" href="defragmentation.html">Defragmentation</a>. </p>
+
+</div>
+</div>
+<a id="ga8774e20e91e245aae959ba63efa15dd2" name="ga8774e20e91e245aae959ba63efa15dd2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8774e20e91e245aae959ba63efa15dd2">◆ </a></span>vmaDefragmentationEnd()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaDefragmentationEnd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
+ <td class="paramname"><em>context</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Ends defragmentation process. </p>
+<p >Use this function to finish defragmentation started by <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. It is safe to pass <code>context == null</code>. The function then does nothing. </p>
+
+</div>
+</div>
+<a id="ga0d9f4e4ba5bf9aab1f1c746387753d77" name="ga0d9f4e4ba5bf9aab1f1c746387753d77"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0d9f4e4ba5bf9aab1f1c746387753d77">◆ </a></span>vmaDestroyBuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaDestroyBuffer </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBuffer </td>
+ <td class="paramname"><em>buffer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys Vulkan buffer and frees allocated memory. </p>
+<p >This is just a convenience function equivalent to:</p>
+<div class="fragment"><div class="line">vkDestroyBuffer(device, buffer, allocationCallbacks);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, allocation);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
+</div><!-- fragment --><p >It it safe to pass null as buffer and/or allocation. </p>
+
+</div>
+</div>
+<a id="gae50d2cb3b4a3bfd4dd40987234e50e7e" name="gae50d2cb3b4a3bfd4dd40987234e50e7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae50d2cb3b4a3bfd4dd40987234e50e7e">◆ </a></span>vmaDestroyImage()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaDestroyImage </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkImage </td>
+ <td class="paramname"><em>image</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys Vulkan image and frees allocated memory. </p>
+<p >This is just a convenience function equivalent to:</p>
+<div class="fragment"><div class="line">vkDestroyImage(device, image, allocationCallbacks);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, allocation);</div>
+</div><!-- fragment --><p >It it safe to pass null as image and/or allocation. </p>
+
+</div>
+</div>
+<a id="ga5485779c8f1948238fc4e92232fa65e1" name="ga5485779c8f1948238fc4e92232fa65e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5485779c8f1948238fc4e92232fa65e1">◆ </a></span>vmaDestroyPool()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaDestroyPool </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
+ <td class="paramname"><em>pool</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object and frees Vulkan device memory. </p>
+
+</div>
+</div>
+<a id="ga1b9ffa538bed905af55c747cc48963bd" name="ga1b9ffa538bed905af55c747cc48963bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1b9ffa538bed905af55c747cc48963bd">◆ </a></span>vmaEndDefragmentationPass()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaEndDefragmentationPass </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
+ <td class="paramname"><em>context</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="gaef15a94b58fbcb0fe706d5720e84a74a" name="gaef15a94b58fbcb0fe706d5720e84a74a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaef15a94b58fbcb0fe706d5720e84a74a">◆ </a></span>vmaFindMemoryTypeIndex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaFindMemoryTypeIndex </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>memoryTypeBits</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t * </td>
+ <td class="paramname"><em>pMemoryTypeIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Helps to find memoryTypeIndex, given memoryTypeBits and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
+<p >This algorithm tries to find a memory type that:</p>
+<ul>
+<li>Is allowed by memoryTypeBits.</li>
+<li>Contains all the flags from pAllocationCreateInfo->requiredFlags.</li>
+<li>Matches intended usage.</li>
+<li>Has as many flags from pAllocationCreateInfo->preferredFlags as possible.</li>
+</ul>
+<dl class="section return"><dt>Returns</dt><dd>Returns VK_ERROR_FEATURE_NOT_PRESENT if not found. Receiving such result from this function or any other allocating function probably means that your device doesn't support any memory type with requested features for the specific type of resource you want to use it for. Please check parameters of your resource, like image layout (OPTIMAL versus LINEAR) or mip level count. </dd></dl>
+
+</div>
+</div>
+<a id="gae790ab9ffaf7667fb8f62523e6897888" name="gae790ab9ffaf7667fb8f62523e6897888"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae790ab9ffaf7667fb8f62523e6897888">◆ </a></span>vmaFindMemoryTypeIndexForBufferInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaFindMemoryTypeIndexForBufferInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkBufferCreateInfo * </td>
+ <td class="paramname"><em>pBufferCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t * </td>
+ <td class="paramname"><em>pMemoryTypeIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Helps to find memoryTypeIndex, given VkBufferCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
+<p >It can be useful e.g. to determine value to be used as <a class="el" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319" title="Vulkan memory type index to allocate this pool from.">VmaPoolCreateInfo::memoryTypeIndex</a>. It internally creates a temporary, dummy buffer that never has memory bound. It is just a convenience function, equivalent to calling:</p>
+<ul>
+<li><code>vkCreateBuffer</code></li>
+<li><code>vkGetBufferMemoryRequirements</code></li>
+<li><code>vmaFindMemoryTypeIndex</code></li>
+<li><code>vkDestroyBuffer</code> </li>
+</ul>
+
+</div>
+</div>
+<a id="ga088da83d8eaf3ce9056d9ea0b981d472" name="ga088da83d8eaf3ce9056d9ea0b981d472"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga088da83d8eaf3ce9056d9ea0b981d472">◆ </a></span>vmaFindMemoryTypeIndexForImageInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaFindMemoryTypeIndexForImageInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkImageCreateInfo * </td>
+ <td class="paramname"><em>pImageCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t * </td>
+ <td class="paramname"><em>pMemoryTypeIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Helps to find memoryTypeIndex, given VkImageCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
+<p >It can be useful e.g. to determine value to be used as <a class="el" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319" title="Vulkan memory type index to allocate this pool from.">VmaPoolCreateInfo::memoryTypeIndex</a>. It internally creates a temporary, dummy image that never has memory bound. It is just a convenience function, equivalent to calling:</p>
+<ul>
+<li><code>vkCreateImage</code></li>
+<li><code>vkGetImageMemoryRequirements</code></li>
+<li><code>vmaFindMemoryTypeIndex</code></li>
+<li><code>vkDestroyImage</code> </li>
+</ul>
+
+</div>
+</div>
+<a id="ga30c37c1eec6025f397be41644f48490f" name="ga30c37c1eec6025f397be41644f48490f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga30c37c1eec6025f397be41644f48490f">◆ </a></span>vmaFlushAllocation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaFlushAllocation </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>offset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>size</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flushes memory of given allocation. </p>
+<p >Calls <code>vkFlushMappedMemoryRanges()</code> for memory associated with given range of given allocation. It needs to be called after writing to a mapped memory for memory types that are not <code>HOST_COHERENT</code>. Unmap operation doesn't do that automatically.</p>
+<ul>
+<li><code>offset</code> must be relative to the beginning of allocation.</li>
+<li><code>size</code> can be <code>VK_WHOLE_SIZE</code>. It means all memory from <code>offset</code> the the end of given allocation.</li>
+<li><code>offset</code> and <code>size</code> don't have to be aligned. They are internally rounded down/up to multiply of <code>nonCoherentAtomSize</code>.</li>
+<li>If <code>size</code> is 0, this call is ignored.</li>
+<li>If memory type that the <code>allocation</code> belongs to is not <code>HOST_VISIBLE</code> or it is <code>HOST_COHERENT</code>, this call is ignored.</li>
+</ul>
+<p >Warning! <code>offset</code> and <code>size</code> are relative to the contents of given <code>allocation</code>. If you mean whole allocation, you can pass 0 and <code>VK_WHOLE_SIZE</code>, respectively. Do not pass allocation's offset as <code>offset</code>!!!</p>
+<p >This function returns the <code>VkResult</code> from <code>vkFlushMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
+
+</div>
+</div>
+<a id="gac3dd00da721875ed99fa8a881922bdfc" name="gac3dd00da721875ed99fa8a881922bdfc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac3dd00da721875ed99fa8a881922bdfc">◆ </a></span>vmaFlushAllocations()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaFlushAllocations </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>allocationCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>allocations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkDeviceSize * </td>
+ <td class="paramname"><em>offsets</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkDeviceSize * </td>
+ <td class="paramname"><em>sizes</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flushes memory of given set of allocations. </p>
+<p >Calls <code>vkFlushMappedMemoryRanges()</code> for memory associated with given ranges of given allocations. For more information, see documentation of <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramname">allocationCount</td><td></td></tr>
+ <tr><td class="paramname">allocations</td><td></td></tr>
+ <tr><td class="paramname">offsets</td><td>If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. </td></tr>
+ <tr><td class="paramname">sizes</td><td>If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means <code>VK_WHOLE_SIZE</code> for all allocations.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function returns the <code>VkResult</code> from <code>vkFlushMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
+
+</div>
+</div>
+<a id="ga5fea5518972ae9094b1526cbcb19b05f" name="ga5fea5518972ae9094b1526cbcb19b05f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5fea5518972ae9094b1526cbcb19b05f">◆ </a></span>vmaFreeMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaFreeMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees memory previously allocated using <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, or <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. </p>
+<p >Passing <code>VK_NULL_HANDLE</code> as <code>allocation</code> is valid. Such function call is just skipped. </p>
+
+</div>
+</div>
+<a id="ga834b1e4aef395c0a1d56a28e69a4a17e" name="ga834b1e4aef395c0a1d56a28e69a4a17e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga834b1e4aef395c0a1d56a28e69a4a17e">◆ </a></span>vmaFreeMemoryPages()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaFreeMemoryPages </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t </td>
+ <td class="paramname"><em>allocationCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>pAllocations</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees memory and destroys multiple allocations. </p>
+<p >Word "pages" is just a suggestion to use this function to free pieces of memory used for sparse binding. It is just a general purpose function to free memory and destroy allocations made using e.g. <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1" title="General purpose memory allocation for multiple allocation objects at once.">vmaAllocateMemoryPages()</a> and other functions. It may be internally optimized to be more efficient than calling <a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> <code>allocationCount</code> times.</p>
+<p >Allocations in <code>pAllocations</code> array can come from any memory pools and types. Passing <code>VK_NULL_HANDLE</code> as elements of <code>pAllocations</code> array is valid. Such entries are just skipped. </p>
+
+</div>
+</div>
+<a id="ga86dd08aba8633bfa4ad0df2e76481d8b" name="ga86dd08aba8633bfa4ad0df2e76481d8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga86dd08aba8633bfa4ad0df2e76481d8b">◆ </a></span>vmaGetAllocationInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetAllocationInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
+ <td class="paramname"><em>pAllocationInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns current information about specified allocation. </p>
+<p >Current paramteres of given allocation are returned in <code>pAllocationInfo</code>.</p>
+<p >Although this function doesn't lock any mutex, so it should be quite efficient, you should avoid calling it too often. You can retrieve same <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a> structure while creating your resource, from function <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. You can remember it if you are sure parameters don't change (e.g. due to defragmentation). </p>
+
+</div>
+</div>
+<a id="ga571e87dd38e552249b56b1b0b982fad1" name="ga571e87dd38e552249b56b1b0b982fad1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga571e87dd38e552249b56b1b0b982fad1">◆ </a></span>vmaGetAllocationMemoryProperties()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetAllocationMemoryProperties </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkMemoryPropertyFlags * </td>
+ <td class="paramname"><em>pFlags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Given an allocation, returns Property Flags of its memory type. </p>
+<p >This is just a convenience function. Same information can be obtained using <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> + <a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>. </p>
+
+</div>
+</div>
+<a id="gaf09b4e4eafdbee812e8d73ddf960f030" name="gaf09b4e4eafdbee812e8d73ddf960f030"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf09b4e4eafdbee812e8d73ddf960f030">◆ </a></span>vmaGetPoolName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetPoolName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
+ <td class="paramname"><em>pool</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char ** </td>
+ <td class="paramname"><em>ppName</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves name of a custom pool. </p>
+<p >After the call <code>ppName</code> is either null or points to an internally-owned null-terminated string containing name of the pool that was previously set. The pointer becomes invalid when the pool is destroyed or its name is changed using <a class="el" href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58" title="Sets name of a custom pool.">vmaSetPoolName()</a>. </p>
+
+</div>
+</div>
+<a id="gaaa8412919139ef413a4215ac6a290fae" name="gaaa8412919139ef413a4215ac6a290fae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaaa8412919139ef413a4215ac6a290fae">◆ </a></span>vmaInvalidateAllocation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaInvalidateAllocation </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>offset</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize </td>
+ <td class="paramname"><em>size</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Invalidates memory of given allocation. </p>
+<p >Calls <code>vkInvalidateMappedMemoryRanges()</code> for memory associated with given range of given allocation. It needs to be called before reading from a mapped memory for memory types that are not <code>HOST_COHERENT</code>. Map operation doesn't do that automatically.</p>
+<ul>
+<li><code>offset</code> must be relative to the beginning of allocation.</li>
+<li><code>size</code> can be <code>VK_WHOLE_SIZE</code>. It means all memory from <code>offset</code> the the end of given allocation.</li>
+<li><code>offset</code> and <code>size</code> don't have to be aligned. They are internally rounded down/up to multiply of <code>nonCoherentAtomSize</code>.</li>
+<li>If <code>size</code> is 0, this call is ignored.</li>
+<li>If memory type that the <code>allocation</code> belongs to is not <code>HOST_VISIBLE</code> or it is <code>HOST_COHERENT</code>, this call is ignored.</li>
+</ul>
+<p >Warning! <code>offset</code> and <code>size</code> are relative to the contents of given <code>allocation</code>. If you mean whole allocation, you can pass 0 and <code>VK_WHOLE_SIZE</code>, respectively. Do not pass allocation's offset as <code>offset</code>!!!</p>
+<p >This function returns the <code>VkResult</code> from <code>vkInvalidateMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
+
+</div>
+</div>
+<a id="gab25b558d75f7378ec944a1522fdcc3c5" name="gab25b558d75f7378ec944a1522fdcc3c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab25b558d75f7378ec944a1522fdcc3c5">◆ </a></span>vmaInvalidateAllocations()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaInvalidateAllocations </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>allocationCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
+ <td class="paramname"><em>allocations</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkDeviceSize * </td>
+ <td class="paramname"><em>offsets</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkDeviceSize * </td>
+ <td class="paramname"><em>sizes</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Invalidates memory of given set of allocations. </p>
+<p >Calls <code>vkInvalidateMappedMemoryRanges()</code> for memory associated with given ranges of given allocations. For more information, see documentation of <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramname">allocationCount</td><td></td></tr>
+ <tr><td class="paramname">allocations</td><td></td></tr>
+ <tr><td class="paramname">offsets</td><td>If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. </td></tr>
+ <tr><td class="paramname">sizes</td><td>If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means <code>VK_WHOLE_SIZE</code> for all allocations.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function returns the <code>VkResult</code> from <code>vkInvalidateMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
+
+</div>
+</div>
+<a id="gad5bd1243512d099706de88168992f069" name="gad5bd1243512d099706de88168992f069"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad5bd1243512d099706de88168992f069">◆ </a></span>vmaMapMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaMapMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void ** </td>
+ <td class="paramname"><em>ppData</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Maps memory represented by given allocation and returns pointer to it. </p>
+<p >Maps memory represented by given allocation to make it accessible to CPU code. When succeeded, <code>*ppData</code> contains pointer to first byte of this memory.</p>
+<dl class="section warning"><dt>Warning</dt><dd>If the allocation is part of a bigger <code>VkDeviceMemory</code> block, returned pointer is correctly offsetted to the beginning of region assigned to this particular allocation. Unlike the result of <code>vkMapMemory</code>, it points to the allocation, not to the beginning of the whole block. You should not add <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268" title="Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...">VmaAllocationInfo::offset</a> to it!</dd></dl>
+<p>Mapping is internally reference-counted and synchronized, so despite raw Vulkan function <code>vkMapMemory()</code> cannot be used to map same block of <code>VkDeviceMemory</code> multiple times simultaneously, it is safe to call this function on allocations assigned to the same memory block. Actual Vulkan memory will be mapped on first mapping and unmapped on last unmapping.</p>
+<p >If the function succeeded, you must call <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> to unmap the allocation when mapping is no longer needed or before freeing the allocation, at the latest.</p>
+<p >It also safe to call this function multiple times on the same allocation. You must call <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> same number of times as you called <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>.</p>
+<p >It is also safe to call this function on allocation created with <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag. Its memory stays mapped all the time. You must still call <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> same number of times as you called <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. You must not call <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> additional time to free the "0-th" mapping made automatically due to <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag.</p>
+<p >This function fails when used on allocation made in memory type that is not <code>HOST_VISIBLE</code>.</p>
+<p >This function doesn't automatically flush or invalidate caches. If the allocation is made from a memory types that is not <code>HOST_COHERENT</code>, you also need to use <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a> / <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, as required by Vulkan specification. </p>
+
+</div>
+</div>
+<a id="gaf9147d31ffc11d62fc187bde283ed14f" name="gaf9147d31ffc11d62fc187bde283ed14f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf9147d31ffc11d62fc187bde283ed14f">◆ </a></span>vmaSetAllocationUserData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaSetAllocationUserData </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"><em>pUserData</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets pUserData in given allocation to new value. </p>
+<p >If the allocation was created with VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT, pUserData must be either null, or pointer to a null-terminated string. The function makes local copy of the string and sets it as allocation's <code>pUserData</code>. String passed as pUserData doesn't need to be valid for whole lifetime of the allocation - you can free it after this call. String previously pointed by allocation's pUserData is freed from memory.</p>
+<p >If the flag was not used, the value of pointer <code>pUserData</code> is just copied to allocation's <code>pUserData</code>. It is opaque, so you can use it however you want - e.g. as a pointer, ordinal number or some handle to you own data. </p>
+
+</div>
+</div>
+<a id="gadbae3a0b4ab078024462fc85c37f3b58" name="gadbae3a0b4ab078024462fc85c37f3b58"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadbae3a0b4ab078024462fc85c37f3b58">◆ </a></span>vmaSetPoolName()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaSetPoolName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
+ <td class="paramname"><em>pool</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char * </td>
+ <td class="paramname"><em>pName</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets name of a custom pool. </p>
+<p ><code>pName</code> can be either null or pointer to a null-terminated string with new name for the pool. Function makes internal copy of the string, so it can be changed or freed immediately after this call. </p>
+
+</div>
+</div>
+<a id="ga9bc268595cb33f6ec4d519cfce81ff45" name="ga9bc268595cb33f6ec4d519cfce81ff45"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9bc268595cb33f6ec4d519cfce81ff45">◆ </a></span>vmaUnmapMemory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaUnmapMemory </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
+ <td class="paramname"><em>allocation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Unmaps memory represented by given allocation, mapped previously using <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. </p>
+<p >For details, see description of <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>.</p>
+<p >This function doesn't automatically flush or invalidate caches. If the allocation is made from a memory types that is not <code>HOST_COHERENT</code>, you also need to use <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a> / <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, as required by Vulkan specification. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__group__init.html b/docs/html/group__group__init.html
new file mode 100644
index 0000000..dcc8e65
--- /dev/null
+++ b/docs/html/group__group__init.html
@@ -0,0 +1,574 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: Library initialization</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Library initialization</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>API elements related to the initialization and management of the entire library, especially <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. <a href="struct_vma_device_memory_callbacks.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Pointers to some Vulkan functions - a subset used by the library. <a href="struct_vma_vulkan_functions.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Description of a Allocator to be created. <a href="struct_vma_allocator_create_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="struct_vma_allocator_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents main object of this library initialized. <a href="struct_vma_allocator.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gafd73b95e737ee7e76f827cb5472f559f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f">VmaAllocatorCreateFlagBits</a></td></tr>
+<tr class="memdesc:gafd73b95e737ee7e76f827cb5472f559f"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f">More...</a><br /></td></tr>
+<tr class="separator:gafd73b95e737ee7e76f827cb5472f559f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacfe6863e160722c2c1bbcf7573fddc4d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></td></tr>
+<tr class="separator:gacfe6863e160722c2c1bbcf7573fddc4d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
+<tr class="memdesc:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called after successful vkAllocateMemory. <a href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">More...</a><br /></td></tr>
+<tr class="separator:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
+<tr class="memdesc:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called before vkFreeMemory. <a href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">More...</a><br /></td></tr>
+<tr class="separator:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77692d3c8770ea8882d573206bd27b2b"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a></td></tr>
+<tr class="memdesc:ga77692d3c8770ea8882d573206bd27b2b"><td class="mdescLeft"> </td><td class="mdescRight">Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. <a href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">More...</a><br /></td></tr>
+<tr class="separator:ga77692d3c8770ea8882d573206bd27b2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">VmaVulkanFunctions</a></td></tr>
+<tr class="memdesc:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="mdescLeft"> </td><td class="mdescRight">Pointers to some Vulkan functions - a subset used by the library. <a href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">More...</a><br /></td></tr>
+<tr class="separator:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad9652301d33759b83e52d4f3605a14a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">VmaAllocatorCreateInfo</a></td></tr>
+<tr class="memdesc:gaad9652301d33759b83e52d4f3605a14a"><td class="mdescLeft"> </td><td class="mdescRight">Description of a Allocator to be created. <a href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">More...</a><br /></td></tr>
+<tr class="separator:gaad9652301d33759b83e52d4f3605a14a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1988031b0223fdbd564250fa1edd942c"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a></td></tr>
+<tr class="memdesc:ga1988031b0223fdbd564250fa1edd942c"><td class="mdescLeft"> </td><td class="mdescRight">Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">More...</a><br /></td></tr>
+<tr class="separator:ga1988031b0223fdbd564250fa1edd942c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> = 0x00000004
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> = 0x00000008
+, <br />
+  <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> = 0x00000010
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> = 0x00000020
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> = 0x00000040
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">More...</a><br /></td></tr>
+<tr class="separator:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga200692051ddb34240248234f5f4c17bb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a> (const <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocator.html">VmaAllocator</a> *pAllocator)</td></tr>
+<tr class="memdesc:ga200692051ddb34240248234f5f4c17bb"><td class="mdescLeft"> </td><td class="mdescRight">Creates <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">More...</a><br /></td></tr>
+<tr class="separator:ga200692051ddb34240248234f5f4c17bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</td></tr>
+<tr class="memdesc:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys allocator object. <a href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">More...</a><br /></td></tr>
+<tr class="separator:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa02231a791b37255720d566a52683e7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gafa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> *pAllocatorInfo)</td></tr>
+<tr class="memdesc:gafa02231a791b37255720d566a52683e7"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object - handle to Vulkan device etc. <a href="group__group__init.html#gafa02231a791b37255720d566a52683e7">More...</a><br /></td></tr>
+<tr class="separator:gafa02231a791b37255720d566a52683e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</td></tr>
+<tr class="separator:gaecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab88db292a17974f911182543fda52d19"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceMemoryProperties **ppPhysicalDeviceMemoryProperties)</td></tr>
+<tr class="separator:gab88db292a17974f911182543fda52d19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8701444752eb5de4464adb5a2b514bca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags)</td></tr>
+<tr class="memdesc:ga8701444752eb5de4464adb5a2b514bca"><td class="mdescLeft"> </td><td class="mdescRight">Given Memory Type Index, returns Property Flags of this memory type. <a href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">More...</a><br /></td></tr>
+<tr class="separator:ga8701444752eb5de4464adb5a2b514bca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t frameIndex)</td></tr>
+<tr class="memdesc:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="mdescLeft"> </td><td class="mdescRight">Sets index of the current frame. <a href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">More...</a><br /></td></tr>
+<tr class="separator:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p >API elements related to the initialization and management of the entire library, especially <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga7e1ed85f7799600b03ad51a77acc21f3" name="ga7e1ed85f7799600b03ad51a77acc21f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7e1ed85f7799600b03ad51a77acc21f3">◆ </a></span>PFN_vmaAllocateDeviceMemoryFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(VKAPI_PTR * PFN_vmaAllocateDeviceMemoryFunction) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Callback function called after successful vkAllocateMemory. </p>
+
+</div>
+</div>
+<a id="ga154ccaaf53dc2c36378f80f0c4f3679b" name="ga154ccaaf53dc2c36378f80f0c4f3679b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga154ccaaf53dc2c36378f80f0c4f3679b">◆ </a></span>PFN_vmaFreeDeviceMemoryFunction</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(VKAPI_PTR * PFN_vmaFreeDeviceMemoryFunction) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Callback function called before vkFreeMemory. </p>
+
+</div>
+</div>
+<a id="gafd73b95e737ee7e76f827cb5472f559f" name="gafd73b95e737ee7e76f827cb5472f559f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafd73b95e737ee7e76f827cb5472f559f">◆ </a></span>VmaAllocatorCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. </p>
+
+</div>
+</div>
+<a id="gacfe6863e160722c2c1bbcf7573fddc4d" name="gacfe6863e160722c2c1bbcf7573fddc4d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacfe6863e160722c2c1bbcf7573fddc4d">◆ </a></span>VmaAllocatorCreateFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="gaad9652301d33759b83e52d4f3605a14a" name="gaad9652301d33759b83e52d4f3605a14a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaad9652301d33759b83e52d4f3605a14a">◆ </a></span>VmaAllocatorCreateInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Description of a Allocator to be created. </p>
+
+</div>
+</div>
+<a id="ga1988031b0223fdbd564250fa1edd942c" name="ga1988031b0223fdbd564250fa1edd942c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1988031b0223fdbd564250fa1edd942c">◆ </a></span>VmaAllocatorInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. </p>
+
+</div>
+</div>
+<a id="ga77692d3c8770ea8882d573206bd27b2b" name="ga77692d3c8770ea8882d573206bd27b2b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga77692d3c8770ea8882d573206bd27b2b">◆ </a></span>VmaDeviceMemoryCallbacks</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. </p>
+<p >Provided for informative purpose, e.g. to gather statistics about number of allocations or total amount of memory allocated in Vulkan.</p>
+<p >Used in <a class="el" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e" title="Informative callbacks for vkAllocateMemory, vkFreeMemory. Optional.">VmaAllocatorCreateInfo::pDeviceMemoryCallbacks</a>. </p>
+
+</div>
+</div>
+<a id="gabb0a8e3b5040d847571cca6c7f9a8074" name="gabb0a8e3b5040d847571cca6c7f9a8074"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabb0a8e3b5040d847571cca6c7f9a8074">◆ </a></span>VmaVulkanFunctions</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Pointers to some Vulkan functions - a subset used by the library. </p>
+<p >Used in <a class="el" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd" title="Pointers to Vulkan functions. Can be null.">VmaAllocatorCreateInfo::pVulkanFunctions</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga4f87c9100d154a65a4ad495f7763cf7c" name="ga4f87c9100d154a65a4ad495f7763cf7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4f87c9100d154a65a4ad495f7763cf7c">◆ </a></span>VmaAllocatorCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d" name="gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"></a>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT </td><td class="fielddoc"><p >Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. </p>
+<p >Using this flag may increase performance because internal mutexes are not used. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" name="gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"></a>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT </td><td class="fielddoc"><p >Enables usage of VK_KHR_dedicated_allocation extension. </p>
+<p >The flag works only if <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>== VK_API_VERSION_1_0</code>. When it is <code>VK_API_VERSION_1_1</code>, the flag is ignored because the extension has been promoted to Vulkan 1.1.</p>
+<p >Using this extension will automatically allocate dedicated blocks of memory for some buffers and images instead of suballocating place for them out of bigger memory blocks (as if you explicitly used <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> flag) when it is recommended by the driver. It may improve performance on some GPUs.</p>
+<p >You may set this flag only if you found out that following device extensions are supported, you enabled them while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want them to be used internally by this library:</p>
+<ul>
+<li>VK_KHR_get_memory_requirements2 (device extension)</li>
+<li>VK_KHR_dedicated_allocation (device extension)</li>
+</ul>
+<p >When this flag is set, you can experience following warnings reported by Vulkan validation layer. You can ignore them.</p>
+<blockquote class="doxtable">
+<p >vkBindBufferMemory(): Binding memory to buffer 0x2d but vkGetBufferMemoryRequirements() has not been called on that buffer. </p>
+</blockquote>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee" name="gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"></a>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT </td><td class="fielddoc"><p >Enables usage of VK_KHR_bind_memory2 extension.</p>
+<p >The flag works only if <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>== VK_API_VERSION_1_0</code>. When it is <code>VK_API_VERSION_1_1</code>, the flag is ignored because the extension has been promoted to Vulkan 1.1.</p>
+<p >You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want it to be used internally by this library.</p>
+<p >The extension provides functions <code>vkBindBufferMemory2KHR</code> and <code>vkBindImageMemory2KHR</code>, which allow to pass a chain of <code>pNext</code> structures while binding. This flag is required if you use <code>pNext</code> parameter in <a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a> or <a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0" name="gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"></a>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT </td><td class="fielddoc"><p >Enables usage of VK_EXT_memory_budget extension.</p>
+<p >You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want it to be used internally by this library, along with another instance extension VK_KHR_get_physical_device_properties2, which is required by it (or Vulkan 1.1, where this extension is promoted).</p>
+<p >The extension provides query for current memory usage and budget, which will probably be more accurate than an estimation used by the library otherwise. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f" name="gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"></a>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT </td><td class="fielddoc"><p >Enables usage of VK_AMD_device_coherent_memory extension.</p>
+<p >You may set this flag only if you:</p>
+<ul>
+<li>found out that this device extension is supported and enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>,</li>
+<li>checked that <code>VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory</code> is true and set it while creating the Vulkan device,</li>
+<li>want it to be used internally by this library.</li>
+</ul>
+<p >The extension and accompanying device feature provide access to memory types with <code>VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD</code> and <code>VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD</code> flags. They are useful mostly for writing breadcrumb markers - a common method for debugging GPU crash/hang/TDR.</p>
+<p >When the extension is not enabled, such memory types are still enumerated, but their usage is illegal. To protect from this error, if you don't create the allocator with this flag, it will refuse to allocate any memory or create a custom pool in such memory type, returning <code>VK_ERROR_FEATURE_NOT_PRESENT</code>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089" name="gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"></a>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT </td><td class="fielddoc"><p >Enables usage of "buffer device address" feature, which allows you to use function <code>vkGetBufferDeviceAddress*</code> to get raw GPU pointer to a buffer and pass it for usage inside a shader.</p>
+<p >You may set this flag only if you:</p>
+<ol type="1">
+<li>(For Vulkan version < 1.2) Found as available and enabled device extension VK_KHR_buffer_device_address. This extension is promoted to core Vulkan 1.2.</li>
+<li>Found as available and enabled device feature <code>VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress</code>.</li>
+</ol>
+<p >When this flag is set, you can create buffers with <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT</code> using VMA. The library automatically adds <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT</code> to allocated memory blocks wherever it might be needed.</p>
+<p >For more information, see documentation chapter <a class="el" href="enabling_buffer_device_address.html">Enabling buffer device address</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a" name="gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"></a>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT </td><td class="fielddoc"><p >Enables usage of VK_EXT_memory_priority extension in the library.</p>
+<p >You may set this flag only if you found available and enabled this device extension, along with <code>VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority == VK_TRUE</code>, while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>.</p>
+<p >When this flag is used, <a class="el" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7" title="A floating-point value between 0 and 1, indicating the priority of the allocation relative to other m...">VmaAllocationCreateInfo::priority</a> and <a class="el" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274" title="A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relat...">VmaPoolCreateInfo::priority</a> are used to set priorities of allocated Vulkan memory. Without it, these variables are ignored.</p>
+<p >A priority must be a floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. Larger values are higher priority. The granularity of the priorities is implementation-dependent. It is automatically passed to every call to <code>vkAllocateMemory</code> done by the library using structure <code>VkMemoryPriorityAllocateInfoEXT</code>. The value to be used for default priority is 0.5. For more details, see the documentation of the VK_EXT_memory_priority extension. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c" name="gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"></a>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga200692051ddb34240248234f5f4c17bb" name="ga200692051ddb34240248234f5f4c17bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga200692051ddb34240248234f5f4c17bb">◆ </a></span>vmaCreateAllocator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreateAllocator </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> * </td>
+ <td class="paramname"><em>pAllocator</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. </p>
+
+</div>
+</div>
+<a id="gaa8d164061c88f22fb1fd3c8f3534bc1d" name="gaa8d164061c88f22fb1fd3c8f3534bc1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa8d164061c88f22fb1fd3c8f3534bc1d">◆ </a></span>vmaDestroyAllocator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaDestroyAllocator </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys allocator object. </p>
+
+</div>
+</div>
+<a id="gafa02231a791b37255720d566a52683e7" name="gafa02231a791b37255720d566a52683e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafa02231a791b37255720d566a52683e7">◆ </a></span>vmaGetAllocatorInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetAllocatorInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> * </td>
+ <td class="paramname"><em>pAllocatorInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object - handle to Vulkan device etc. </p>
+<p >It might be useful if you want to keep just the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> handle and fetch other required handles to <code>VkPhysicalDevice</code>, <code>VkDevice</code> etc. every time using this function. </p>
+
+</div>
+</div>
+<a id="gab88db292a17974f911182543fda52d19" name="gab88db292a17974f911182543fda52d19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab88db292a17974f911182543fda52d19">◆ </a></span>vmaGetMemoryProperties()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetMemoryProperties </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkPhysicalDeviceMemoryProperties ** </td>
+ <td class="paramname"><em>ppPhysicalDeviceMemoryProperties</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own. </p>
+
+</div>
+</div>
+<a id="ga8701444752eb5de4464adb5a2b514bca" name="ga8701444752eb5de4464adb5a2b514bca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8701444752eb5de4464adb5a2b514bca">◆ </a></span>vmaGetMemoryTypeProperties()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetMemoryTypeProperties </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>memoryTypeIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkMemoryPropertyFlags * </td>
+ <td class="paramname"><em>pFlags</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Given Memory Type Index, returns Property Flags of this memory type. </p>
+<p >This is just a convenience function. Same information can be obtained using <a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>. </p>
+
+</div>
+</div>
+<a id="gaecabf7b6e91ea87d0316fa0a9e014fe0" name="gaecabf7b6e91ea87d0316fa0a9e014fe0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaecabf7b6e91ea87d0316fa0a9e014fe0">◆ </a></span>vmaGetPhysicalDeviceProperties()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetPhysicalDeviceProperties </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const VkPhysicalDeviceProperties ** </td>
+ <td class="paramname"><em>ppPhysicalDeviceProperties</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >PhysicalDeviceProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own. </p>
+
+</div>
+</div>
+<a id="gade56bf8dc9f5a5eaddf5f119ed525236" name="gade56bf8dc9f5a5eaddf5f119ed525236"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gade56bf8dc9f5a5eaddf5f119ed525236">◆ </a></span>vmaSetCurrentFrameIndex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaSetCurrentFrameIndex </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">uint32_t </td>
+ <td class="paramname"><em>frameIndex</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets index of the current frame. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__group__stats.html b/docs/html/group__group__stats.html
new file mode 100644
index 0000000..81e3237
--- /dev/null
+++ b/docs/html/group__group__stats.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: Statistics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Statistics</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Calculated statistics of memory usage in entire allocator. <a href="struct_vma_stat_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_stats.html">VmaStats</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">General statistics from current state of Allocator. <a href="struct_vma_stats.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_budget.html">VmaBudget</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Statistics of current memory usage and available budget, in bytes, for specific memory heap. <a href="struct_vma_budget.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="struct_vma_pool_stats.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaec5b57e29c97b5d69c6d5654d60df878"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">VmaStatInfo</a></td></tr>
+<tr class="memdesc:gaec5b57e29c97b5d69c6d5654d60df878"><td class="mdescLeft"> </td><td class="mdescRight">Calculated statistics of memory usage in entire allocator. <a href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">More...</a><br /></td></tr>
+<tr class="separator:gaec5b57e29c97b5d69c6d5654d60df878"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21813b2efdf3836767a9058cd8a94034"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stats.html">VmaStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">VmaStats</a></td></tr>
+<tr class="memdesc:ga21813b2efdf3836767a9058cd8a94034"><td class="mdescLeft"> </td><td class="mdescRight">General statistics from current state of Allocator. <a href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">More...</a><br /></td></tr>
+<tr class="separator:ga21813b2efdf3836767a9058cd8a94034"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa078667e71b1ef24e87a6a30d128381d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_budget.html">VmaBudget</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">VmaBudget</a></td></tr>
+<tr class="memdesc:gaa078667e71b1ef24e87a6a30d128381d"><td class="mdescLeft"> </td><td class="mdescRight">Statistics of current memory usage and available budget, in bytes, for specific memory heap. <a href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">More...</a><br /></td></tr>
+<tr class="separator:gaa078667e71b1ef24e87a6a30d128381d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4759a2d9f99c19ba7627553c847132f1"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a></td></tr>
+<tr class="memdesc:ga4759a2d9f99c19ba7627553c847132f1"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">More...</a><br /></td></tr>
+<tr class="separator:ga4759a2d9f99c19ba7627553c847132f1"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga333b61c1788cb23559177531e6a93ca3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_stats.html">VmaStats</a> *pStats)</td></tr>
+<tr class="memdesc:ga333b61c1788cb23559177531e6a93ca3"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics from current state of the Allocator. <a href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">More...</a><br /></td></tr>
+<tr class="separator:ga333b61c1788cb23559177531e6a93ca3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">vmaGetHeapBudgets</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_budget.html">VmaBudget</a> *pBudgets)</td></tr>
+<tr class="memdesc:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves information about current memory budget for all memory heaps. <a href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">More...</a><br /></td></tr>
+<tr class="separator:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8bf76997b234ef68aad922616df4153"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> *pPoolStats)</td></tr>
+<tr class="memdesc:gae8bf76997b234ef68aad922616df4153"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">More...</a><br /></td></tr>
+<tr class="separator:gae8bf76997b234ef68aad922616df4153"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52d810e1222c592e5d80556ad005f1e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">vmaBuildVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char **ppStatsString, VkBool32 detailedMap)</td></tr>
+<tr class="memdesc:ga52d810e1222c592e5d80556ad005f1e6"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns a null-terminated string in JSON format with information about given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">More...</a><br /></td></tr>
+<tr class="separator:ga52d810e1222c592e5d80556ad005f1e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">vmaFreeVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char *pStatsString)</td></tr>
+<tr class="memdesc:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="mdescLeft"> </td><td class="mdescRight">Frees a string returned by <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. <a href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">More...</a><br /></td></tr>
+<tr class="separator:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char **ppStatsString, VkBool32 detailedMap)</td></tr>
+<tr class="memdesc:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns statistics as a null-terminated string in JSON format. <a href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">More...</a><br /></td></tr>
+<tr class="separator:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3104eb30d8122c84dd8541063f145288"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char *pStatsString)</td></tr>
+<tr class="separator:ga3104eb30d8122c84dd8541063f145288"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p >API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gaa078667e71b1ef24e87a6a30d128381d" name="gaa078667e71b1ef24e87a6a30d128381d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa078667e71b1ef24e87a6a30d128381d">◆ </a></span>VmaBudget</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_budget.html">VmaBudget</a> <a class="el" href="struct_vma_budget.html">VmaBudget</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Statistics of current memory usage and available budget, in bytes, for specific memory heap. </p>
+
+</div>
+</div>
+<a id="ga4759a2d9f99c19ba7627553c847132f1" name="ga4759a2d9f99c19ba7627553c847132f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4759a2d9f99c19ba7627553c847132f1">◆ </a></span>VmaPoolStats</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. </p>
+
+</div>
+</div>
+<a id="gaec5b57e29c97b5d69c6d5654d60df878" name="gaec5b57e29c97b5d69c6d5654d60df878"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaec5b57e29c97b5d69c6d5654d60df878">◆ </a></span>VmaStatInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculated statistics of memory usage in entire allocator. </p>
+
+</div>
+</div>
+<a id="ga21813b2efdf3836767a9058cd8a94034" name="ga21813b2efdf3836767a9058cd8a94034"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga21813b2efdf3836767a9058cd8a94034">◆ </a></span>VmaStats</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_stats.html">VmaStats</a> <a class="el" href="struct_vma_stats.html">VmaStats</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>General statistics from current state of Allocator. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaa4fee7eb5253377599ef4fd38c93c2a0" name="gaa4fee7eb5253377599ef4fd38c93c2a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa4fee7eb5253377599ef4fd38c93c2a0">◆ </a></span>vmaBuildStatsString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaBuildStatsString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>ppStatsString</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBool32 </td>
+ <td class="paramname"><em>detailedMap</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds and returns statistics as a null-terminated string in JSON format. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ppStatsString</td><td>Must be freed using <a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vmaFreeStatsString()</a> function. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">detailedMap</td><td></td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga52d810e1222c592e5d80556ad005f1e6" name="ga52d810e1222c592e5d80556ad005f1e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga52d810e1222c592e5d80556ad005f1e6">◆ </a></span>vmaBuildVirtualBlockStatsString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaBuildVirtualBlockStatsString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char ** </td>
+ <td class="paramname"><em>ppStatsString</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkBool32 </td>
+ <td class="paramname"><em>detailedMap</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Builds and returns a null-terminated string in JSON format with information about given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">virtualBlock</td><td>Virtual block. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ppStatsString</td><td>Returned string. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">detailedMap</td><td>Pass <code>VK_FALSE</code> to only obtain statistics as returned by <a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a" title="Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...">vmaCalculateVirtualBlockStats()</a>. Pass <code>VK_TRUE</code> to also obtain full list of allocations and free spaces.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Returned string must be freed using <a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623" title="Frees a string returned by vmaBuildVirtualBlockStatsString().">vmaFreeVirtualBlockStatsString()</a>. </p>
+
+</div>
+</div>
+<a id="ga333b61c1788cb23559177531e6a93ca3" name="ga333b61c1788cb23559177531e6a93ca3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga333b61c1788cb23559177531e6a93ca3">◆ </a></span>vmaCalculateStats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaCalculateStats </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_stats.html">VmaStats</a> * </td>
+ <td class="paramname"><em>pStats</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves statistics from current state of the Allocator. </p>
+<p >This function is called "calculate" not "get" because it has to traverse all internal data structures, so it may be quite slow. For faster but more brief statistics suitable to be called every frame or every allocation, use <a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a>.</p>
+<p >Note that when using allocator from multiple threads, returned information may immediately become outdated. </p>
+
+</div>
+</div>
+<a id="ga3104eb30d8122c84dd8541063f145288" name="ga3104eb30d8122c84dd8541063f145288"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3104eb30d8122c84dd8541063f145288">◆ </a></span>vmaFreeStatsString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaFreeStatsString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"><em>pStatsString</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga47fb8d8aa69df4a7c23a9719b4080623" name="ga47fb8d8aa69df4a7c23a9719b4080623"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga47fb8d8aa69df4a7c23a9719b4080623">◆ </a></span>vmaFreeVirtualBlockStatsString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaFreeVirtualBlockStatsString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char * </td>
+ <td class="paramname"><em>pStatsString</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees a string returned by <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. </p>
+
+</div>
+</div>
+<a id="ga9f88db9d46a432c0ad7278cecbc5eaa7" name="ga9f88db9d46a432c0ad7278cecbc5eaa7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9f88db9d46a432c0ad7278cecbc5eaa7">◆ </a></span>vmaGetHeapBudgets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetHeapBudgets </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_budget.html">VmaBudget</a> * </td>
+ <td class="paramname"><em>pBudgets</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves information about current memory budget for all memory heaps. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pBudgets</td><td>Must point to array with number of elements at least equal to number of memory heaps in physical device used.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>This function is called "get" not "calculate" because it is very fast, suitable to be called every frame or every allocation. For more detailed statistics use <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>.</p>
+<p >Note that when using allocator from multiple threads, returned information may immediately become outdated. </p>
+
+</div>
+</div>
+<a id="gae8bf76997b234ef68aad922616df4153" name="gae8bf76997b234ef68aad922616df4153"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae8bf76997b234ef68aad922616df4153">◆ </a></span>vmaGetPoolStats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetPoolStats </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
+ <td class="paramname"><em>allocator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
+ <td class="paramname"><em>pool</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> * </td>
+ <td class="paramname"><em>pPoolStats</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Retrieves statistics of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pool</td><td>Pool object. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pPoolStats</td><td>Statistics of specified pool. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/group__group__virtual.html b/docs/html/group__group__virtual.html
new file mode 100644
index 0000000..514810e
--- /dev/null
+++ b/docs/html/group__group__virtual.html
@@ -0,0 +1,666 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: Virtual allocator</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#enum-members">Enumerations</a> |
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Virtual allocator</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>API elements related to the mechanism of <a class="el" href="virtual_allocator.html">Virtual allocator</a> - using the core allocation algorithm for user-defined purpose without allocating any real GPU memory.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="struct_vma_virtual_block_create_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="struct_vma_virtual_allocation_create_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="struct_vma_virtual_allocation_info.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Represents single memory allocation done inside <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="struct_vma_virtual_allocation.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory. <a href="struct_vma_virtual_block.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga0860ba1c0a67178fae4aecb63a78573e"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e">VmaVirtualBlockCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga0860ba1c0a67178fae4aecb63a78573e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e">More...</a><br /></td></tr>
+<tr class="separator:ga0860ba1c0a67178fae4aecb63a78573e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">VmaVirtualBlockCreateFlags</a></td></tr>
+<tr class="memdesc:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. <a href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">More...</a><br /></td></tr>
+<tr class="separator:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga936815e64946a6b6d812d08d10184c23"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23">VmaVirtualAllocationCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga936815e64946a6b6d812d08d10184c23"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23">More...</a><br /></td></tr>
+<tr class="separator:ga936815e64946a6b6d812d08d10184c23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae96ffc099bf898257fb19e9410ed08a7"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a></td></tr>
+<tr class="memdesc:gae96ffc099bf898257fb19e9410ed08a7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. <a href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">More...</a><br /></td></tr>
+<tr class="separator:gae96ffc099bf898257fb19e9410ed08a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4753d42d40217a3a652a3cdf253ad773"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">VmaVirtualBlockCreateInfo</a></td></tr>
+<tr class="memdesc:ga4753d42d40217a3a652a3cdf253ad773"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">More...</a><br /></td></tr>
+<tr class="separator:ga4753d42d40217a3a652a3cdf253ad773"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">VmaVirtualAllocationCreateInfo</a></td></tr>
+<tr class="memdesc:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">More...</a><br /></td></tr>
+<tr class="separator:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">VmaVirtualAllocationInfo</a></td></tr>
+<tr class="memdesc:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">More...</a><br /></td></tr>
+<tr class="separator:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000001
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000002
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691">VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT</a> = 0x00000004
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK</a>
+, <br />
+  <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">More...</a><br /></td></tr>
+<tr class="separator:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT
+, <br />
+  <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK</a> = VMA_ALLOCATION_CREATE_STRATEGY_MASK
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">More...</a><br /></td></tr>
+<tr class="separator:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="memSeparator" colspan="2"> </td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga565936f8d98d225b536a2d9703bc7676"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676">VK_DEFINE_NON_DISPATCHABLE_HANDLE</a> (<a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a>)</td></tr>
+<tr class="separator:ga565936f8d98d225b536a2d9703bc7676"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab585754076877265fdae33e5c40ef13b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a> (const <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> *pVirtualBlock)</td></tr>
+<tr class="memdesc:gab585754076877265fdae33e5c40ef13b"><td class="mdescLeft"> </td><td class="mdescRight">Creates new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">More...</a><br /></td></tr>
+<tr class="separator:gab585754076877265fdae33e5c40ef13b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3795f7783ae2c182cede067d656f66a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:ga3795f7783ae2c182cede067d656f66a5"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">More...</a><br /></td></tr>
+<tr class="separator:ga3795f7783ae2c182cede067d656f66a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memItemLeft" align="right" valign="top">VkBool32 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">vmaIsVirtualBlockEmpty</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="mdescLeft"> </td><td class="mdescRight">Returns true of the <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is empty - contains 0 virtual allocations and has all its space available for new allocations. <a href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">More...</a><br /></td></tr>
+<tr class="separator:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vmaGetVirtualAllocationInfo</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation, <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> *pVirtualAllocInfo)</td></tr>
+<tr class="memdesc:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about a specific virtual allocation within a virtual block, like its size and <code>pUserData</code> pointer. <a href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">More...</a><br /></td></tr>
+<tr class="separator:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vmaVirtualAllocate</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, const <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> *pAllocation, VkDeviceSize *pOffset)</td></tr>
+<tr class="memdesc:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="mdescLeft"> </td><td class="mdescRight">Allocates new virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">More...</a><br /></td></tr>
+<tr class="separator:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09fc688c0c3653ff23723b037e5d5033"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vmaVirtualFree</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga09fc688c0c3653ff23723b037e5d5033"><td class="mdescLeft"> </td><td class="mdescRight">Frees virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">More...</a><br /></td></tr>
+<tr class="separator:ga09fc688c0c3653ff23723b037e5d5033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5eda6f55919fb05bd2f56a112590c571"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">vmaClearVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:ga5eda6f55919fb05bd2f56a112590c571"><td class="mdescLeft"> </td><td class="mdescRight">Frees all virtual allocations inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">More...</a><br /></td></tr>
+<tr class="separator:ga5eda6f55919fb05bd2f56a112590c571"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga001ea1850458a4062b829e09c303fca2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vmaSetVirtualAllocationUserData</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation, void *pUserData)</td></tr>
+<tr class="memdesc:ga001ea1850458a4062b829e09c303fca2"><td class="mdescLeft"> </td><td class="mdescRight">Changes custom pointer associated with given virtual allocation. <a href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">More...</a><br /></td></tr>
+<tr class="separator:ga001ea1850458a4062b829e09c303fca2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95169b4730e94757897470086ec2768a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> *pStatInfo)</td></tr>
+<tr class="memdesc:ga95169b4730e94757897470086ec2768a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates and returns statistics about virtual allocations and memory usage in given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">More...</a><br /></td></tr>
+<tr class="separator:ga95169b4730e94757897470086ec2768a"><td class="memSeparator" colspan="2"> </td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p >API elements related to the mechanism of <a class="el" href="virtual_allocator.html">Virtual allocator</a> - using the core allocation algorithm for user-defined purpose without allocating any real GPU memory. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga936815e64946a6b6d812d08d10184c23" name="ga936815e64946a6b6d812d08d10184c23"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga936815e64946a6b6d812d08d10184c23">◆ </a></span>VmaVirtualAllocationCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. </p>
+
+</div>
+</div>
+<a id="gae96ffc099bf898257fb19e9410ed08a7" name="gae96ffc099bf898257fb19e9410ed08a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae96ffc099bf898257fb19e9410ed08a7">◆ </a></span>VmaVirtualAllocationCreateFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. </p>
+
+</div>
+</div>
+<a id="gac3c90d80bedc6847a41b82d0e2158c9e" name="gac3c90d80bedc6847a41b82d0e2158c9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac3c90d80bedc6847a41b82d0e2158c9e">◆ </a></span>VmaVirtualAllocationCreateInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. </p>
+
+</div>
+</div>
+<a id="ga75bc33ff7cf18c98e101f570dc2a5ebc" name="ga75bc33ff7cf18c98e101f570dc2a5ebc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga75bc33ff7cf18c98e101f570dc2a5ebc">◆ </a></span>VmaVirtualAllocationInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. </p>
+
+</div>
+</div>
+<a id="ga0860ba1c0a67178fae4aecb63a78573e" name="ga0860ba1c0a67178fae4aecb63a78573e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0860ba1c0a67178fae4aecb63a78573e">◆ </a></span>VmaVirtualBlockCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef enum <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. </p>
+
+</div>
+</div>
+<a id="ga4e49c2f0ab7f6b4868833e5bac78d91e" name="ga4e49c2f0ab7f6b4868833e5bac78d91e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4e49c2f0ab7f6b4868833e5bac78d91e">◆ </a></span>VmaVirtualBlockCreateFlags</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef VkFlags <a class="el" href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">VmaVirtualBlockCreateFlags</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. </p>
+
+</div>
+</div>
+<a id="ga4753d42d40217a3a652a3cdf253ad773" name="ga4753d42d40217a3a652a3cdf253ad773"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4753d42d40217a3a652a3cdf253ad773">◆ </a></span>VmaVirtualBlockCreateInfo</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga2e9c64d405b14156fea7e10c4ad06cb6" name="ga2e9c64d405b14156fea7e10c4ad06cb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2e9c64d405b14156fea7e10c4ad06cb6">◆ </a></span>VmaVirtualAllocationCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e" name="gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e"></a>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT </td><td class="fielddoc"><p >Allocation will be created from upper stack in a double stack pool. </p>
+<p >This flag is only allowed for virtual blocks created with <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" title="Enables alternative, linear allocation algorithm in this virtual block.">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a> flag. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf" name="gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory usage. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b" name="gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize allocation time. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a" name="gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory fragmentation. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3" name="gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK </td><td class="fielddoc"><p >A bit mask to extract only <code>STRATEGY</code> bits from entire set of flags. </p>
+<p >These strategy flags are binary compatible with equivalent flags in <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9" name="gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9"></a>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga88bcf8c1cd3bb1610ff7343811c65bca" name="ga88bcf8c1cd3bb1610ff7343811c65bca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga88bcf8c1cd3bb1610ff7343811c65bca">◆ </a></span>VmaVirtualBlockCreateFlagBits</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" name="gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96"></a>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, linear allocation algorithm in this virtual block. </p>
+<p >Specify this flag to enable linear allocation algorithm, which always creates new allocations after last one and doesn't reuse space from allocations freed in between. It trades memory consumption for simplified algorithm and data structure, which has better performance and uses less memory for metadata.</p>
+<p >By using this flag, you can achieve behavior of free-at-once, stack, ring buffer, and double stack. For details, see documentation chapter <a class="el" href="custom_memory_pools.html#linear_algorithm">Linear allocation algorithm</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63" name="gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63"></a>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, buddy allocation algorithm in this virtual block. </p>
+<p >It operates on a tree of blocks, each having size that is a power of two and a half of its parent's size. Comparing to default algorithm, this one provides faster allocation and deallocation and decreased external fragmentation, at the expense of more memory wasted (internal fragmentation). For details, see documentation chapter <a class="el" href="custom_memory_pools.html#buddy_algorithm">Buddy allocation algorithm</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691" name="gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691"></a>VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, TLSF allocation algorithm in virtual block. </p>
+<p >This algorithm is based on 2-level lists dividing address space into smaller chunks. The first level is aligned to power of two which serves as buckets for requested memory to fall into, and the second level is lineary subdivided into lists of free memory. This algorithm aims to achieve bounded response time even in the worst case scenario. Allocation time can be sometimes slightly longer than compared to other algorithms but in return the application can avoid stalls in case of fragmentation, giving predictable results, suitable for real-time use cases. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844" name="gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844"></a>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK </td><td class="fielddoc"><p >Bit mask to extract only <code>ALGORITHM</code> bits from entire set of flags. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87" name="gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87"></a>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga565936f8d98d225b536a2d9703bc7676" name="ga565936f8d98d225b536a2d9703bc7676"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga565936f8d98d225b536a2d9703bc7676">◆ </a></span>VK_DEFINE_NON_DISPATCHABLE_HANDLE()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VK_DEFINE_NON_DISPATCHABLE_HANDLE </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> </td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga95169b4730e94757897470086ec2768a" name="ga95169b4730e94757897470086ec2768a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga95169b4730e94757897470086ec2768a">◆ </a></span>vmaCalculateVirtualBlockStats()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaCalculateVirtualBlockStats </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> * </td>
+ <td class="paramname"><em>pStatInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Calculates and returns statistics about virtual allocations and memory usage in given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+
+</div>
+</div>
+<a id="ga5eda6f55919fb05bd2f56a112590c571" name="ga5eda6f55919fb05bd2f56a112590c571"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5eda6f55919fb05bd2f56a112590c571">◆ </a></span>vmaClearVirtualBlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaClearVirtualBlock </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees all virtual allocations inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+<p >You must either call this function or free each virtual allocation individually with <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> before destroying a virtual block. Otherwise, an assert is called.</p>
+<p >If you keep pointer to some additional metadata associated with your virtual allocation in its <code>pUserData</code>, don't forget to free it as well. </p>
+
+</div>
+</div>
+<a id="gab585754076877265fdae33e5c40ef13b" name="gab585754076877265fdae33e5c40ef13b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab585754076877265fdae33e5c40ef13b">◆ </a></span>vmaCreateVirtualBlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaCreateVirtualBlock </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> * </td>
+ <td class="paramname"><em>pVirtualBlock</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Parameters for creation. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pVirtualBlock</td><td>Returned virtual block object or <code>VMA_NULL</code> if creation failed. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga3795f7783ae2c182cede067d656f66a5" name="ga3795f7783ae2c182cede067d656f66a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3795f7783ae2c182cede067d656f66a5">◆ </a></span>vmaDestroyVirtualBlock()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaDestroyVirtualBlock </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Destroys <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. </p>
+<p >Please note that you should consciously handle virtual allocations that could remain unfreed in the block. You should either free them individually using <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> or call <a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571" title="Frees all virtual allocations inside given VmaVirtualBlock.">vmaClearVirtualBlock()</a> if you are sure this is what you want. If you do neither, an assert is called.</p>
+<p >If you keep pointers to some additional metadata associated with your virtual allocations in their <code>pUserData</code>, don't forget to free them. </p>
+
+</div>
+</div>
+<a id="ga8ee14ceb1fe033ec84d8aa29e1f75afa" name="ga8ee14ceb1fe033ec84d8aa29e1f75afa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8ee14ceb1fe033ec84d8aa29e1f75afa">◆ </a></span>vmaGetVirtualAllocationInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaGetVirtualAllocationInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> * </td>
+ <td class="paramname"><em>pVirtualAllocInfo</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns information about a specific virtual allocation within a virtual block, like its size and <code>pUserData</code> pointer. </p>
+
+</div>
+</div>
+<a id="gacd53b5b1d23f8fcbad692ccfdc1811f1" name="gacd53b5b1d23f8fcbad692ccfdc1811f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacd53b5b1d23f8fcbad692ccfdc1811f1">◆ </a></span>vmaIsVirtualBlockEmpty()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkBool32 vmaIsVirtualBlockEmpty </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns true of the <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is empty - contains 0 virtual allocations and has all its space available for new allocations. </p>
+
+</div>
+</div>
+<a id="ga001ea1850458a4062b829e09c303fca2" name="ga001ea1850458a4062b829e09c303fca2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga001ea1850458a4062b829e09c303fca2">◆ </a></span>vmaSetVirtualAllocationUserData()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaSetVirtualAllocationUserData </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> </td>
+ <td class="paramname"><em>allocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void * </td>
+ <td class="paramname"><em>pUserData</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Changes custom pointer associated with given virtual allocation. </p>
+
+</div>
+</div>
+<a id="ga6b7cdcc1c3e5103c323fedc4e1319e01" name="ga6b7cdcc1c3e5103c323fedc4e1319e01"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6b7cdcc1c3e5103c323fedc4e1319e01">◆ </a></span>vmaVirtualAllocate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkResult vmaVirtualAllocate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> * </td>
+ <td class="paramname"><em>pCreateInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> * </td>
+ <td class="paramname"><em>pAllocation</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VkDeviceSize * </td>
+ <td class="paramname"><em>pOffset</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Allocates new virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+<p >There is no handle type for a virtual allocation. Virtual allocations within a specific virtual block are uniquely identified by their offsets.</p>
+<p >If the allocation fails due to not enough free space available, <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> is returned (despite the function doesn't ever allocate actual GPU memory).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir"></td><td class="paramname">virtualBlock</td><td>Virtual block </td></tr>
+ <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Parameters for the allocation </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Returned handle of the new allocation </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pOffset</td><td>Returned offset of the new allocation. Optional, can be null. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga09fc688c0c3653ff23723b037e5d5033" name="ga09fc688c0c3653ff23723b037e5d5033"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga09fc688c0c3653ff23723b037e5d5033">◆ </a></span>vmaVirtualFree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void vmaVirtualFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
+ <td class="paramname"><em>virtualBlock</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> </td>
+ <td class="paramname"><em>allocation</em> </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/index.html b/docs/html/index.html
index 12026e0..d0cf137 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -68,7 +68,7 @@
<div class="textblock"><p ><b>Version 3.0.0-development</b></p>
<p >Copyright (c) 2017-2021 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>
+<p ><b>API documentation divided into groups:</b> <a href="modules.html">Modules</a></p>
<h1><a class="anchor" id="main_table_of_contents"></a>
Table of contents</h1>
<ul>
diff --git a/docs/html/memory_mapping.html b/docs/html/memory_mapping.html
index b8f7fe4..ad5058e 100644
--- a/docs/html/memory_mapping.html
+++ b/docs/html/memory_mapping.html
@@ -72,7 +72,7 @@
<div class="textblock"><p >To "map memory" in Vulkan means to obtain a CPU pointer to <code>VkDeviceMemory</code>, to be able to read from it or write to it in CPU code. Mapping is possible only of memory allocated from a memory type that has <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code> flag. Functions <code>vkMapMemory()</code>, <code>vkUnmapMemory()</code> are designed for this purpose. You can use them directly with memory allocated by this library, but it is not recommended because of following issue: Mapping the same <code>VkDeviceMemory</code> block multiple times is illegal - only one mapping at a time is allowed. This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan. Because of this, Vulkan Memory Allocator provides following facilities:</p>
<h1><a class="anchor" id="memory_mapping_mapping_functions"></a>
Mapping functions</h1>
-<p >The library provides following functions for mapping of a specific <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>: <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a>. They are safer and more convenient to use than standard Vulkan functions. You can map an allocation multiple times simultaneously - mapping is reference-counted internally. You can also map different allocations simultaneously regardless of whether they use the same <code>VkDeviceMemory</code> block. The way it is implemented is that the library always maps entire memory block, not just region of the allocation. For further details, see description of <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> function. Example:</p>
+<p >The library provides following functions for mapping of a specific <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>: <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a>. They are safer and more convenient to use than standard Vulkan functions. You can map an allocation multiple times simultaneously - mapping is reference-counted internally. You can also map different allocations simultaneously regardless of whether they use the same <code>VkDeviceMemory</code> block. The way it is implemented is that the library always maps entire memory block, not just region of the allocation. For further details, see description of <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> function. Example:</p>
<div class="fragment"><div class="line"><span class="comment">// Having these objects initialized:</span></div>
<div class="line"> </div>
<div class="line"><span class="keyword">struct </span>ConstantBuffer</div>
@@ -88,100 +88,100 @@
<div class="line"><span class="comment">// You can map and fill your buffer using following code:</span></div>
<div class="line"> </div>
<div class="line"><span class="keywordtype">void</span>* mappedData;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(allocator, constantBufferAllocation, &mappedData);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vmaMapMemory</a>(allocator, constantBufferAllocation, &mappedData);</div>
<div class="line">memcpy(mappedData, &constantBufferData, <span class="keyword">sizeof</span>(constantBufferData));</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(allocator, constantBufferAllocation);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(allocator, constantBufferAllocation);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga9bc268595cb33f6ec4d519cfce81ff45"><div class="ttname"><a href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a></div><div class="ttdeci">void vmaUnmapMemory(VmaAllocator allocator, VmaAllocation allocation)</div><div class="ttdoc">Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().</div></div>
+<div class="ttc" id="agroup__group__alloc_html_gad5bd1243512d099706de88168992f069"><div class="ttname"><a href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vmaMapMemory</a></div><div class="ttdeci">VkResult vmaMapMemory(VmaAllocator allocator, VmaAllocation allocation, void **ppData)</div><div class="ttdoc">Maps memory represented by given allocation and returns pointer to it.</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
<div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a9bc268595cb33f6ec4d519cfce81ff45"><div class="ttname"><a href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a></div><div class="ttdeci">void vmaUnmapMemory(VmaAllocator allocator, VmaAllocation allocation)</div><div class="ttdoc">Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad5bd1243512d099706de88168992f069"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a></div><div class="ttdeci">VkResult vmaMapMemory(VmaAllocator allocator, VmaAllocation allocation, void **ppData)</div><div class="ttdoc">Maps memory represented by given allocation and returns pointer to it.</div></div>
</div><!-- fragment --><p >When mapping, you may see a warning from Vulkan validation layer similar to this one:</p>
<p ><em>Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.</em></p>
<p >It happens because the library maps entire <code>VkDeviceMemory</code> block, where different types of images and buffers may end up together, especially on GPUs with unified memory like Intel. You can safely ignore it if you are sure you access only memory of the intended object that you wanted to map.</p>
<h1><a class="anchor" id="memory_mapping_persistently_mapped_memory"></a>
Persistently mapped memory</h1>
-<p >Kepping your memory persistently mapped is generally OK in Vulkan. You don't need to unmap it before using its data on the GPU. The library provides a special feature designed for that: Allocations made with <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag set in <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a> stay mapped all the time, so you can just access CPU pointer to it any time without a need to call any "map" or "unmap" function. Example:</p>
+<p >Kepping your memory persistently mapped is generally OK in Vulkan. You don't need to unmap it before using its data on the GPU. The library provides a special feature designed for that: Allocations made with <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag set in <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a> stay mapped all the time, so you can just access CPU pointer to it any time without a need to call any "map" or "unmap" function. Example:</p>
<div class="fragment"><div class="line">VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">bufCreateInfo.size = <span class="keyword">sizeof</span>(ConstantBuffer);</div>
<div class="line">bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>;</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
<div class="line"> </div>
<div class="line">VkBuffer buf;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// Buffer is already mapped. You can access its memory.</span></div>
<div class="line">memcpy(allocInfo.<a class="code hl_variable" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a>, &constantBufferData, <span class="keyword">sizeof</span>(constantBufferData));</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1016</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
-<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1184</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:444</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:508</div></div>
+<div class="ttc" id="agroup__group__alloc_html_gac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_CPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:476</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"><div class="ttname"><a href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATION_CREATE_MAPPED_BIT</div><div class="ttdoc">Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:540</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_add09658ac14fe290ace25470ddd6d41b"><div class="ttname"><a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">VmaAllocationCreateInfo::flags</a></div><div class="ttdeci">VmaAllocationCreateFlags flags</div><div class="ttdoc">Use VmaAllocationCreateFlagBits enum.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1136</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html"><div class="ttname"><a href="struct_vma_allocation_info.html">VmaAllocationInfo</a></div><div class="ttdoc">Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1276</div></div>
+<div class="ttc" id="astruct_vma_allocation_info_html_a5eeffbe2d2f30f53370ff14aefbadbe2"><div class="ttname"><a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">VmaAllocationInfo::pMappedData</a></div><div class="ttdeci">void * pMappedData</div><div class="ttdoc">Pointer to the beginning of this allocation as mapped data.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1318</div></div>
</div><!-- fragment --><p >There are some exceptions though, when you should consider mapping memory only for a short period of time:</p>
<ul>
-<li>When operating system is Windows 7 or 8.x (Windows 10 is not affected because it uses WDDM2), device is discrete AMD GPU, and memory type is the special 256 MiB pool of <code>DEVICE_LOCAL + HOST_VISIBLE</code> memory (selected when you use <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>), then whenever a memory block allocated from this memory type stays mapped for the time of any call to <code>vkQueueSubmit()</code> or <code>vkQueuePresentKHR()</code>, this block is migrated by WDDM to system RAM, which degrades performance. It doesn't matter if that particular memory block is actually used by the command buffer being submitted.</li>
+<li>When operating system is Windows 7 or 8.x (Windows 10 is not affected because it uses WDDM2), device is discrete AMD GPU, and memory type is the special 256 MiB pool of <code>DEVICE_LOCAL + HOST_VISIBLE</code> memory (selected when you use <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>), then whenever a memory block allocated from this memory type stays mapped for the time of any call to <code>vkQueueSubmit()</code> or <code>vkQueuePresentKHR()</code>, this block is migrated by WDDM to system RAM, which degrades performance. It doesn't matter if that particular memory block is actually used by the command buffer being submitted.</li>
<li>Keeping many large memory blocks mapped may impact performance or stability of some debugging tools.</li>
</ul>
<h1><a class="anchor" id="memory_mapping_cache_control"></a>
Cache flush and invalidate</h1>
-<p >Memory in Vulkan doesn't need to be unmapped before using it on GPU, but unless a memory types has <code>VK_MEMORY_PROPERTY_HOST_COHERENT_BIT</code> flag set, you need to manually <b>invalidate</b> cache before reading of mapped pointer and <b>flush</b> cache after writing to mapped pointer. Map/unmap operations don't do that automatically. Vulkan provides following functions for this purpose <code>vkFlushMappedMemoryRanges()</code>, <code>vkInvalidateMappedMemoryRanges()</code>, but this library provides more convenient functions that refer to given allocation object: <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a>, or multiple objects at once: <a class="el" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc" title="Flushes memory of given set of allocations.">vmaFlushAllocations()</a>, <a class="el" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5" title="Invalidates memory of given set of allocations.">vmaInvalidateAllocations()</a>.</p>
+<p >Memory in Vulkan doesn't need to be unmapped before using it on GPU, but unless a memory types has <code>VK_MEMORY_PROPERTY_HOST_COHERENT_BIT</code> flag set, you need to manually <b>invalidate</b> cache before reading of mapped pointer and <b>flush</b> cache after writing to mapped pointer. Map/unmap operations don't do that automatically. Vulkan provides following functions for this purpose <code>vkFlushMappedMemoryRanges()</code>, <code>vkInvalidateMappedMemoryRanges()</code>, but this library provides more convenient functions that refer to given allocation object: <a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, <a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a>, or multiple objects at once: <a class="el" href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc" title="Flushes memory of given set of allocations.">vmaFlushAllocations()</a>, <a class="el" href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5" title="Invalidates memory of given set of allocations.">vmaInvalidateAllocations()</a>.</p>
<p >Regions of memory specified for flush/invalidate must be aligned to <code>VkPhysicalDeviceLimits::nonCoherentAtomSize</code>. This is automatically ensured by the library. In any memory type that is <code>HOST_VISIBLE</code> but not <code>HOST_COHERENT</code>, all allocations within blocks are aligned to this value, so their offsets are always multiply of <code>nonCoherentAtomSize</code> and two different allocations never share same "line" of this size.</p>
-<p >Please note that memory allocated with <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> is guaranteed to be <code>HOST_COHERENT</code>.</p>
+<p >Please note that memory allocated with <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> is guaranteed to be <code>HOST_COHERENT</code>.</p>
<p >Also, Windows drivers from all 3 <b>PC</b> GPU vendors (AMD, Intel, NVIDIA) currently provide <code>HOST_COHERENT</code> flag on all memory types that are <code>HOST_VISIBLE</code>, so on this platform you may not need to bother.</p>
<h1><a class="anchor" id="memory_mapping_finding_if_memory_mappable"></a>
Finding out if memory is mappable</h1>
<p >It may happen that your allocation ends up in memory that is <code>HOST_VISIBLE</code> (available for mapping) despite it wasn't explicitly requested. For example, application may work on integrated graphics with unified memory (like Intel) or allocation from video memory might have failed, so the library chose system memory as fallback.</p>
-<p >You can detect this case and map such allocation to access its memory on CPU directly, instead of launching a transfer operation. In order to do that: call <a class="el" href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1" title="Given an allocation, returns Property Flags of its memory type.">vmaGetAllocationMemoryProperties()</a> and look for <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code> flag.</p>
+<p >You can detect this case and map such allocation to access its memory on CPU directly, instead of launching a transfer operation. In order to do that: call <a class="el" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1" title="Given an allocation, returns Property Flags of its memory type.">vmaGetAllocationMemoryProperties()</a> and look for <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code> flag.</p>
<div class="fragment"><div class="line">VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">bufCreateInfo.size = <span class="keyword">sizeof</span>(ConstantBuffer);</div>
<div class="line">bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">preferredFlags</a> = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;</div>
<div class="line"> </div>
<div class="line">VkBuffer buf;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, <span class="keyword">nullptr</span>);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, <span class="keyword">nullptr</span>);</div>
<div class="line"> </div>
<div class="line">VkMemoryPropertyFlags memFlags;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a>(allocator, alloc, &memFlags);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a>(allocator, alloc, &memFlags);</div>
<div class="line"><span class="keywordflow">if</span>((memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)</div>
<div class="line">{</div>
<div class="line"> <span class="comment">// Allocation ended up in mappable memory. You can map it and access it directly.</span></div>
<div class="line"> <span class="keywordtype">void</span>* mappedData;</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a>(allocator, alloc, &mappedData);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vmaMapMemory</a>(allocator, alloc, &mappedData);</div>
<div class="line"> memcpy(mappedData, &constantBufferData, <span class="keyword">sizeof</span>(constantBufferData));</div>
-<div class="line"> <a class="code hl_function" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(allocator, alloc);</div>
+<div class="line"> <a class="code hl_function" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a>(allocator, alloc);</div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">else</span></div>
<div class="line">{</div>
<div class="line"> <span class="comment">// Allocation ended up in non-mappable memory.</span></div>
<div class="line"> <span class="comment">// You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.</span></div>
<div class="line">}</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1032</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a571e87dd38e552249b56b1b0b982fad1"><div class="ttname"><a href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a></div><div class="ttdeci">void vmaGetAllocationMemoryProperties(VmaAllocator allocator, VmaAllocation allocation, VkMemoryPropertyFlags *pFlags)</div><div class="ttdoc">Given an allocation, returns Property Flags of its memory type.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-</div><!-- fragment --><p >You can even use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag while creating allocations that are not necessarily <code>HOST_VISIBLE</code> (e.g. using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>). If the allocation ends up in memory type that is <code>HOST_VISIBLE</code>, it will be persistently mapped and you can use it directly. If not, the flag is just ignored. Example:</p>
+<div class="ttc" id="agroup__group__alloc_html_ga571e87dd38e552249b56b1b0b982fad1"><div class="ttname"><a href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a></div><div class="ttdeci">void vmaGetAllocationMemoryProperties(VmaAllocator allocator, VmaAllocation allocation, VkMemoryPropertyFlags *pFlags)</div><div class="ttdoc">Given an allocation, returns Property Flags of its memory type.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_a7fe8d81a1ad10b2a2faacacee5b15d6d"><div class="ttname"><a href="struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d">VmaAllocationCreateInfo::preferredFlags</a></div><div class="ttdeci">VkMemoryPropertyFlags preferredFlags</div><div class="ttdoc">Flags that preferably should be set in a memory type chosen for an allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1152</div></div>
+</div><!-- fragment --><p >You can even use <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag while creating allocations that are not necessarily <code>HOST_VISIBLE</code> (e.g. using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>). If the allocation ends up in memory type that is <code>HOST_VISIBLE</code>, it will be persistently mapped and you can use it directly. If not, the flag is just ignored. Example:</p>
<div class="fragment"><div class="line">VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">bufCreateInfo.size = <span class="keyword">sizeof</span>(ConstantBuffer);</div>
<div class="line">bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a>;</div>
<div class="line"> </div>
<div class="line">VkBuffer buf;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);</div>
<div class="line"> </div>
<div class="line"><span class="keywordflow">if</span>(allocInfo.<a class="code hl_variable" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">pMappedData</a> != <span class="keyword">nullptr</span>)</div>
<div class="line">{</div>
diff --git a/docs/html/menudata.js b/docs/html/menudata.js
index f83fd0d..1005963 100644
--- a/docs/html/menudata.js
+++ b/docs/html/menudata.js
@@ -25,6 +25,7 @@
var menudata={children:[
{text:"Main Page",url:"index.html"},
{text:"Related Pages",url:"pages.html"},
+{text:"Modules",url:"modules.html"},
{text:"Classes",url:"annotated.html",children:[
{text:"Class List",url:"annotated.html"},
{text:"Class Index",url:"classes.html"},
diff --git a/docs/html/modules.html b/docs/html/modules.html
new file mode 100644
index 0000000..5228b17
--- /dev/null
+++ b/docs/html/modules.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Modules</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group__group__init.html" target="_self">Library initialization</a></td><td class="desc">API elements related to the initialization and management of the entire library, especially <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group__group__alloc.html" target="_self">Memory allocation</a></td><td class="desc">API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images. Most basic ones being: <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group__group__virtual.html" target="_self">Virtual allocator</a></td><td class="desc">API elements related to the mechanism of <a class="el" href="virtual_allocator.html">Virtual allocator</a> - using the core allocation algorithm for user-defined purpose without allocating any real GPU memory </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="group__group__stats.html" target="_self">Statistics</a></td><td class="desc">API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/opengl_interop.html b/docs/html/opengl_interop.html
index f309c08..7247b66 100644
--- a/docs/html/opengl_interop.html
+++ b/docs/html/opengl_interop.html
@@ -80,7 +80,7 @@
Custom alignment</h1>
<p >Buffers or images exported to a different API like OpenGL may require a different alignment, higher than the one used by the library automatically, queried from functions like <code>vkGetBufferMemoryRequirements</code>. To impose such alignment:</p>
<p >It is recommended to create <a class="el" href="custom_memory_pools.html">Custom memory pools</a> for such allocations. Set <a class="el" href="struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb" title="Additional minimum alignment to be used for all allocations created from this pool....">VmaPoolCreateInfo::minAllocationAlignment</a> member to the minimum alignment required for each allocation to be made out of this pool. The alignment actually used will be the maximum of this member and the alignment returned for the specific buffer or image from a function like <code>vkGetBufferMemoryRequirements</code>, which is called by VMA automatically.</p>
-<p >If you want to create a buffer with a specific minimum alignment out of default pools, use special function <a class="el" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834" title="Creates a buffer with additional minimum alignment.">vmaCreateBufferWithAlignment()</a>, which takes additional parameter <code>minAlignment</code>.</p>
+<p >If you want to create a buffer with a specific minimum alignment out of default pools, use special function <a class="el" href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834" title="Creates a buffer with additional minimum alignment.">vmaCreateBufferWithAlignment()</a>, which takes additional parameter <code>minAlignment</code>.</p>
<p >Note the problem of alignment affects only resources placed inside bigger <code>VkDeviceMemory</code> blocks and not dedicated allocations, as these, by definition, always have alignment = 0 because the resource is bound to the beginning of its dedicated block. Contrary to Direct3D 12, Vulkan doesn't have a concept of alignment of the entire memory block passed on its allocation. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/quick_start.html b/docs/html/quick_start.html
index b01d280..f34d8db 100644
--- a/docs/html/quick_start.html
+++ b/docs/html/quick_start.html
@@ -94,7 +94,7 @@
<p >At program startup:</p>
<ol type="1">
<li>Initialize Vulkan to have <code>VkPhysicalDevice</code>, <code>VkDevice</code> and <code>VkInstance</code> object.</li>
-<li>Fill <a class="el" href="struct_vma_allocator_create_info.html" title="Description of a Allocator to be created.">VmaAllocatorCreateInfo</a> structure and create <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object by calling <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" title="Creates Allocator object.">vmaCreateAllocator()</a>.</li>
+<li>Fill <a class="el" href="struct_vma_allocator_create_info.html" title="Description of a Allocator to be created.">VmaAllocatorCreateInfo</a> structure and create <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object by calling <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb" title="Creates VmaAllocator object.">vmaCreateAllocator()</a>.</li>
</ol>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> allocatorInfo = {};</div>
<div class="line">allocatorInfo.<a class="code hl_variable" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">vulkanApiVersion</a> = VK_API_VERSION_1_2;</div>
@@ -103,43 +103,43 @@
<div class="line">allocatorInfo.<a class="code hl_variable" href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">instance</a> = instance;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocator.html">VmaAllocator</a> allocator;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&allocatorInfo, &allocator);</div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:854</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:859</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:907</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:862</div></div>
-<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:916</div></div>
+<div class="line"><a class="code hl_function" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&allocatorInfo, &allocator);</div>
+<div class="ttc" id="agroup__group__init_html_ga200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates VmaAllocator object.</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html"><div class="ttname"><a href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></div><div class="ttdoc">Description of a Allocator to be created.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:960</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">VmaAllocatorCreateInfo::physicalDevice</a></div><div class="ttdeci">VkPhysicalDevice physicalDevice</div><div class="ttdoc">Vulkan physical device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:965</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_a70dd42e29b1df1d1b9b61532ae0b370b"><div class="ttname"><a href="struct_vma_allocator_create_info.html#a70dd42e29b1df1d1b9b61532ae0b370b">VmaAllocatorCreateInfo::instance</a></div><div class="ttdeci">VkInstance instance</div><div class="ttdoc">Handle to Vulkan instance object.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1013</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500">VmaAllocatorCreateInfo::device</a></div><div class="ttdeci">VkDevice device</div><div class="ttdoc">Vulkan device.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:968</div></div>
+<div class="ttc" id="astruct_vma_allocator_create_info_html_ae0ffc55139b54520a6bb704b29ffc285"><div class="ttname"><a href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285">VmaAllocatorCreateInfo::vulkanApiVersion</a></div><div class="ttdeci">uint32_t vulkanApiVersion</div><div class="ttdoc">Optional. The highest version of Vulkan that the application is designed to use.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
<div class="ttc" id="astruct_vma_allocator_html"><div class="ttname"><a href="struct_vma_allocator.html">VmaAllocator</a></div><div class="ttdoc">Represents main object of this library initialized.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates Allocator object.</div></div>
-</div><!-- fragment --><p >Only members <code>physicalDevice</code>, <code>device</code>, <code>instance</code> are required. However, you should inform the library which Vulkan version do you use by setting <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> and which extensions did you enable by setting <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a> (like <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> for VK_KHR_buffer_device_address). Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions.</p>
+</div><!-- fragment --><p >Only members <code>physicalDevice</code>, <code>device</code>, <code>instance</code> are required. However, you should inform the library which Vulkan version do you use by setting <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> and which extensions did you enable by setting <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a> (like <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> for VK_KHR_buffer_device_address). Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions.</p>
<h1><a class="anchor" id="quick_start_resource_allocation"></a>
Resource allocation</h1>
<p >When you want to create a buffer or image:</p>
<ol type="1">
<li>Fill <code>VkBufferCreateInfo</code> / <code>VkImageCreateInfo</code> structure.</li>
<li>Fill <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> structure.</li>
-<li>Call <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> / <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> to get <code>VkBuffer</code>/<code>VkImage</code> with memory already allocated and bound to it.</li>
+<li>Call <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> / <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> to get <code>VkBuffer</code>/<code>VkImage</code> with memory already allocated and bound to it.</li>
</ol>
<div class="fragment"><div class="line">VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };</div>
<div class="line">bufferInfo.size = 65536;</div>
<div class="line">bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocInfo = {};</div>
-<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
<div class="line"> </div>
<div class="line">VkBuffer buffer;</div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> allocation;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a>(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="agroup__group__alloc_html_gac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51"><div class="ttname"><a href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a></div><div class="ttdeci">VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div></div>
</div><!-- fragment --><p >Don't forget to destroy your objects when no longer needed:</p>
-<div class="fragment"><div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, buffer, allocation);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(allocator);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa8d164061c88f22fb1fd3c8f3534bc1d"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a></div><div class="ttdeci">void vmaDestroyAllocator(VmaAllocator allocator)</div><div class="ttdoc">Destroys allocator object.</div></div>
+<div class="fragment"><div class="line"><a class="code hl_function" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a>(allocator, buffer, allocation);</div>
+<div class="line"><a class="code hl_function" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a>(allocator);</div>
+<div class="ttc" id="agroup__group__alloc_html_ga0d9f4e4ba5bf9aab1f1c746387753d77"><div class="ttname"><a href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a></div><div class="ttdeci">void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)</div><div class="ttdoc">Destroys Vulkan buffer and frees allocated memory.</div></div>
+<div class="ttc" id="agroup__group__init_html_gaa8d164061c88f22fb1fd3c8f3534bc1d"><div class="ttname"><a href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a></div><div class="ttdeci">void vmaDestroyAllocator(VmaAllocator allocator)</div><div class="ttdoc">Destroys allocator object.</div></div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
diff --git a/docs/html/resource_aliasing.html b/docs/html/resource_aliasing.html
index 9bfa0cb..a805647 100644
--- a/docs/html/resource_aliasing.html
+++ b/docs/html/resource_aliasing.html
@@ -124,31 +124,31 @@
<div class="line"><span class="comment">// Validate if(finalMemReq.memoryTypeBits != 0)</span></div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> allocCreateInfo = {};</div>
-<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
+<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a> = <a class="code hl_enumvalue" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>;</div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_allocation.html">VmaAllocation</a> alloc;</div>
-<div class="line">res = <a class="code hl_function" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(allocator, &finalMemReq, &allocCreateInfo, &alloc, <span class="keyword">nullptr</span>);</div>
+<div class="line">res = <a class="code hl_function" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a>(allocator, &finalMemReq, &allocCreateInfo, &alloc, <span class="keyword">nullptr</span>);</div>
<div class="line"> </div>
-<div class="line">res = <a class="code hl_function" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(allocator, alloc, img1);</div>
-<div class="line">res = <a class="code hl_function" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(allocator, alloc, img2);</div>
+<div class="line">res = <a class="code hl_function" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(allocator, alloc, img1);</div>
+<div class="line">res = <a class="code hl_function" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a>(allocator, alloc, img2);</div>
<div class="line"> </div>
<div class="line"><span class="comment">// You can use img1, img2 here, but not at the same time!</span></div>
<div class="line"> </div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, alloc);</div>
+<div class="line"><a class="code hl_function" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, alloc);</div>
<div class="line">vkDestroyImage(allocator, img2, <span class="keyword">nullptr</span>);</div>
<div class="line">vkDestroyImage(allocator, img1, <span class="keyword">nullptr</span>);</div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1014</div></div>
-<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1022</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga3d3ca45799923aa5d138e9e5f9eb2da5"><div class="ttname"><a href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a></div><div class="ttdeci">VkResult vmaBindImageMemory(VmaAllocator allocator, VmaAllocation allocation, VkImage image)</div><div class="ttdoc">Binds image to allocation.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ga5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
+<div class="ttc" id="agroup__group__alloc_html_gabf28077dbf82d0908b8acbe8ee8dd9b8"><div class="ttname"><a href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a></div><div class="ttdeci">VkResult vmaAllocateMemory(VmaAllocator allocator, const VkMemoryRequirements *pVkMemoryRequirements, const VmaAllocationCreateInfo *pCreateInfo, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">General purpose memory allocation.</div></div>
+<div class="ttc" id="agroup__group__alloc_html_ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:466</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html"><div class="ttname"><a href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1134</div></div>
+<div class="ttc" id="astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910"><div class="ttname"><a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">VmaAllocationCreateInfo::usage</a></div><div class="ttdeci">VmaMemoryUsage usage</div><div class="ttdoc">Intended usage of memory.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1142</div></div>
<div class="ttc" id="astruct_vma_allocation_html"><div class="ttname"><a href="struct_vma_allocation.html">VmaAllocation</a></div><div class="ttdoc">Represents single memory allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a3d3ca45799923aa5d138e9e5f9eb2da5"><div class="ttname"><a href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a></div><div class="ttdeci">VkResult vmaBindImageMemory(VmaAllocator allocator, VmaAllocation allocation, VkImage image)</div><div class="ttdoc">Binds image to allocation.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"><div class="ttname"><a href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a></div><div class="ttdeci">@ VMA_MEMORY_USAGE_GPU_ONLY</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:434</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_abf28077dbf82d0908b8acbe8ee8dd9b8"><div class="ttname"><a href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a></div><div class="ttdeci">VkResult vmaAllocateMemory(VmaAllocator allocator, const VkMemoryRequirements *pVkMemoryRequirements, const VmaAllocationCreateInfo *pCreateInfo, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)</div><div class="ttdoc">General purpose memory allocation.</div></div>
</div><!-- fragment --><p >Remember that using resources that alias in memory requires proper synchronization. You need to issue a memory barrier to make sure commands that use <code>img1</code> and <code>img2</code> don't overlap on GPU timeline. You also need to treat a resource after aliasing as uninitialized - containing garbage data. For example, if you use <code>img1</code> and then want to use <code>img2</code>, you need to issue an image memory barrier for <code>img2</code> with <code>oldLayout</code> = <code>VK_IMAGE_LAYOUT_UNDEFINED</code>.</p>
<p >Additional considerations:</p>
<ul>
<li>Vulkan also allows to interpret contents of memory between aliasing resources consistently in some cases. See chapter 11.8. "Memory Aliasing" of Vulkan specification or <code>VK_IMAGE_CREATE_ALIAS_BIT</code> flag.</li>
-<li>You can create more complex layout where different images and buffers are bound at different offsets inside one large allocation. For example, one can imagine a big texture used in some render passes, aliasing with a set of many small buffers used between in some further passes. To bind a resource at non-zero offset of an allocation, use <a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a> / <a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>.</li>
+<li>You can create more complex layout where different images and buffers are bound at different offsets inside one large allocation. For example, one can imagine a big texture used in some render passes, aliasing with a set of many small buffers used between in some further passes. To bind a resource at non-zero offset of an allocation, use <a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a> / <a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>.</li>
<li>Before allocating memory for the resources you want to alias, check <code>memoryTypeBits</code> returned in memory requirements of each resource to make sure the bits overlap. Some GPUs may expose multiple memory types suitable e.g. only for buffers or images with <code>COLOR_ATTACHMENT</code> usage, so the sets of memory types supported by your resources may be disjoint. Aliasing them is not possible in that case. </li>
</ul>
</div></div><!-- contents -->
diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js
index 59679bd..0e382e2 100644
--- a/docs/html/search/all_10.js
+++ b/docs/html/search/all_10.js
@@ -1,188 +1,11 @@
var searchData=
[
- ['virtual_20allocator_0',['Virtual allocator',['../virtual_allocator.html',1,'index']]],
- ['vk_5famd_5fdevice_5fcoherent_5fmemory_1',['VK_AMD_device_coherent_memory',['../vk_amd_device_coherent_memory.html',1,'index']]],
- ['vk_5ferror_5funknown_2',['VK_ERROR_UNKNOWN',['../vk__mem__alloc_8h.html#a162894cbe84f7d76632eb9af1e4b3558',1,'vk_mem_alloc.h']]],
- ['vk_5fkhr_5fdedicated_5fallocation_3',['VK_KHR_dedicated_allocation',['../vk_khr_dedicated_allocation.html',1,'index']]],
- ['vk_5fmem_5falloc_2eh_4',['vk_mem_alloc.h',['../vk__mem__alloc_8h.html',1,'']]],
- ['vkallocatememory_5',['vkAllocateMemory',['../struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c',1,'VmaVulkanFunctions']]],
- ['vkbindbuffermemory_6',['vkBindBufferMemory',['../struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2',1,'VmaVulkanFunctions']]],
- ['vkbindbuffermemory2khr_7',['vkBindBufferMemory2KHR',['../struct_vma_vulkan_functions.html#a0c4907235aab9df2767b79836afa2dc9',1,'VmaVulkanFunctions']]],
- ['vkbindimagememory_8',['vkBindImageMemory',['../struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637',1,'VmaVulkanFunctions']]],
- ['vkbindimagememory2khr_9',['vkBindImageMemory2KHR',['../struct_vma_vulkan_functions.html#ab95aaa73ab8a3fe9fd3daaaec4e0b2bf',1,'VmaVulkanFunctions']]],
- ['vkcmdcopybuffer_10',['vkCmdCopyBuffer',['../struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a',1,'VmaVulkanFunctions']]],
- ['vkcreatebuffer_11',['vkCreateBuffer',['../struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f',1,'VmaVulkanFunctions']]],
- ['vkcreateimage_12',['vkCreateImage',['../struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325',1,'VmaVulkanFunctions']]],
- ['vkdestroybuffer_13',['vkDestroyBuffer',['../struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45',1,'VmaVulkanFunctions']]],
- ['vkdestroyimage_14',['vkDestroyImage',['../struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa',1,'VmaVulkanFunctions']]],
- ['vkflushmappedmemoryranges_15',['vkFlushMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9',1,'VmaVulkanFunctions']]],
- ['vkfreememory_16',['vkFreeMemory',['../struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4',1,'VmaVulkanFunctions']]],
- ['vkgetbuffermemoryrequirements_17',['vkGetBufferMemoryRequirements',['../struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143',1,'VmaVulkanFunctions']]],
- ['vkgetbuffermemoryrequirements2khr_18',['vkGetBufferMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9d8d1b05d2b1e7e1d9b27f6f585acf9c',1,'VmaVulkanFunctions']]],
- ['vkgetdeviceprocaddr_19',['vkGetDeviceProcAddr',['../struct_vma_vulkan_functions.html#ac383ab9af127e5e136622fa4ebea9e57',1,'VmaVulkanFunctions']]],
- ['vkgetimagememoryrequirements_20',['vkGetImageMemoryRequirements',['../struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4',1,'VmaVulkanFunctions']]],
- ['vkgetimagememoryrequirements2khr_21',['vkGetImageMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9cdcdc1e2b2ea7c571f7d27e30ba6875',1,'VmaVulkanFunctions']]],
- ['vkgetinstanceprocaddr_22',['vkGetInstanceProcAddr',['../struct_vma_vulkan_functions.html#a3eafa102f5f8915f093f40675636b849',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldevicememoryproperties_23',['vkGetPhysicalDeviceMemoryProperties',['../struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldevicememoryproperties2khr_24',['vkGetPhysicalDeviceMemoryProperties2KHR',['../struct_vma_vulkan_functions.html#a0d992896e6ffcf92b9d7ea049fa5c445',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldeviceproperties_25',['vkGetPhysicalDeviceProperties',['../struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96',1,'VmaVulkanFunctions']]],
- ['vkinvalidatemappedmemoryranges_26',['vkInvalidateMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1',1,'VmaVulkanFunctions']]],
- ['vkmapmemory_27',['vkMapMemory',['../struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49',1,'VmaVulkanFunctions']]],
- ['vkunmapmemory_28',['vkUnmapMemory',['../struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9',1,'VmaVulkanFunctions']]],
- ['vma_5fallocation_5fcreate_5fcan_5falias_5fbit_29',['VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit_30',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdont_5fbind_5fbit_31',['VMA_ALLOCATION_CREATE_DONT_BIND_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_32',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fmapped_5fbit_33',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit_34',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5freserved_5f1_5fbit_35',['VMA_ALLOCATION_CREATE_RESERVED_1_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5freserved_5f2_5fbit_36',['VMA_ALLOCATION_CREATE_RESERVED_2_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fbest_5ffit_5fbit_37',['VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5ffirst_5ffit_5fbit_38',['VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmask_39',['VMA_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_40',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_41',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_42',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fworst_5ffit_5fbit_43',['VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit_44',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit_45',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fwithin_5fbudget_5fbit_46',['VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5famd_5fdevice_5fcoherent_5fmemory_5fbit_47',['VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fbuffer_5fdevice_5faddress_5fbit_48',['VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fbudget_5fbit_49',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fpriority_5fbit_50',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit_51',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum_52',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fbind_5fmemory2_5fbit_53',['VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit_54',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
- ['vma_5fbind_5fmemory2_55',['VMA_BIND_MEMORY2',['../vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d',1,'vk_mem_alloc.h']]],
- ['vma_5fbuffer_5fdevice_5faddress_56',['VMA_BUFFER_DEVICE_ADDRESS',['../vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10',1,'vk_mem_alloc.h']]],
- ['vma_5fdedicated_5fallocation_57',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fbits_5fmax_5fenum_58',['VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fincremental_59',['VMA_DEFRAGMENTATION_FLAG_INCREMENTAL',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fbudget_60',['VMA_MEMORY_BUDGET',['../vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fcopy_61',['VMA_MEMORY_USAGE_CPU_COPY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fonly_62',['VMA_MEMORY_USAGE_CPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu_63',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5flazily_5fallocated_64',['VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fonly_65',['VMA_MEMORY_USAGE_GPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu_66',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fmax_5fenum_67',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5funknown_68',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5falgorithm_5fmask_69',['VMA_POOL_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fbuddy_5falgorithm_5fbit_70',['VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum_71',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit_72',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit_73',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
- ['vma_5fstats_5fstring_5fenabled_74',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_75',['VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmask_76',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_77',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_78',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_79',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fupper_5faddress_5fbit_80',['VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5falgorithm_5fmask_81',['VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fbuddy_5falgorithm_5fbit_82',['VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fflag_5fbits_5fmax_5fenum_83',['VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5flinear_5falgorithm_5fbit_84',['VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96',1,'vk_mem_alloc.h']]],
- ['vmaallocatememory_85',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforbuffer_86',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforimage_87',['vmaAllocateMemoryForImage',['../vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
- ['vmaallocatememorypages_88',['vmaAllocateMemoryPages',['../vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1',1,'vk_mem_alloc.h']]],
- ['vmaallocation_89',['VmaAllocation',['../struct_vma_allocation.html',1,'']]],
- ['vmaallocationcreateflagbits_90',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmaallocationcreateflags_91',['VmaAllocationCreateFlags',['../vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
- ['vmaallocationcreateinfo_92',['VmaAllocationCreateInfo',['../struct_vma_allocation_create_info.html',1,'VmaAllocationCreateInfo'],['../vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a',1,'VmaAllocationCreateInfo(): vk_mem_alloc.h']]],
- ['vmaallocationinfo_93',['VmaAllocationInfo',['../struct_vma_allocation_info.html',1,'VmaAllocationInfo'],['../vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50',1,'VmaAllocationInfo(): vk_mem_alloc.h']]],
- ['vmaallocator_94',['VmaAllocator',['../struct_vma_allocator.html',1,'']]],
- ['vmaallocatorcreateflagbits_95',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmaallocatorcreateflags_96',['VmaAllocatorCreateFlags',['../vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateinfo_97',['VmaAllocatorCreateInfo',['../struct_vma_allocator_create_info.html',1,'VmaAllocatorCreateInfo'],['../vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a',1,'VmaAllocatorCreateInfo(): vk_mem_alloc.h']]],
- ['vmaallocatorinfo_98',['VmaAllocatorInfo',['../struct_vma_allocator_info.html',1,'VmaAllocatorInfo'],['../vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c',1,'VmaAllocatorInfo(): vk_mem_alloc.h']]],
- ['vmabegindefragmentationpass_99',['vmaBeginDefragmentationPass',['../vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory_100',['vmaBindBufferMemory',['../vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory2_101',['vmaBindBufferMemory2',['../vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory_102',['vmaBindImageMemory',['../vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory2_103',['vmaBindImageMemory2',['../vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc',1,'vk_mem_alloc.h']]],
- ['vmabudget_104',['VmaBudget',['../struct_vma_budget.html',1,'VmaBudget'],['../vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d',1,'VmaBudget(): vk_mem_alloc.h']]],
- ['vmabuildstatsstring_105',['vmaBuildStatsString',['../vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
- ['vmabuildvirtualblockstatsstring_106',['vmaBuildVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6',1,'vk_mem_alloc.h']]],
- ['vmacalculatestats_107',['vmaCalculateStats',['../vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
- ['vmacalculatevirtualblockstats_108',['vmaCalculateVirtualBlockStats',['../vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a',1,'vk_mem_alloc.h']]],
- ['vmacheckcorruption_109',['vmaCheckCorruption',['../vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
- ['vmacheckpoolcorruption_110',['vmaCheckPoolCorruption',['../vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
- ['vmaclearvirtualblock_111',['vmaClearVirtualBlock',['../vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571',1,'vk_mem_alloc.h']]],
- ['vmacreateallocator_112',['vmaCreateAllocator',['../vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
- ['vmacreatebuffer_113',['vmaCreateBuffer',['../vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
- ['vmacreatebufferwithalignment_114',['vmaCreateBufferWithAlignment',['../vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834',1,'vk_mem_alloc.h']]],
- ['vmacreateimage_115',['vmaCreateImage',['../vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
- ['vmacreatepool_116',['vmaCreatePool',['../vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
- ['vmacreatevirtualblock_117',['vmaCreateVirtualBlock',['../vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b',1,'vk_mem_alloc.h']]],
- ['vmadefragment_118',['vmaDefragment',['../vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationbegin_119',['vmaDefragmentationBegin',['../vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationcontext_120',['VmaDefragmentationContext',['../struct_vma_defragmentation_context.html',1,'']]],
- ['vmadefragmentationend_121',['vmaDefragmentationEnd',['../vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationflagbits_122',['VmaDefragmentationFlagBits',['../vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h']]],
- ['vmadefragmentationflags_123',['VmaDefragmentationFlags',['../vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationinfo_124',['VmaDefragmentationInfo',['../struct_vma_defragmentation_info.html',1,'VmaDefragmentationInfo'],['../vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa',1,'VmaDefragmentationInfo(): vk_mem_alloc.h']]],
- ['vmadefragmentationinfo2_125',['VmaDefragmentationInfo2',['../struct_vma_defragmentation_info2.html',1,'VmaDefragmentationInfo2'],['../vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937',1,'VmaDefragmentationInfo2(): vk_mem_alloc.h']]],
- ['vmadefragmentationpassinfo_126',['VmaDefragmentationPassInfo',['../struct_vma_defragmentation_pass_info.html',1,'VmaDefragmentationPassInfo'],['../vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e',1,'VmaDefragmentationPassInfo(): vk_mem_alloc.h']]],
- ['vmadefragmentationpassmoveinfo_127',['VmaDefragmentationPassMoveInfo',['../struct_vma_defragmentation_pass_move_info.html',1,'VmaDefragmentationPassMoveInfo'],['../vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5',1,'VmaDefragmentationPassMoveInfo(): vk_mem_alloc.h']]],
- ['vmadefragmentationstats_128',['VmaDefragmentationStats',['../struct_vma_defragmentation_stats.html',1,'VmaDefragmentationStats'],['../vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403',1,'VmaDefragmentationStats(): vk_mem_alloc.h']]],
- ['vmadestroyallocator_129',['vmaDestroyAllocator',['../vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
- ['vmadestroybuffer_130',['vmaDestroyBuffer',['../vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
- ['vmadestroyimage_131',['vmaDestroyImage',['../vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
- ['vmadestroypool_132',['vmaDestroyPool',['../vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
- ['vmadestroyvirtualblock_133',['vmaDestroyVirtualBlock',['../vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5',1,'vk_mem_alloc.h']]],
- ['vmadevicememorycallbacks_134',['VmaDeviceMemoryCallbacks',['../struct_vma_device_memory_callbacks.html',1,'VmaDeviceMemoryCallbacks'],['../vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b',1,'VmaDeviceMemoryCallbacks(): vk_mem_alloc.h']]],
- ['vmaenddefragmentationpass_135',['vmaEndDefragmentationPass',['../vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindex_136',['vmaFindMemoryTypeIndex',['../vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforbufferinfo_137',['vmaFindMemoryTypeIndexForBufferInfo',['../vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforimageinfo_138',['vmaFindMemoryTypeIndexForImageInfo',['../vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
- ['vmaflushallocation_139',['vmaFlushAllocation',['../vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f',1,'vk_mem_alloc.h']]],
- ['vmaflushallocations_140',['vmaFlushAllocations',['../vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc',1,'vk_mem_alloc.h']]],
- ['vmafreememory_141',['vmaFreeMemory',['../vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f',1,'vk_mem_alloc.h']]],
- ['vmafreememorypages_142',['vmaFreeMemoryPages',['../vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e',1,'vk_mem_alloc.h']]],
- ['vmafreestatsstring_143',['vmaFreeStatsString',['../vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
- ['vmafreevirtualblockstatsstring_144',['vmaFreeVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623',1,'vk_mem_alloc.h']]],
- ['vmagetallocationinfo_145',['vmaGetAllocationInfo',['../vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
- ['vmagetallocationmemoryproperties_146',['vmaGetAllocationMemoryProperties',['../vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1',1,'vk_mem_alloc.h']]],
- ['vmagetallocatorinfo_147',['vmaGetAllocatorInfo',['../vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7',1,'vk_mem_alloc.h']]],
- ['vmagetheapbudgets_148',['vmaGetHeapBudgets',['../vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7',1,'vk_mem_alloc.h']]],
- ['vmagetmemoryproperties_149',['vmaGetMemoryProperties',['../vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
- ['vmagetmemorytypeproperties_150',['vmaGetMemoryTypeProperties',['../vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
- ['vmagetphysicaldeviceproperties_151',['vmaGetPhysicalDeviceProperties',['../vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
- ['vmagetpoolname_152',['vmaGetPoolName',['../vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030',1,'vk_mem_alloc.h']]],
- ['vmagetpoolstats_153',['vmaGetPoolStats',['../vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
- ['vmagetvirtualallocationinfo_154',['vmaGetVirtualAllocationInfo',['../vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocation_155',['vmaInvalidateAllocation',['../vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocations_156',['vmaInvalidateAllocations',['../vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5',1,'vk_mem_alloc.h']]],
- ['vmaisvirtualblockempty_157',['vmaIsVirtualBlockEmpty',['../vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1',1,'vk_mem_alloc.h']]],
- ['vmamapmemory_158',['vmaMapMemory',['../vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
- ['vmamemoryusage_159',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'VmaMemoryUsage(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a806e8499dde802e59eb72a1dc811c35f',1,'VmaMemoryUsage(): vk_mem_alloc.h']]],
- ['vmapool_160',['VmaPool',['../struct_vma_pool.html',1,'']]],
- ['vmapoolcreateflagbits_161',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmapoolcreateflags_162',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateinfo_163',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67',1,'VmaPoolCreateInfo(): vk_mem_alloc.h']]],
- ['vmapoolstats_164',['VmaPoolStats',['../vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1',1,'VmaPoolStats(): vk_mem_alloc.h'],['../struct_vma_pool_stats.html',1,'VmaPoolStats']]],
- ['vmasetallocationuserdata_165',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
- ['vmasetcurrentframeindex_166',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
- ['vmasetpoolname_167',['vmaSetPoolName',['../vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58',1,'vk_mem_alloc.h']]],
- ['vmasetvirtualallocationuserdata_168',['vmaSetVirtualAllocationUserData',['../vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9',1,'vk_mem_alloc.h']]],
- ['vmastatinfo_169',['VmaStatInfo',['../struct_vma_stat_info.html',1,'VmaStatInfo'],['../vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878',1,'VmaStatInfo(): vk_mem_alloc.h']]],
- ['vmastats_170',['VmaStats',['../struct_vma_stats.html',1,'VmaStats'],['../vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034',1,'VmaStats(): vk_mem_alloc.h']]],
- ['vmaunmapmemory_171',['vmaUnmapMemory',['../vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocate_172',['vmaVirtualAllocate',['../vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflagbits_173',['VmaVirtualAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflags_174',['VmaVirtualAllocationCreateFlags',['../vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateinfo_175',['VmaVirtualAllocationCreateInfo',['../struct_vma_virtual_allocation_create_info.html',1,'VmaVirtualAllocationCreateInfo'],['../vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e',1,'VmaVirtualAllocationCreateInfo(): vk_mem_alloc.h']]],
- ['vmavirtualallocationinfo_176',['VmaVirtualAllocationInfo',['../struct_vma_virtual_allocation_info.html',1,'VmaVirtualAllocationInfo'],['../vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc',1,'VmaVirtualAllocationInfo(): vk_mem_alloc.h']]],
- ['vmavirtualblock_177',['VmaVirtualBlock',['../struct_vma_virtual_block.html',1,'']]],
- ['vmavirtualblockcreateflagbits_178',['VmaVirtualBlockCreateFlagBits',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmavirtualblockcreateflags_179',['VmaVirtualBlockCreateFlags',['../vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateinfo_180',['VmaVirtualBlockCreateInfo',['../struct_vma_virtual_block_create_info.html',1,'VmaVirtualBlockCreateInfo'],['../vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773',1,'VmaVirtualBlockCreateInfo(): vk_mem_alloc.h']]],
- ['vmavirtualfree_181',['vmaVirtualFree',['../vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639',1,'vk_mem_alloc.h']]],
- ['vmavulkanfunctions_182',['VmaVulkanFunctions',['../vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074',1,'VmaVulkanFunctions(): vk_mem_alloc.h'],['../struct_vma_vulkan_functions.html',1,'VmaVulkanFunctions']]],
- ['vulkan_20memory_20allocator_183',['Vulkan Memory Allocator',['../index.html',1,'']]],
- ['vulkanapiversion_184',['vulkanApiVersion',['../struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285',1,'VmaAllocatorCreateInfo']]]
+ ['unusedbytes_0',['unusedBytes',['../struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669',1,'VmaStatInfo']]],
+ ['unusedrangecount_1',['unusedRangeCount',['../struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9',1,'VmaStatInfo::unusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]],
+ ['unusedrangesizeavg_2',['unusedRangeSizeAvg',['../struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc',1,'VmaStatInfo']]],
+ ['unusedrangesizemax_3',['unusedRangeSizeMax',['../struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4',1,'VmaStatInfo']]],
+ ['unusedrangesizemin_4',['unusedRangeSizeMin',['../struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4',1,'VmaStatInfo']]],
+ ['unusedsize_5',['unusedSize',['../struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8',1,'VmaPoolStats']]],
+ ['usage_6',['usage',['../struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6',1,'VmaBudget::usage()'],['../struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910',1,'VmaAllocationCreateInfo::usage()']]],
+ ['usedbytes_7',['usedBytes',['../struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a',1,'VmaStatInfo']]]
];
diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js
index ddd0a12..3455909 100644
--- a/docs/html/search/all_11.js
+++ b/docs/html/search/all_11.js
@@ -1,197 +1,192 @@
var searchData=
[
- ['virtual_20allocator_0',['Virtual allocator',['../virtual_allocator.html',1,'index']]],
+ ['virtual_20allocator_0',['Virtual allocator',['../group__group__virtual.html',1,'(Global Namespace)'],['../virtual_allocator.html',1,'index']]],
['vk_5famd_5fdevice_5fcoherent_5fmemory_1',['VK_AMD_device_coherent_memory',['../vk_amd_device_coherent_memory.html',1,'index']]],
- ['vk_5ferror_5funknown_2',['VK_ERROR_UNKNOWN',['../vk__mem__alloc_8h.html#a162894cbe84f7d76632eb9af1e4b3558',1,'vk_mem_alloc.h']]],
- ['vk_5fkhr_5fdedicated_5fallocation_3',['VK_KHR_dedicated_allocation',['../vk_khr_dedicated_allocation.html',1,'index']]],
- ['vk_5fmem_5falloc_2eh_4',['vk_mem_alloc.h',['../vk__mem__alloc_8h.html',1,'']]],
- ['vkallocatememory_5',['vkAllocateMemory',['../struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c',1,'VmaVulkanFunctions']]],
- ['vkbindbuffermemory_6',['vkBindBufferMemory',['../struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2',1,'VmaVulkanFunctions']]],
- ['vkbindbuffermemory2khr_7',['vkBindBufferMemory2KHR',['../struct_vma_vulkan_functions.html#a0c4907235aab9df2767b79836afa2dc9',1,'VmaVulkanFunctions']]],
- ['vkbindimagememory_8',['vkBindImageMemory',['../struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637',1,'VmaVulkanFunctions']]],
- ['vkbindimagememory2khr_9',['vkBindImageMemory2KHR',['../struct_vma_vulkan_functions.html#ab95aaa73ab8a3fe9fd3daaaec4e0b2bf',1,'VmaVulkanFunctions']]],
- ['vkcmdcopybuffer_10',['vkCmdCopyBuffer',['../struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a',1,'VmaVulkanFunctions']]],
- ['vkcreatebuffer_11',['vkCreateBuffer',['../struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f',1,'VmaVulkanFunctions']]],
- ['vkcreateimage_12',['vkCreateImage',['../struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325',1,'VmaVulkanFunctions']]],
- ['vkdestroybuffer_13',['vkDestroyBuffer',['../struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45',1,'VmaVulkanFunctions']]],
- ['vkdestroyimage_14',['vkDestroyImage',['../struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa',1,'VmaVulkanFunctions']]],
- ['vkflushmappedmemoryranges_15',['vkFlushMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9',1,'VmaVulkanFunctions']]],
- ['vkfreememory_16',['vkFreeMemory',['../struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4',1,'VmaVulkanFunctions']]],
- ['vkgetbuffermemoryrequirements_17',['vkGetBufferMemoryRequirements',['../struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143',1,'VmaVulkanFunctions']]],
- ['vkgetbuffermemoryrequirements2khr_18',['vkGetBufferMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9d8d1b05d2b1e7e1d9b27f6f585acf9c',1,'VmaVulkanFunctions']]],
- ['vkgetdeviceprocaddr_19',['vkGetDeviceProcAddr',['../struct_vma_vulkan_functions.html#ac383ab9af127e5e136622fa4ebea9e57',1,'VmaVulkanFunctions']]],
- ['vkgetimagememoryrequirements_20',['vkGetImageMemoryRequirements',['../struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4',1,'VmaVulkanFunctions']]],
- ['vkgetimagememoryrequirements2khr_21',['vkGetImageMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9cdcdc1e2b2ea7c571f7d27e30ba6875',1,'VmaVulkanFunctions']]],
- ['vkgetinstanceprocaddr_22',['vkGetInstanceProcAddr',['../struct_vma_vulkan_functions.html#a3eafa102f5f8915f093f40675636b849',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldevicememoryproperties_23',['vkGetPhysicalDeviceMemoryProperties',['../struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldevicememoryproperties2khr_24',['vkGetPhysicalDeviceMemoryProperties2KHR',['../struct_vma_vulkan_functions.html#a0d992896e6ffcf92b9d7ea049fa5c445',1,'VmaVulkanFunctions']]],
- ['vkgetphysicaldeviceproperties_25',['vkGetPhysicalDeviceProperties',['../struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96',1,'VmaVulkanFunctions']]],
- ['vkinvalidatemappedmemoryranges_26',['vkInvalidateMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1',1,'VmaVulkanFunctions']]],
- ['vkmapmemory_27',['vkMapMemory',['../struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49',1,'VmaVulkanFunctions']]],
- ['vkunmapmemory_28',['vkUnmapMemory',['../struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9',1,'VmaVulkanFunctions']]],
- ['vma_5fallocation_5fcreate_5fcan_5falias_5fbit_29',['VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fcan_5fbecome_5flost_5fbit_30',['VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a5f436af6c8fe8540573a6d22627a6fd2',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fcan_5fmake_5fother_5flost_5fbit_31',['VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a68686d0ce9beb0d4d1b9f2b8b1389a7e',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit_32',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdont_5fbind_5fbit_33',['VMA_ALLOCATION_CREATE_DONT_BIND_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_34',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fmapped_5fbit_35',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit_36',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fbest_5ffit_5fbit_37',['VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5ffirst_5ffit_5fbit_38',['VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmask_39',['VMA_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_40',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_41',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_42',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fworst_5ffit_5fbit_43',['VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit_44',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit_45',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fwithin_5fbudget_5fbit_46',['VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5famd_5fdevice_5fcoherent_5fmemory_5fbit_47',['VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fbuffer_5fdevice_5faddress_5fbit_48',['VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fbudget_5fbit_49',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fpriority_5fbit_50',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit_51',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum_52',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fbind_5fmemory2_5fbit_53',['VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit_54',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
- ['vma_5fbind_5fmemory2_55',['VMA_BIND_MEMORY2',['../vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d',1,'vk_mem_alloc.h']]],
- ['vma_5fbuffer_5fdevice_5faddress_56',['VMA_BUFFER_DEVICE_ADDRESS',['../vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10',1,'vk_mem_alloc.h']]],
- ['vma_5fdedicated_5fallocation_57',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fbits_5fmax_5fenum_58',['VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fincremental_59',['VMA_DEFRAGMENTATION_FLAG_INCREMENTAL',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fbudget_60',['VMA_MEMORY_BUDGET',['../vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fcopy_61',['VMA_MEMORY_USAGE_CPU_COPY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fonly_62',['VMA_MEMORY_USAGE_CPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu_63',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5flazily_5fallocated_64',['VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fonly_65',['VMA_MEMORY_USAGE_GPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu_66',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fmax_5fenum_67',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5funknown_68',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5falgorithm_5fmask_69',['VMA_POOL_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fbuddy_5falgorithm_5fbit_70',['VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum_71',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit_72',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit_73',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
- ['vma_5frecord_5fflag_5fbits_5fmax_5fenum_74',['VMA_RECORD_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a20dd17d69966dbffa054739d6090b85e',1,'vk_mem_alloc.h']]],
- ['vma_5frecord_5fflush_5fafter_5fcall_5fbit_75',['VMA_RECORD_FLUSH_AFTER_CALL_BIT',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2a8e7ab322e8732654be627c4ea8f36cc7',1,'vk_mem_alloc.h']]],
- ['vma_5frecording_5fenabled_76',['VMA_RECORDING_ENABLED',['../vk__mem__alloc_8h.html#a1f0c126759fc96ccb6e2d23c101d770c',1,'vk_mem_alloc.h']]],
- ['vma_5fstats_5fstring_5fenabled_77',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_78',['VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmask_79',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_80',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_81',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_82',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fupper_5faddress_5fbit_83',['VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5falgorithm_5fmask_84',['VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fbuddy_5falgorithm_5fbit_85',['VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fflag_5fbits_5fmax_5fenum_86',['VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5flinear_5falgorithm_5fbit_87',['VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96',1,'vk_mem_alloc.h']]],
- ['vmaallocatememory_88',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforbuffer_89',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforimage_90',['vmaAllocateMemoryForImage',['../vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
- ['vmaallocatememorypages_91',['vmaAllocateMemoryPages',['../vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1',1,'vk_mem_alloc.h']]],
+ ['vk_5fdefine_5fnon_5fdispatchable_5fhandle_2',['VK_DEFINE_NON_DISPATCHABLE_HANDLE',['../group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676',1,'vk_mem_alloc.h']]],
+ ['vk_5ferror_5funknown_3',['VK_ERROR_UNKNOWN',['../vk__mem__alloc_8h.html#a162894cbe84f7d76632eb9af1e4b3558',1,'vk_mem_alloc.h']]],
+ ['vk_5fkhr_5fdedicated_5fallocation_4',['VK_KHR_dedicated_allocation',['../vk_khr_dedicated_allocation.html',1,'index']]],
+ ['vk_5fmem_5falloc_2eh_5',['vk_mem_alloc.h',['../vk__mem__alloc_8h.html',1,'']]],
+ ['vkallocatememory_6',['vkAllocateMemory',['../struct_vma_vulkan_functions.html#a2943bf99dfd784a0e8f599d987e22e6c',1,'VmaVulkanFunctions']]],
+ ['vkbindbuffermemory_7',['vkBindBufferMemory',['../struct_vma_vulkan_functions.html#a94fc4f3a605d9880bb3c0ba2c2fc80b2',1,'VmaVulkanFunctions']]],
+ ['vkbindbuffermemory2khr_8',['vkBindBufferMemory2KHR',['../struct_vma_vulkan_functions.html#a0c4907235aab9df2767b79836afa2dc9',1,'VmaVulkanFunctions']]],
+ ['vkbindimagememory_9',['vkBindImageMemory',['../struct_vma_vulkan_functions.html#a1338d96a128a5ade648b8d934907c637',1,'VmaVulkanFunctions']]],
+ ['vkbindimagememory2khr_10',['vkBindImageMemory2KHR',['../struct_vma_vulkan_functions.html#ab95aaa73ab8a3fe9fd3daaaec4e0b2bf',1,'VmaVulkanFunctions']]],
+ ['vkcmdcopybuffer_11',['vkCmdCopyBuffer',['../struct_vma_vulkan_functions.html#ae5c0db8c89a3b82593dc16aa6a49fa3a',1,'VmaVulkanFunctions']]],
+ ['vkcreatebuffer_12',['vkCreateBuffer',['../struct_vma_vulkan_functions.html#ae8084315a25006271a2edfc3a447519f',1,'VmaVulkanFunctions']]],
+ ['vkcreateimage_13',['vkCreateImage',['../struct_vma_vulkan_functions.html#a23ebe70be515b9b5010a1d691200e325',1,'VmaVulkanFunctions']]],
+ ['vkdestroybuffer_14',['vkDestroyBuffer',['../struct_vma_vulkan_functions.html#a7e054606faddb07f0e8556f3ed317d45',1,'VmaVulkanFunctions']]],
+ ['vkdestroyimage_15',['vkDestroyImage',['../struct_vma_vulkan_functions.html#a90b898227039b1dcb3520f6e91f09ffa',1,'VmaVulkanFunctions']]],
+ ['vkflushmappedmemoryranges_16',['vkFlushMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a33c322f4c4ad2810f8a9c97a277572f9',1,'VmaVulkanFunctions']]],
+ ['vkfreememory_17',['vkFreeMemory',['../struct_vma_vulkan_functions.html#a4c658701778564d62034255b5dda91b4',1,'VmaVulkanFunctions']]],
+ ['vkgetbuffermemoryrequirements_18',['vkGetBufferMemoryRequirements',['../struct_vma_vulkan_functions.html#a5b92901df89a4194b0d12f6071d4d143',1,'VmaVulkanFunctions']]],
+ ['vkgetbuffermemoryrequirements2khr_19',['vkGetBufferMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9d8d1b05d2b1e7e1d9b27f6f585acf9c',1,'VmaVulkanFunctions']]],
+ ['vkgetdeviceprocaddr_20',['vkGetDeviceProcAddr',['../struct_vma_vulkan_functions.html#ac383ab9af127e5e136622fa4ebea9e57',1,'VmaVulkanFunctions']]],
+ ['vkgetimagememoryrequirements_21',['vkGetImageMemoryRequirements',['../struct_vma_vulkan_functions.html#a475f6f49f8debe4d10800592606d53f4',1,'VmaVulkanFunctions']]],
+ ['vkgetimagememoryrequirements2khr_22',['vkGetImageMemoryRequirements2KHR',['../struct_vma_vulkan_functions.html#a9cdcdc1e2b2ea7c571f7d27e30ba6875',1,'VmaVulkanFunctions']]],
+ ['vkgetinstanceprocaddr_23',['vkGetInstanceProcAddr',['../struct_vma_vulkan_functions.html#a3eafa102f5f8915f093f40675636b849',1,'VmaVulkanFunctions']]],
+ ['vkgetphysicaldevicememoryproperties_24',['vkGetPhysicalDeviceMemoryProperties',['../struct_vma_vulkan_functions.html#a60d25c33bba06bb8592e6875cbaa9830',1,'VmaVulkanFunctions']]],
+ ['vkgetphysicaldevicememoryproperties2khr_25',['vkGetPhysicalDeviceMemoryProperties2KHR',['../struct_vma_vulkan_functions.html#a0d992896e6ffcf92b9d7ea049fa5c445',1,'VmaVulkanFunctions']]],
+ ['vkgetphysicaldeviceproperties_26',['vkGetPhysicalDeviceProperties',['../struct_vma_vulkan_functions.html#a77b7a74082823e865dd6546623468f96',1,'VmaVulkanFunctions']]],
+ ['vkinvalidatemappedmemoryranges_27',['vkInvalidateMappedMemoryRanges',['../struct_vma_vulkan_functions.html#a5c1093bc32386a8060c37c9f282078a1',1,'VmaVulkanFunctions']]],
+ ['vkmapmemory_28',['vkMapMemory',['../struct_vma_vulkan_functions.html#ab5c1f38dea3a2cf00dc9eb4f57218c49',1,'VmaVulkanFunctions']]],
+ ['vkunmapmemory_29',['vkUnmapMemory',['../struct_vma_vulkan_functions.html#acc798589736f0becb317fc2196c1d8b9',1,'VmaVulkanFunctions']]],
+ ['vma_5fallocation_5fcreate_5fcan_5falias_5fbit_30',['VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit_31',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fdont_5fbind_5fbit_32',['VMA_ALLOCATION_CREATE_DONT_BIND_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_33',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fmapped_5fbit_34',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit_35',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5freserved_5f1_5fbit_36',['VMA_ALLOCATION_CREATE_RESERVED_1_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5freserved_5f2_5fbit_37',['VMA_ALLOCATION_CREATE_RESERVED_2_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fbest_5ffit_5fbit_38',['VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5ffirst_5ffit_5fbit_39',['VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmask_40',['VMA_ALLOCATION_CREATE_STRATEGY_MASK',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_41',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_42',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_43',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fworst_5ffit_5fbit_44',['VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit_45',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit_46',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fwithin_5fbudget_5fbit_47',['VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5famd_5fdevice_5fcoherent_5fmemory_5fbit_48',['VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fbuffer_5fdevice_5faddress_5fbit_49',['VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fext_5fmemory_5fbudget_5fbit_50',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fext_5fmemory_5fpriority_5fbit_51',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit_52',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum_53',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fkhr_5fbind_5fmemory2_5fbit_54',['VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit_55',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
+ ['vma_5fbind_5fmemory2_56',['VMA_BIND_MEMORY2',['../vk__mem__alloc_8h.html#a88bef97f86d70a34a4c0746e09a2680d',1,'vk_mem_alloc.h']]],
+ ['vma_5fbuffer_5fdevice_5faddress_57',['VMA_BUFFER_DEVICE_ADDRESS',['../vk__mem__alloc_8h.html#a7f9d5e71b70dd1a137c303a8a8262c10',1,'vk_mem_alloc.h']]],
+ ['vma_5fdedicated_5fallocation_58',['VMA_DEDICATED_ALLOCATION',['../vk__mem__alloc_8h.html#af7b860e63b96d11e44ae8587ba06bbf4',1,'vk_mem_alloc.h']]],
+ ['vma_5fdefragmentation_5fflag_5fbits_5fmax_5fenum_59',['VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97',1,'vk_mem_alloc.h']]],
+ ['vma_5fdefragmentation_5fflag_5fincremental_60',['VMA_DEFRAGMENTATION_FLAG_INCREMENTAL',['../group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fbudget_61',['VMA_MEMORY_BUDGET',['../vk__mem__alloc_8h.html#a05decf1cf4ebf767beba7acca6c1ec3a',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fcopy_62',['VMA_MEMORY_USAGE_CPU_COPY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fonly_63',['VMA_MEMORY_USAGE_CPU_ONLY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu_64',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5flazily_5fallocated_65',['VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5fonly_66',['VMA_MEMORY_USAGE_GPU_ONLY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu_67',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fmax_5fenum_68',['VMA_MEMORY_USAGE_MAX_ENUM',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5funknown_69',['VMA_MEMORY_USAGE_UNKNOWN',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5falgorithm_5fmask_70',['VMA_POOL_CREATE_ALGORITHM_MASK',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fbuddy_5falgorithm_5fbit_71',['VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum_72',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit_73',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit_74',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5ftlsf_5falgorithm_5fbit_75',['VMA_POOL_CREATE_TLSF_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32',1,'vk_mem_alloc.h']]],
+ ['vma_5fstats_5fstring_5fenabled_76',['VMA_STATS_STRING_ENABLED',['../vk__mem__alloc_8h.html#ae25f0d55fd91cb166f002b63244800e1',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_77',['VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmask_78',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_79',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_80',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_81',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fupper_5faddress_5fbit_82',['VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5falgorithm_5fmask_83',['VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5fbuddy_5falgorithm_5fbit_84',['VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5fflag_5fbits_5fmax_5fenum_85',['VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5flinear_5falgorithm_5fbit_86',['VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5ftlsf_5falgorithm_5fbit_87',['VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememory_88',['vmaAllocateMemory',['../group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememoryforbuffer_89',['vmaAllocateMemoryForBuffer',['../group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememoryforimage_90',['vmaAllocateMemoryForImage',['../group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememorypages_91',['vmaAllocateMemoryPages',['../group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1',1,'vk_mem_alloc.h']]],
['vmaallocation_92',['VmaAllocation',['../struct_vma_allocation.html',1,'']]],
- ['vmaallocationcreateflagbits_93',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmaallocationcreateflags_94',['VmaAllocationCreateFlags',['../vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
- ['vmaallocationcreateinfo_95',['VmaAllocationCreateInfo',['../struct_vma_allocation_create_info.html',1,'VmaAllocationCreateInfo'],['../vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a',1,'VmaAllocationCreateInfo(): vk_mem_alloc.h']]],
- ['vmaallocationinfo_96',['VmaAllocationInfo',['../struct_vma_allocation_info.html',1,'VmaAllocationInfo'],['../vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50',1,'VmaAllocationInfo(): vk_mem_alloc.h']]],
+ ['vmaallocationcreateflagbits_93',['VmaAllocationCreateFlagBits',['../group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h'],['../group__group__alloc.html#gad9889c10c798b040d59c92f257cae597',1,'VmaAllocationCreateFlagBits(): vk_mem_alloc.h']]],
+ ['vmaallocationcreateflags_94',['VmaAllocationCreateFlags',['../group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
+ ['vmaallocationcreateinfo_95',['VmaAllocationCreateInfo',['../struct_vma_allocation_create_info.html',1,'VmaAllocationCreateInfo'],['../group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a',1,'VmaAllocationCreateInfo(): vk_mem_alloc.h']]],
+ ['vmaallocationinfo_96',['VmaAllocationInfo',['../struct_vma_allocation_info.html',1,'VmaAllocationInfo'],['../group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50',1,'VmaAllocationInfo(): vk_mem_alloc.h']]],
['vmaallocator_97',['VmaAllocator',['../struct_vma_allocator.html',1,'']]],
- ['vmaallocatorcreateflagbits_98',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmaallocatorcreateflags_99',['VmaAllocatorCreateFlags',['../vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateinfo_100',['VmaAllocatorCreateInfo',['../struct_vma_allocator_create_info.html',1,'VmaAllocatorCreateInfo'],['../vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a',1,'VmaAllocatorCreateInfo(): vk_mem_alloc.h']]],
- ['vmaallocatorinfo_101',['VmaAllocatorInfo',['../struct_vma_allocator_info.html',1,'VmaAllocatorInfo'],['../vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c',1,'VmaAllocatorInfo(): vk_mem_alloc.h']]],
- ['vmabegindefragmentationpass_102',['vmaBeginDefragmentationPass',['../vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory_103',['vmaBindBufferMemory',['../vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory2_104',['vmaBindBufferMemory2',['../vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory_105',['vmaBindImageMemory',['../vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory2_106',['vmaBindImageMemory2',['../vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc',1,'vk_mem_alloc.h']]],
- ['vmabudget_107',['VmaBudget',['../struct_vma_budget.html',1,'VmaBudget'],['../vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d',1,'VmaBudget(): vk_mem_alloc.h']]],
- ['vmabuildstatsstring_108',['vmaBuildStatsString',['../vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
- ['vmabuildvirtualblockstatsstring_109',['vmaBuildVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6',1,'vk_mem_alloc.h']]],
- ['vmacalculatestats_110',['vmaCalculateStats',['../vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
- ['vmacalculatevirtualblockstats_111',['vmaCalculateVirtualBlockStats',['../vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a',1,'vk_mem_alloc.h']]],
- ['vmacheckcorruption_112',['vmaCheckCorruption',['../vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
- ['vmacheckpoolcorruption_113',['vmaCheckPoolCorruption',['../vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
- ['vmaclearvirtualblock_114',['vmaClearVirtualBlock',['../vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571',1,'vk_mem_alloc.h']]],
- ['vmacreateallocator_115',['vmaCreateAllocator',['../vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
- ['vmacreatebuffer_116',['vmaCreateBuffer',['../vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
- ['vmacreatebufferwithalignment_117',['vmaCreateBufferWithAlignment',['../vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834',1,'vk_mem_alloc.h']]],
- ['vmacreateimage_118',['vmaCreateImage',['../vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
- ['vmacreatelostallocation_119',['vmaCreateLostAllocation',['../vk__mem__alloc_8h.html#ae5c9657d9e94756269145b01c05d16f1',1,'vk_mem_alloc.h']]],
- ['vmacreatepool_120',['vmaCreatePool',['../vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
- ['vmacreatevirtualblock_121',['vmaCreateVirtualBlock',['../vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b',1,'vk_mem_alloc.h']]],
- ['vmadefragment_122',['vmaDefragment',['../vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationbegin_123',['vmaDefragmentationBegin',['../vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationcontext_124',['VmaDefragmentationContext',['../struct_vma_defragmentation_context.html',1,'']]],
- ['vmadefragmentationend_125',['vmaDefragmentationEnd',['../vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationflagbits_126',['VmaDefragmentationFlagBits',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h']]],
- ['vmadefragmentationflags_127',['VmaDefragmentationFlags',['../vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationinfo_128',['VmaDefragmentationInfo',['../struct_vma_defragmentation_info.html',1,'VmaDefragmentationInfo'],['../vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa',1,'VmaDefragmentationInfo(): vk_mem_alloc.h']]],
- ['vmadefragmentationinfo2_129',['VmaDefragmentationInfo2',['../struct_vma_defragmentation_info2.html',1,'VmaDefragmentationInfo2'],['../vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937',1,'VmaDefragmentationInfo2(): vk_mem_alloc.h']]],
- ['vmadefragmentationpassinfo_130',['VmaDefragmentationPassInfo',['../vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e',1,'VmaDefragmentationPassInfo(): vk_mem_alloc.h'],['../struct_vma_defragmentation_pass_info.html',1,'VmaDefragmentationPassInfo']]],
- ['vmadefragmentationpassmoveinfo_131',['VmaDefragmentationPassMoveInfo',['../struct_vma_defragmentation_pass_move_info.html',1,'VmaDefragmentationPassMoveInfo'],['../vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5',1,'VmaDefragmentationPassMoveInfo(): vk_mem_alloc.h']]],
- ['vmadefragmentationstats_132',['VmaDefragmentationStats',['../struct_vma_defragmentation_stats.html',1,'VmaDefragmentationStats'],['../vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403',1,'VmaDefragmentationStats(): vk_mem_alloc.h']]],
- ['vmadestroyallocator_133',['vmaDestroyAllocator',['../vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
- ['vmadestroybuffer_134',['vmaDestroyBuffer',['../vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
- ['vmadestroyimage_135',['vmaDestroyImage',['../vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
- ['vmadestroypool_136',['vmaDestroyPool',['../vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
- ['vmadestroyvirtualblock_137',['vmaDestroyVirtualBlock',['../vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5',1,'vk_mem_alloc.h']]],
- ['vmadevicememorycallbacks_138',['VmaDeviceMemoryCallbacks',['../struct_vma_device_memory_callbacks.html',1,'VmaDeviceMemoryCallbacks'],['../vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b',1,'VmaDeviceMemoryCallbacks(): vk_mem_alloc.h']]],
- ['vmaenddefragmentationpass_139',['vmaEndDefragmentationPass',['../vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindex_140',['vmaFindMemoryTypeIndex',['../vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforbufferinfo_141',['vmaFindMemoryTypeIndexForBufferInfo',['../vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforimageinfo_142',['vmaFindMemoryTypeIndexForImageInfo',['../vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
- ['vmaflushallocation_143',['vmaFlushAllocation',['../vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f',1,'vk_mem_alloc.h']]],
- ['vmaflushallocations_144',['vmaFlushAllocations',['../vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc',1,'vk_mem_alloc.h']]],
- ['vmafreememory_145',['vmaFreeMemory',['../vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f',1,'vk_mem_alloc.h']]],
- ['vmafreememorypages_146',['vmaFreeMemoryPages',['../vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e',1,'vk_mem_alloc.h']]],
- ['vmafreestatsstring_147',['vmaFreeStatsString',['../vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
- ['vmafreevirtualblockstatsstring_148',['vmaFreeVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623',1,'vk_mem_alloc.h']]],
- ['vmagetallocationinfo_149',['vmaGetAllocationInfo',['../vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
- ['vmagetallocationmemoryproperties_150',['vmaGetAllocationMemoryProperties',['../vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1',1,'vk_mem_alloc.h']]],
- ['vmagetallocatorinfo_151',['vmaGetAllocatorInfo',['../vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7',1,'vk_mem_alloc.h']]],
- ['vmagetheapbudgets_152',['vmaGetHeapBudgets',['../vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7',1,'vk_mem_alloc.h']]],
- ['vmagetmemoryproperties_153',['vmaGetMemoryProperties',['../vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
- ['vmagetmemorytypeproperties_154',['vmaGetMemoryTypeProperties',['../vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
- ['vmagetphysicaldeviceproperties_155',['vmaGetPhysicalDeviceProperties',['../vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
- ['vmagetpoolname_156',['vmaGetPoolName',['../vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030',1,'vk_mem_alloc.h']]],
- ['vmagetpoolstats_157',['vmaGetPoolStats',['../vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
- ['vmagetvirtualallocationinfo_158',['vmaGetVirtualAllocationInfo',['../vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocation_159',['vmaInvalidateAllocation',['../vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocations_160',['vmaInvalidateAllocations',['../vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5',1,'vk_mem_alloc.h']]],
- ['vmaisvirtualblockempty_161',['vmaIsVirtualBlockEmpty',['../vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1',1,'vk_mem_alloc.h']]],
- ['vmamakepoolallocationslost_162',['vmaMakePoolAllocationsLost',['../vk__mem__alloc_8h.html#a736bd6cbda886f36c891727e73bd4024',1,'vk_mem_alloc.h']]],
- ['vmamapmemory_163',['vmaMapMemory',['../vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
- ['vmamemoryusage_164',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'VmaMemoryUsage(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a806e8499dde802e59eb72a1dc811c35f',1,'VmaMemoryUsage(): vk_mem_alloc.h']]],
- ['vmapool_165',['VmaPool',['../struct_vma_pool.html',1,'']]],
- ['vmapoolcreateflagbits_166',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmapoolcreateflags_167',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateinfo_168',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67',1,'VmaPoolCreateInfo(): vk_mem_alloc.h']]],
- ['vmapoolstats_169',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'VmaPoolStats'],['../vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1',1,'VmaPoolStats(): vk_mem_alloc.h']]],
- ['vmarecordflagbits_170',['VmaRecordFlagBits',['../vk__mem__alloc_8h.html#a4dd2c44642312a147a4e93373a6e64d2',1,'VmaRecordFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#acd24d5eb58abff7e1f43cb32a1ba1413',1,'VmaRecordFlagBits(): vk_mem_alloc.h']]],
- ['vmarecordflags_171',['VmaRecordFlags',['../vk__mem__alloc_8h.html#af3929a1a4547c592fc0b0e55ef452828',1,'vk_mem_alloc.h']]],
- ['vmarecordsettings_172',['VmaRecordSettings',['../vk__mem__alloc_8h.html#a16e21c877101493fce582664cd8754fc',1,'VmaRecordSettings(): vk_mem_alloc.h'],['../struct_vma_record_settings.html',1,'VmaRecordSettings']]],
- ['vmasetallocationuserdata_173',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
- ['vmasetcurrentframeindex_174',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
- ['vmasetpoolname_175',['vmaSetPoolName',['../vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58',1,'vk_mem_alloc.h']]],
- ['vmasetvirtualallocationuserdata_176',['vmaSetVirtualAllocationUserData',['../vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9',1,'vk_mem_alloc.h']]],
- ['vmastatinfo_177',['VmaStatInfo',['../struct_vma_stat_info.html',1,'VmaStatInfo'],['../vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878',1,'VmaStatInfo(): vk_mem_alloc.h']]],
- ['vmastats_178',['VmaStats',['../struct_vma_stats.html',1,'VmaStats'],['../vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034',1,'VmaStats(): vk_mem_alloc.h']]],
- ['vmatouchallocation_179',['vmaTouchAllocation',['../vk__mem__alloc_8h.html#a43d8ba9673c846f049089a5029d5c73a',1,'vk_mem_alloc.h']]],
- ['vmaunmapmemory_180',['vmaUnmapMemory',['../vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocate_181',['vmaVirtualAllocate',['../vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflagbits_182',['VmaVirtualAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflags_183',['VmaVirtualAllocationCreateFlags',['../vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateinfo_184',['VmaVirtualAllocationCreateInfo',['../vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e',1,'VmaVirtualAllocationCreateInfo(): vk_mem_alloc.h'],['../struct_vma_virtual_allocation_create_info.html',1,'VmaVirtualAllocationCreateInfo']]],
- ['vmavirtualallocationinfo_185',['VmaVirtualAllocationInfo',['../struct_vma_virtual_allocation_info.html',1,'VmaVirtualAllocationInfo'],['../vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc',1,'VmaVirtualAllocationInfo(): vk_mem_alloc.h']]],
- ['vmavirtualblock_186',['VmaVirtualBlock',['../struct_vma_virtual_block.html',1,'']]],
- ['vmavirtualblockcreateflagbits_187',['VmaVirtualBlockCreateFlagBits',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h'],['../vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h']]],
- ['vmavirtualblockcreateflags_188',['VmaVirtualBlockCreateFlags',['../vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateinfo_189',['VmaVirtualBlockCreateInfo',['../struct_vma_virtual_block_create_info.html',1,'VmaVirtualBlockCreateInfo'],['../vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773',1,'VmaVirtualBlockCreateInfo(): vk_mem_alloc.h']]],
- ['vmavirtualfree_190',['vmaVirtualFree',['../vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639',1,'vk_mem_alloc.h']]],
- ['vmavulkanfunctions_191',['VmaVulkanFunctions',['../vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074',1,'VmaVulkanFunctions(): vk_mem_alloc.h'],['../struct_vma_vulkan_functions.html',1,'VmaVulkanFunctions']]],
- ['vulkan_20memory_20allocator_192',['Vulkan Memory Allocator',['../index.html',1,'']]],
- ['vulkanapiversion_193',['vulkanApiVersion',['../struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285',1,'VmaAllocatorCreateInfo']]]
+ ['vmaallocatorcreateflagbits_98',['VmaAllocatorCreateFlagBits',['../group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h'],['../group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c',1,'VmaAllocatorCreateFlagBits(): vk_mem_alloc.h']]],
+ ['vmaallocatorcreateflags_99',['VmaAllocatorCreateFlags',['../group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorcreateinfo_100',['VmaAllocatorCreateInfo',['../struct_vma_allocator_create_info.html',1,'VmaAllocatorCreateInfo'],['../group__group__init.html#gaad9652301d33759b83e52d4f3605a14a',1,'VmaAllocatorCreateInfo(): vk_mem_alloc.h']]],
+ ['vmaallocatorinfo_101',['VmaAllocatorInfo',['../struct_vma_allocator_info.html',1,'VmaAllocatorInfo'],['../group__group__init.html#ga1988031b0223fdbd564250fa1edd942c',1,'VmaAllocatorInfo(): vk_mem_alloc.h']]],
+ ['vmabegindefragmentationpass_102',['vmaBeginDefragmentationPass',['../group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b',1,'vk_mem_alloc.h']]],
+ ['vmabindbuffermemory_103',['vmaBindBufferMemory',['../group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
+ ['vmabindbuffermemory2_104',['vmaBindBufferMemory2',['../group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a',1,'vk_mem_alloc.h']]],
+ ['vmabindimagememory_105',['vmaBindImageMemory',['../group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
+ ['vmabindimagememory2_106',['vmaBindImageMemory2',['../group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc',1,'vk_mem_alloc.h']]],
+ ['vmabudget_107',['VmaBudget',['../struct_vma_budget.html',1,'VmaBudget'],['../group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d',1,'VmaBudget(): vk_mem_alloc.h']]],
+ ['vmabuildstatsstring_108',['vmaBuildStatsString',['../group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
+ ['vmabuildvirtualblockstatsstring_109',['vmaBuildVirtualBlockStatsString',['../group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6',1,'vk_mem_alloc.h']]],
+ ['vmacalculatestats_110',['vmaCalculateStats',['../group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
+ ['vmacalculatevirtualblockstats_111',['vmaCalculateVirtualBlockStats',['../group__group__virtual.html#ga95169b4730e94757897470086ec2768a',1,'vk_mem_alloc.h']]],
+ ['vmacheckcorruption_112',['vmaCheckCorruption',['../group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
+ ['vmacheckpoolcorruption_113',['vmaCheckPoolCorruption',['../group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
+ ['vmaclearvirtualblock_114',['vmaClearVirtualBlock',['../group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571',1,'vk_mem_alloc.h']]],
+ ['vmacreateallocator_115',['vmaCreateAllocator',['../group__group__init.html#ga200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
+ ['vmacreatebuffer_116',['vmaCreateBuffer',['../group__group__alloc.html#gac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
+ ['vmacreatebufferwithalignment_117',['vmaCreateBufferWithAlignment',['../group__group__alloc.html#gaa06a690013a0d01e60894ac378083834',1,'vk_mem_alloc.h']]],
+ ['vmacreateimage_118',['vmaCreateImage',['../group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
+ ['vmacreatepool_119',['vmaCreatePool',['../group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
+ ['vmacreatevirtualblock_120',['vmaCreateVirtualBlock',['../group__group__virtual.html#gab585754076877265fdae33e5c40ef13b',1,'vk_mem_alloc.h']]],
+ ['vmadefragment_121',['vmaDefragment',['../group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationbegin_122',['vmaDefragmentationBegin',['../group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationcontext_123',['VmaDefragmentationContext',['../struct_vma_defragmentation_context.html',1,'']]],
+ ['vmadefragmentationend_124',['vmaDefragmentationEnd',['../group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationflagbits_125',['VmaDefragmentationFlagBits',['../group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h'],['../group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c',1,'VmaDefragmentationFlagBits(): vk_mem_alloc.h']]],
+ ['vmadefragmentationflags_126',['VmaDefragmentationFlags',['../group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationinfo_127',['VmaDefragmentationInfo',['../struct_vma_defragmentation_info.html',1,'VmaDefragmentationInfo'],['../group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa',1,'VmaDefragmentationInfo(): vk_mem_alloc.h']]],
+ ['vmadefragmentationinfo2_128',['VmaDefragmentationInfo2',['../struct_vma_defragmentation_info2.html',1,'VmaDefragmentationInfo2'],['../group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937',1,'VmaDefragmentationInfo2(): vk_mem_alloc.h']]],
+ ['vmadefragmentationpassinfo_129',['VmaDefragmentationPassInfo',['../struct_vma_defragmentation_pass_info.html',1,'VmaDefragmentationPassInfo'],['../group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e',1,'VmaDefragmentationPassInfo(): vk_mem_alloc.h']]],
+ ['vmadefragmentationpassmoveinfo_130',['VmaDefragmentationPassMoveInfo',['../struct_vma_defragmentation_pass_move_info.html',1,'VmaDefragmentationPassMoveInfo'],['../group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5',1,'VmaDefragmentationPassMoveInfo(): vk_mem_alloc.h']]],
+ ['vmadefragmentationstats_131',['VmaDefragmentationStats',['../struct_vma_defragmentation_stats.html',1,'VmaDefragmentationStats'],['../group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403',1,'VmaDefragmentationStats(): vk_mem_alloc.h']]],
+ ['vmadestroyallocator_132',['vmaDestroyAllocator',['../group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
+ ['vmadestroybuffer_133',['vmaDestroyBuffer',['../group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
+ ['vmadestroyimage_134',['vmaDestroyImage',['../group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
+ ['vmadestroypool_135',['vmaDestroyPool',['../group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
+ ['vmadestroyvirtualblock_136',['vmaDestroyVirtualBlock',['../group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5',1,'vk_mem_alloc.h']]],
+ ['vmadevicememorycallbacks_137',['VmaDeviceMemoryCallbacks',['../struct_vma_device_memory_callbacks.html',1,'VmaDeviceMemoryCallbacks'],['../group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b',1,'VmaDeviceMemoryCallbacks(): vk_mem_alloc.h']]],
+ ['vmaenddefragmentationpass_138',['vmaEndDefragmentationPass',['../group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindex_139',['vmaFindMemoryTypeIndex',['../group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindexforbufferinfo_140',['vmaFindMemoryTypeIndexForBufferInfo',['../group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindexforimageinfo_141',['vmaFindMemoryTypeIndexForImageInfo',['../group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
+ ['vmaflushallocation_142',['vmaFlushAllocation',['../group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f',1,'vk_mem_alloc.h']]],
+ ['vmaflushallocations_143',['vmaFlushAllocations',['../group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc',1,'vk_mem_alloc.h']]],
+ ['vmafreememory_144',['vmaFreeMemory',['../group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f',1,'vk_mem_alloc.h']]],
+ ['vmafreememorypages_145',['vmaFreeMemoryPages',['../group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e',1,'vk_mem_alloc.h']]],
+ ['vmafreestatsstring_146',['vmaFreeStatsString',['../group__group__stats.html#ga3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
+ ['vmafreevirtualblockstatsstring_147',['vmaFreeVirtualBlockStatsString',['../group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623',1,'vk_mem_alloc.h']]],
+ ['vmagetallocationinfo_148',['vmaGetAllocationInfo',['../group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
+ ['vmagetallocationmemoryproperties_149',['vmaGetAllocationMemoryProperties',['../group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1',1,'vk_mem_alloc.h']]],
+ ['vmagetallocatorinfo_150',['vmaGetAllocatorInfo',['../group__group__init.html#gafa02231a791b37255720d566a52683e7',1,'vk_mem_alloc.h']]],
+ ['vmagetheapbudgets_151',['vmaGetHeapBudgets',['../group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7',1,'vk_mem_alloc.h']]],
+ ['vmagetmemoryproperties_152',['vmaGetMemoryProperties',['../group__group__init.html#gab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
+ ['vmagetmemorytypeproperties_153',['vmaGetMemoryTypeProperties',['../group__group__init.html#ga8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
+ ['vmagetphysicaldeviceproperties_154',['vmaGetPhysicalDeviceProperties',['../group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
+ ['vmagetpoolname_155',['vmaGetPoolName',['../group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030',1,'vk_mem_alloc.h']]],
+ ['vmagetpoolstats_156',['vmaGetPoolStats',['../group__group__stats.html#gae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
+ ['vmagetvirtualallocationinfo_157',['vmaGetVirtualAllocationInfo',['../group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa',1,'vk_mem_alloc.h']]],
+ ['vmainvalidateallocation_158',['vmaInvalidateAllocation',['../group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae',1,'vk_mem_alloc.h']]],
+ ['vmainvalidateallocations_159',['vmaInvalidateAllocations',['../group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5',1,'vk_mem_alloc.h']]],
+ ['vmaisvirtualblockempty_160',['vmaIsVirtualBlockEmpty',['../group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1',1,'vk_mem_alloc.h']]],
+ ['vmamapmemory_161',['vmaMapMemory',['../group__group__alloc.html#gad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
+ ['vmamemoryusage_162',['VmaMemoryUsage',['../group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc',1,'VmaMemoryUsage(): vk_mem_alloc.h'],['../group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f',1,'VmaMemoryUsage(): vk_mem_alloc.h']]],
+ ['vmapool_163',['VmaPool',['../struct_vma_pool.html',1,'']]],
+ ['vmapoolcreateflagbits_164',['VmaPoolCreateFlagBits',['../group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h'],['../group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7',1,'VmaPoolCreateFlagBits(): vk_mem_alloc.h']]],
+ ['vmapoolcreateflags_165',['VmaPoolCreateFlags',['../group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
+ ['vmapoolcreateinfo_166',['VmaPoolCreateInfo',['../struct_vma_pool_create_info.html',1,'VmaPoolCreateInfo'],['../group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67',1,'VmaPoolCreateInfo(): vk_mem_alloc.h']]],
+ ['vmapoolstats_167',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'VmaPoolStats'],['../group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1',1,'VmaPoolStats(): vk_mem_alloc.h']]],
+ ['vmasetallocationuserdata_168',['vmaSetAllocationUserData',['../group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
+ ['vmasetcurrentframeindex_169',['vmaSetCurrentFrameIndex',['../group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
+ ['vmasetpoolname_170',['vmaSetPoolName',['../group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58',1,'vk_mem_alloc.h']]],
+ ['vmasetvirtualallocationuserdata_171',['vmaSetVirtualAllocationUserData',['../group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2',1,'vk_mem_alloc.h']]],
+ ['vmastatinfo_172',['VmaStatInfo',['../group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878',1,'VmaStatInfo(): vk_mem_alloc.h'],['../struct_vma_stat_info.html',1,'VmaStatInfo']]],
+ ['vmastats_173',['VmaStats',['../struct_vma_stats.html',1,'VmaStats'],['../group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034',1,'VmaStats(): vk_mem_alloc.h']]],
+ ['vmaunmapmemory_174',['vmaUnmapMemory',['../group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocate_175',['vmaVirtualAllocate',['../group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocation_176',['VmaVirtualAllocation',['../struct_vma_virtual_allocation.html',1,'']]],
+ ['vmavirtualallocationcreateflagbits_177',['VmaVirtualAllocationCreateFlagBits',['../group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h'],['../group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23',1,'VmaVirtualAllocationCreateFlagBits(): vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateflags_178',['VmaVirtualAllocationCreateFlags',['../group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateinfo_179',['VmaVirtualAllocationCreateInfo',['../struct_vma_virtual_allocation_create_info.html',1,'VmaVirtualAllocationCreateInfo'],['../group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e',1,'VmaVirtualAllocationCreateInfo(): vk_mem_alloc.h']]],
+ ['vmavirtualallocationinfo_180',['VmaVirtualAllocationInfo',['../struct_vma_virtual_allocation_info.html',1,'VmaVirtualAllocationInfo'],['../group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc',1,'VmaVirtualAllocationInfo(): vk_mem_alloc.h']]],
+ ['vmavirtualblock_181',['VmaVirtualBlock',['../struct_vma_virtual_block.html',1,'']]],
+ ['vmavirtualblockcreateflagbits_182',['VmaVirtualBlockCreateFlagBits',['../group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h'],['../group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e',1,'VmaVirtualBlockCreateFlagBits(): vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateflags_183',['VmaVirtualBlockCreateFlags',['../group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e',1,'vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateinfo_184',['VmaVirtualBlockCreateInfo',['../group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773',1,'VmaVirtualBlockCreateInfo(): vk_mem_alloc.h'],['../struct_vma_virtual_block_create_info.html',1,'VmaVirtualBlockCreateInfo']]],
+ ['vmavirtualfree_185',['vmaVirtualFree',['../group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033',1,'vk_mem_alloc.h']]],
+ ['vmavulkanfunctions_186',['VmaVulkanFunctions',['../group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074',1,'VmaVulkanFunctions(): vk_mem_alloc.h'],['../struct_vma_vulkan_functions.html',1,'VmaVulkanFunctions']]],
+ ['vulkan_20memory_20allocator_187',['Vulkan Memory Allocator',['../index.html',1,'']]],
+ ['vulkanapiversion_188',['vulkanApiVersion',['../struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285',1,'VmaAllocatorCreateInfo']]]
];
diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js
index f57997b..d0ff47c 100644
--- a/docs/html/search/all_8.js
+++ b/docs/html/search/all_8.js
@@ -1,19 +1,4 @@
var searchData=
[
- ['maxallocationstomove_0',['maxAllocationsToMove',['../struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc',1,'VmaDefragmentationInfo']]],
- ['maxblockcount_1',['maxBlockCount',['../struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c',1,'VmaPoolCreateInfo']]],
- ['maxbytestomove_2',['maxBytesToMove',['../struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d',1,'VmaDefragmentationInfo']]],
- ['maxcpuallocationstomove_3',['maxCpuAllocationsToMove',['../struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671',1,'VmaDefragmentationInfo2']]],
- ['maxcpubytestomove_4',['maxCpuBytesToMove',['../struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a',1,'VmaDefragmentationInfo2']]],
- ['maxgpuallocationstomove_5',['maxGpuAllocationsToMove',['../struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6',1,'VmaDefragmentationInfo2']]],
- ['maxgpubytestomove_6',['maxGpuBytesToMove',['../struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08',1,'VmaDefragmentationInfo2']]],
- ['memory_7',['memory',['../struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769',1,'VmaDefragmentationPassMoveInfo']]],
- ['memory_20mapping_8',['Memory mapping',['../memory_mapping.html',1,'index']]],
- ['memoryheap_9',['memoryHeap',['../struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0',1,'VmaStats']]],
- ['memorytype_10',['memoryType',['../struct_vma_stats.html#a13e3caf754be79352c42408756309331',1,'VmaStats::memoryType()'],['../struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5',1,'VmaAllocationInfo::memoryType()']]],
- ['memorytypebits_11',['memoryTypeBits',['../struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055',1,'VmaAllocationCreateInfo']]],
- ['memorytypeindex_12',['memoryTypeIndex',['../struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319',1,'VmaPoolCreateInfo']]],
- ['minallocationalignment_13',['minAllocationAlignment',['../struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb',1,'VmaPoolCreateInfo']]],
- ['minblockcount_14',['minBlockCount',['../struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae',1,'VmaPoolCreateInfo']]],
- ['movecount_15',['moveCount',['../struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c',1,'VmaDefragmentationPassInfo']]]
+ ['library_20initialization_0',['Library initialization',['../group__group__init.html',1,'']]]
];
diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js
index 1a6f3c7..7aaedb8 100644
--- a/docs/html/search/all_9.js
+++ b/docs/html/search/all_9.js
@@ -1,5 +1,20 @@
var searchData=
[
- ['offset_0',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo::offset()'],['../struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6',1,'VmaDefragmentationPassMoveInfo::offset()']]],
- ['opengl_20interop_1',['OpenGL Interop',['../opengl_interop.html',1,'index']]]
+ ['maxallocationstomove_0',['maxAllocationsToMove',['../struct_vma_defragmentation_info.html#aa7c7304e13c71f604c907196c4e28fbc',1,'VmaDefragmentationInfo']]],
+ ['maxblockcount_1',['maxBlockCount',['../struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c',1,'VmaPoolCreateInfo']]],
+ ['maxbytestomove_2',['maxBytesToMove',['../struct_vma_defragmentation_info.html#acb311c940a777270e67e1b81c5ab6a1d',1,'VmaDefragmentationInfo']]],
+ ['maxcpuallocationstomove_3',['maxCpuAllocationsToMove',['../struct_vma_defragmentation_info2.html#a94c2c7223d52878445a8cccce396b671',1,'VmaDefragmentationInfo2']]],
+ ['maxcpubytestomove_4',['maxCpuBytesToMove',['../struct_vma_defragmentation_info2.html#af78e1ea40c22d85137b65f6b384a4d0a',1,'VmaDefragmentationInfo2']]],
+ ['maxgpuallocationstomove_5',['maxGpuAllocationsToMove',['../struct_vma_defragmentation_info2.html#a40d53d33e71ba0b66f844ed63c05a3f6',1,'VmaDefragmentationInfo2']]],
+ ['maxgpubytestomove_6',['maxGpuBytesToMove',['../struct_vma_defragmentation_info2.html#a4ddbc898d0afe1518f863a3763628f08',1,'VmaDefragmentationInfo2']]],
+ ['memory_7',['memory',['../struct_vma_defragmentation_pass_move_info.html#a06eb0c8690aa0d3478a036753492e769',1,'VmaDefragmentationPassMoveInfo']]],
+ ['memory_20allocation_8',['Memory allocation',['../group__group__alloc.html',1,'']]],
+ ['memory_20mapping_9',['Memory mapping',['../memory_mapping.html',1,'index']]],
+ ['memoryheap_10',['memoryHeap',['../struct_vma_stats.html#a0e6611508c29a187f0fd14ff1a0329c0',1,'VmaStats']]],
+ ['memorytype_11',['memoryType',['../struct_vma_stats.html#a13e3caf754be79352c42408756309331',1,'VmaStats::memoryType()'],['../struct_vma_allocation_info.html#a7f6b0aa58c135e488e6b40a388dad9d5',1,'VmaAllocationInfo::memoryType()']]],
+ ['memorytypebits_12',['memoryTypeBits',['../struct_vma_allocation_create_info.html#a3bf940c0271d85d6ba32a4d820075055',1,'VmaAllocationCreateInfo']]],
+ ['memorytypeindex_13',['memoryTypeIndex',['../struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319',1,'VmaPoolCreateInfo']]],
+ ['minallocationalignment_14',['minAllocationAlignment',['../struct_vma_pool_create_info.html#ade3eca546f0c6ab4e8fbf20eb6d854cb',1,'VmaPoolCreateInfo']]],
+ ['minblockcount_15',['minBlockCount',['../struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae',1,'VmaPoolCreateInfo']]],
+ ['movecount_16',['moveCount',['../struct_vma_defragmentation_pass_info.html#ac1086e657ba995f8d1f4e49b83dcfb6c',1,'VmaDefragmentationPassInfo']]]
];
diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js
index f0a2911..c3267c0 100644
--- a/docs/html/search/all_a.js
+++ b/docs/html/search/all_a.js
@@ -1,25 +1,5 @@
var searchData=
[
- ['pallocationcallbacks_0',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo::pAllocationCallbacks()'],['../struct_vma_virtual_block_create_info.html#a290283bf915c257d24584872d793ad30',1,'VmaVirtualBlockCreateInfo::pAllocationCallbacks()']]],
- ['pallocations_1',['pAllocations',['../struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32',1,'VmaDefragmentationInfo2']]],
- ['pallocationschanged_2',['pAllocationsChanged',['../struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc',1,'VmaDefragmentationInfo2']]],
- ['pdevicememorycallbacks_3',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]],
- ['pfn_5fvmaallocatedevicememoryfunction_4',['PFN_vmaAllocateDeviceMemoryFunction',['../vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3',1,'vk_mem_alloc.h']]],
- ['pfn_5fvmafreedevicememoryfunction_5',['PFN_vmaFreeDeviceMemoryFunction',['../vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b',1,'vk_mem_alloc.h']]],
- ['pfnallocate_6',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]],
- ['pfnfree_7',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]],
- ['pheapsizelimit_8',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]],
- ['physicaldevice_9',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo::physicalDevice()'],['../struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a',1,'VmaAllocatorInfo::physicalDevice()']]],
- ['pmappeddata_10',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]],
- ['pmemoryallocatenext_11',['pMemoryAllocateNext',['../struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7',1,'VmaPoolCreateInfo']]],
- ['pmoves_12',['pMoves',['../struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792',1,'VmaDefragmentationPassInfo']]],
- ['pool_13',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]],
- ['poolcount_14',['poolCount',['../struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d',1,'VmaDefragmentationInfo2']]],
- ['ppools_15',['pPools',['../struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b',1,'VmaDefragmentationInfo2']]],
- ['preferredflags_16',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]],
- ['preferredlargeheapblocksize_17',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]],
- ['priority_18',['priority',['../struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7',1,'VmaAllocationCreateInfo::priority()'],['../struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274',1,'VmaPoolCreateInfo::priority()']]],
- ['ptypeexternalmemoryhandletypes_19',['pTypeExternalMemoryHandleTypes',['../struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b',1,'VmaAllocatorCreateInfo']]],
- ['puserdata_20',['pUserData',['../struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6',1,'VmaDeviceMemoryCallbacks::pUserData()'],['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()'],['../struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb',1,'VmaVirtualAllocationCreateInfo::pUserData()'],['../struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45',1,'VmaVirtualAllocationInfo::pUserData()']]],
- ['pvulkanfunctions_21',['pVulkanFunctions',['../struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd',1,'VmaAllocatorCreateInfo']]]
+ ['offset_0',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo::offset()'],['../struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6',1,'VmaDefragmentationPassMoveInfo::offset()'],['../struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5',1,'VmaVirtualAllocationInfo::offset()']]],
+ ['opengl_20interop_1',['OpenGL Interop',['../opengl_interop.html',1,'index']]]
];
diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js
index 813ffa8..6d50231 100644
--- a/docs/html/search/all_b.js
+++ b/docs/html/search/all_b.js
@@ -1,4 +1,25 @@
var searchData=
[
- ['quick_20start_0',['Quick start',['../quick_start.html',1,'index']]]
+ ['pallocationcallbacks_0',['pAllocationCallbacks',['../struct_vma_allocator_create_info.html#a6e409087e3be55400d0e4ccbe43c608d',1,'VmaAllocatorCreateInfo::pAllocationCallbacks()'],['../struct_vma_virtual_block_create_info.html#a290283bf915c257d24584872d793ad30',1,'VmaVirtualBlockCreateInfo::pAllocationCallbacks()']]],
+ ['pallocations_1',['pAllocations',['../struct_vma_defragmentation_info2.html#ab6d288f29d028156cf73542d630a2e32',1,'VmaDefragmentationInfo2']]],
+ ['pallocationschanged_2',['pAllocationsChanged',['../struct_vma_defragmentation_info2.html#a76d51a644dc7f5405d0cdd0025ecd0cc',1,'VmaDefragmentationInfo2']]],
+ ['pdevicememorycallbacks_3',['pDeviceMemoryCallbacks',['../struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e',1,'VmaAllocatorCreateInfo']]],
+ ['pfn_5fvmaallocatedevicememoryfunction_4',['PFN_vmaAllocateDeviceMemoryFunction',['../group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3',1,'vk_mem_alloc.h']]],
+ ['pfn_5fvmafreedevicememoryfunction_5',['PFN_vmaFreeDeviceMemoryFunction',['../group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b',1,'vk_mem_alloc.h']]],
+ ['pfnallocate_6',['pfnAllocate',['../struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb',1,'VmaDeviceMemoryCallbacks']]],
+ ['pfnfree_7',['pfnFree',['../struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c',1,'VmaDeviceMemoryCallbacks']]],
+ ['pheapsizelimit_8',['pHeapSizeLimit',['../struct_vma_allocator_create_info.html#a31c192aa6cbffa33279f6d9f0c47c44b',1,'VmaAllocatorCreateInfo']]],
+ ['physicaldevice_9',['physicalDevice',['../struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156',1,'VmaAllocatorCreateInfo::physicalDevice()'],['../struct_vma_allocator_info.html#aba2b703f96e51d567717e1fb2935b47a',1,'VmaAllocatorInfo::physicalDevice()']]],
+ ['pmappeddata_10',['pMappedData',['../struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2',1,'VmaAllocationInfo']]],
+ ['pmemoryallocatenext_11',['pMemoryAllocateNext',['../struct_vma_pool_create_info.html#af0f8c58f51a2a7a0a389dc79565044d7',1,'VmaPoolCreateInfo']]],
+ ['pmoves_12',['pMoves',['../struct_vma_defragmentation_pass_info.html#acbd42d4a3357999da130a95cd99a3792',1,'VmaDefragmentationPassInfo']]],
+ ['pool_13',['pool',['../struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150',1,'VmaAllocationCreateInfo']]],
+ ['poolcount_14',['poolCount',['../struct_vma_defragmentation_info2.html#a7e70aa2a1081d849dcc7829b19d3ec9d',1,'VmaDefragmentationInfo2']]],
+ ['ppools_15',['pPools',['../struct_vma_defragmentation_info2.html#a3c9c6aa5c97d5670f8e362b3a6f3029b',1,'VmaDefragmentationInfo2']]],
+ ['preferredflags_16',['preferredFlags',['../struct_vma_allocation_create_info.html#a7fe8d81a1ad10b2a2faacacee5b15d6d',1,'VmaAllocationCreateInfo']]],
+ ['preferredlargeheapblocksize_17',['preferredLargeHeapBlockSize',['../struct_vma_allocator_create_info.html#a8e4714298e3121cdd8b214a1ae7a637a',1,'VmaAllocatorCreateInfo']]],
+ ['priority_18',['priority',['../struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7',1,'VmaAllocationCreateInfo::priority()'],['../struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274',1,'VmaPoolCreateInfo::priority()']]],
+ ['ptypeexternalmemoryhandletypes_19',['pTypeExternalMemoryHandleTypes',['../struct_vma_allocator_create_info.html#ae8f0db05e5cb4c43d7713bf4a49a736b',1,'VmaAllocatorCreateInfo']]],
+ ['puserdata_20',['pUserData',['../struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6',1,'VmaDeviceMemoryCallbacks::pUserData()'],['../struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19',1,'VmaAllocationCreateInfo::pUserData()'],['../struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13',1,'VmaAllocationInfo::pUserData()'],['../struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb',1,'VmaVirtualAllocationCreateInfo::pUserData()'],['../struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45',1,'VmaVirtualAllocationInfo::pUserData()']]],
+ ['pvulkanfunctions_21',['pVulkanFunctions',['../struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd',1,'VmaAllocatorCreateInfo']]]
];
diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js
index 8ba2438..813ffa8 100644
--- a/docs/html/search/all_c.js
+++ b/docs/html/search/all_c.js
@@ -1,6 +1,4 @@
var searchData=
[
- ['recommended_20usage_20patterns_0',['Recommended usage patterns',['../usage_patterns.html',1,'index']]],
- ['requiredflags_1',['requiredFlags',['../struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90',1,'VmaAllocationCreateInfo']]],
- ['resource_20aliasing_20_28overlap_29_2',['Resource aliasing (overlap)',['../resource_aliasing.html',1,'index']]]
+ ['quick_20start_0',['Quick start',['../quick_start.html',1,'index']]]
];
diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js
index 4d46ccb..8ba2438 100644
--- a/docs/html/search/all_d.js
+++ b/docs/html/search/all_d.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['size_0',['size',['../struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c',1,'VmaPoolStats::size()'],['../struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f',1,'VmaAllocationInfo::size()'],['../struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9',1,'VmaVirtualBlockCreateInfo::size()'],['../struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e',1,'VmaVirtualAllocationCreateInfo::size()'],['../struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b',1,'VmaVirtualAllocationInfo::size()']]],
- ['statistics_1',['Statistics',['../statistics.html',1,'index']]],
- ['staying_20within_20budget_2',['Staying within budget',['../staying_within_budget.html',1,'index']]]
+ ['recommended_20usage_20patterns_0',['Recommended usage patterns',['../usage_patterns.html',1,'index']]],
+ ['requiredflags_1',['requiredFlags',['../struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90',1,'VmaAllocationCreateInfo']]],
+ ['resource_20aliasing_20_28overlap_29_2',['Resource aliasing (overlap)',['../resource_aliasing.html',1,'index']]]
];
diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js
index 0114695..bbb2f99 100644
--- a/docs/html/search/all_e.js
+++ b/docs/html/search/all_e.js
@@ -1,4 +1,6 @@
var searchData=
[
- ['total_0',['total',['../struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9',1,'VmaStats']]]
+ ['size_0',['size',['../struct_vma_pool_stats.html#a326807b2de2b0931cee4ed9a5f2e420c',1,'VmaPoolStats::size()'],['../struct_vma_allocation_info.html#aac76d113a6a5ccbb09fea00fb25fd18f',1,'VmaAllocationInfo::size()'],['../struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9',1,'VmaVirtualBlockCreateInfo::size()'],['../struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e',1,'VmaVirtualAllocationCreateInfo::size()'],['../struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b',1,'VmaVirtualAllocationInfo::size()']]],
+ ['statistics_1',['Statistics',['../group__group__stats.html',1,'(Global Namespace)'],['../statistics.html',1,'index']]],
+ ['staying_20within_20budget_2',['Staying within budget',['../staying_within_budget.html',1,'index']]]
];
diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js
index 0e382e2..0114695 100644
--- a/docs/html/search/all_f.js
+++ b/docs/html/search/all_f.js
@@ -1,11 +1,4 @@
var searchData=
[
- ['unusedbytes_0',['unusedBytes',['../struct_vma_stat_info.html#a1859d290aca2cd582d8dc25922092669',1,'VmaStatInfo']]],
- ['unusedrangecount_1',['unusedRangeCount',['../struct_vma_stat_info.html#ae06129c771bfebfd6468a7f4276502a9',1,'VmaStatInfo::unusedRangeCount()'],['../struct_vma_pool_stats.html#ae4f3546ffa4d1e598b64d8e6134854f4',1,'VmaPoolStats::unusedRangeCount()']]],
- ['unusedrangesizeavg_2',['unusedRangeSizeAvg',['../struct_vma_stat_info.html#a2f9b3452af90c9768a30b7fb6ae194fc',1,'VmaStatInfo']]],
- ['unusedrangesizemax_3',['unusedRangeSizeMax',['../struct_vma_stat_info.html#a5ba1a2476c4d39b10f7e2f7ebbb72ac4',1,'VmaStatInfo']]],
- ['unusedrangesizemin_4',['unusedRangeSizeMin',['../struct_vma_stat_info.html#aedeba931324f16589cd2416c0d2dd0d4',1,'VmaStatInfo']]],
- ['unusedsize_5',['unusedSize',['../struct_vma_pool_stats.html#ad7c54874724fce7b06aba526202d82a8',1,'VmaPoolStats']]],
- ['usage_6',['usage',['../struct_vma_budget.html#a84dd1ecca8b0110259eb206dbadb11f6',1,'VmaBudget::usage()'],['../struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910',1,'VmaAllocationCreateInfo::usage()']]],
- ['usedbytes_7',['usedBytes',['../struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a',1,'VmaStatInfo']]]
+ ['total_0',['total',['../struct_vma_stats.html#a2e8f5b3353f2fefef3c27f29e245a1f9',1,'VmaStats']]]
];
diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js
index 45a57db..934b2fc 100644
--- a/docs/html/search/classes_0.js
+++ b/docs/html/search/classes_0.js
@@ -19,9 +19,10 @@
['vmapoolstats_16',['VmaPoolStats',['../struct_vma_pool_stats.html',1,'']]],
['vmastatinfo_17',['VmaStatInfo',['../struct_vma_stat_info.html',1,'']]],
['vmastats_18',['VmaStats',['../struct_vma_stats.html',1,'']]],
- ['vmavirtualallocationcreateinfo_19',['VmaVirtualAllocationCreateInfo',['../struct_vma_virtual_allocation_create_info.html',1,'']]],
- ['vmavirtualallocationinfo_20',['VmaVirtualAllocationInfo',['../struct_vma_virtual_allocation_info.html',1,'']]],
- ['vmavirtualblock_21',['VmaVirtualBlock',['../struct_vma_virtual_block.html',1,'']]],
- ['vmavirtualblockcreateinfo_22',['VmaVirtualBlockCreateInfo',['../struct_vma_virtual_block_create_info.html',1,'']]],
- ['vmavulkanfunctions_23',['VmaVulkanFunctions',['../struct_vma_vulkan_functions.html',1,'']]]
+ ['vmavirtualallocation_19',['VmaVirtualAllocation',['../struct_vma_virtual_allocation.html',1,'']]],
+ ['vmavirtualallocationcreateinfo_20',['VmaVirtualAllocationCreateInfo',['../struct_vma_virtual_allocation_create_info.html',1,'']]],
+ ['vmavirtualallocationinfo_21',['VmaVirtualAllocationInfo',['../struct_vma_virtual_allocation_info.html',1,'']]],
+ ['vmavirtualblock_22',['VmaVirtualBlock',['../struct_vma_virtual_block.html',1,'']]],
+ ['vmavirtualblockcreateinfo_23',['VmaVirtualBlockCreateInfo',['../struct_vma_virtual_block_create_info.html',1,'']]],
+ ['vmavulkanfunctions_24',['VmaVulkanFunctions',['../struct_vma_vulkan_functions.html',1,'']]]
];
diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js
index 6697dbd..385d710 100644
--- a/docs/html/search/enums_0.js
+++ b/docs/html/search/enums_0.js
@@ -1,10 +1,10 @@
var searchData=
[
- ['vmaallocationcreateflagbits_0',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateflagbits_1',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationflagbits_2',['VmaDefragmentationFlagBits',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c',1,'vk_mem_alloc.h']]],
- ['vmamemoryusage_3',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateflagbits_4',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflagbits_5',['VmaVirtualAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateflagbits_6',['VmaVirtualBlockCreateFlagBits',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca',1,'vk_mem_alloc.h']]]
+ ['vmaallocationcreateflagbits_0',['VmaAllocationCreateFlagBits',['../group__group__alloc.html#gad9889c10c798b040d59c92f257cae597',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorcreateflagbits_1',['VmaAllocatorCreateFlagBits',['../group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationflagbits_2',['VmaDefragmentationFlagBits',['../group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c',1,'vk_mem_alloc.h']]],
+ ['vmamemoryusage_3',['VmaMemoryUsage',['../group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc',1,'vk_mem_alloc.h']]],
+ ['vmapoolcreateflagbits_4',['VmaPoolCreateFlagBits',['../group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateflagbits_5',['VmaVirtualAllocationCreateFlagBits',['../group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6',1,'vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateflagbits_6',['VmaVirtualBlockCreateFlagBits',['../group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca',1,'vk_mem_alloc.h']]]
];
diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js
index 5f9dc1e..1efcb2d 100644
--- a/docs/html/search/enumvalues_0.js
+++ b/docs/html/search/enumvalues_0.js
@@ -1,54 +1,56 @@
var searchData=
[
- ['vma_5fallocation_5fcreate_5fcan_5falias_5fbit_0',['VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit_1',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fdont_5fbind_5fbit_2',['VMA_ALLOCATION_CREATE_DONT_BIND_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_3',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fmapped_5fbit_4',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit_5',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5freserved_5f1_5fbit_6',['VMA_ALLOCATION_CREATE_RESERVED_1_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5freserved_5f2_5fbit_7',['VMA_ALLOCATION_CREATE_RESERVED_2_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fbest_5ffit_5fbit_8',['VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5ffirst_5ffit_5fbit_9',['VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmask_10',['VMA_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_11',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_12',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_13',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fstrategy_5fworst_5ffit_5fbit_14',['VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit_15',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit_16',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
- ['vma_5fallocation_5fcreate_5fwithin_5fbudget_5fbit_17',['VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT',['../vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5famd_5fdevice_5fcoherent_5fmemory_5fbit_18',['VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fbuffer_5fdevice_5faddress_5fbit_19',['VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fbudget_5fbit_20',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fext_5fmemory_5fpriority_5fbit_21',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit_22',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum_23',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fbind_5fmemory2_5fbit_24',['VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee',1,'vk_mem_alloc.h']]],
- ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit_25',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fbits_5fmax_5fenum_26',['VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97',1,'vk_mem_alloc.h']]],
- ['vma_5fdefragmentation_5fflag_5fincremental_27',['VMA_DEFRAGMENTATION_FLAG_INCREMENTAL',['../vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fcopy_28',['VMA_MEMORY_USAGE_CPU_COPY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fonly_29',['VMA_MEMORY_USAGE_CPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu_30',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5flazily_5fallocated_31',['VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fonly_32',['VMA_MEMORY_USAGE_GPU_ONLY',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu_33',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5fmax_5fenum_34',['VMA_MEMORY_USAGE_MAX_ENUM',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
- ['vma_5fmemory_5fusage_5funknown_35',['VMA_MEMORY_USAGE_UNKNOWN',['../vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5falgorithm_5fmask_36',['VMA_POOL_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fbuddy_5falgorithm_5fbit_37',['VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum_38',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit_39',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
- ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit_40',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_41',['VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmask_42',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_43',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_44',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_45',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fallocation_5fcreate_5fupper_5faddress_5fbit_46',['VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5falgorithm_5fmask_47',['VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fbuddy_5falgorithm_5fbit_48',['VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5fflag_5fbits_5fmax_5fenum_49',['VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87',1,'vk_mem_alloc.h']]],
- ['vma_5fvirtual_5fblock_5fcreate_5flinear_5falgorithm_5fbit_50',['VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT',['../vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96',1,'vk_mem_alloc.h']]]
+ ['vma_5fallocation_5fcreate_5fcan_5falias_5fbit_0',['VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fdedicated_5fmemory_5fbit_1',['VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fdont_5fbind_5fbit_2',['VMA_ALLOCATION_CREATE_DONT_BIND_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_3',['VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fmapped_5fbit_4',['VMA_ALLOCATION_CREATE_MAPPED_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fnever_5fallocate_5fbit_5',['VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5freserved_5f1_5fbit_6',['VMA_ALLOCATION_CREATE_RESERVED_1_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5freserved_5f2_5fbit_7',['VMA_ALLOCATION_CREATE_RESERVED_2_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fbest_5ffit_5fbit_8',['VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5ffirst_5ffit_5fbit_9',['VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmask_10',['VMA_ALLOCATION_CREATE_STRATEGY_MASK',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_11',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_12',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_13',['VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fstrategy_5fworst_5ffit_5fbit_14',['VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fupper_5faddress_5fbit_15',['VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fuser_5fdata_5fcopy_5fstring_5fbit_16',['VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocation_5fcreate_5fwithin_5fbudget_5fbit_17',['VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT',['../group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5famd_5fdevice_5fcoherent_5fmemory_5fbit_18',['VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fbuffer_5fdevice_5faddress_5fbit_19',['VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fext_5fmemory_5fbudget_5fbit_20',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fext_5fmemory_5fpriority_5fbit_21',['VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fexternally_5fsynchronized_5fbit_22',['VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fflag_5fbits_5fmax_5fenum_23',['VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fkhr_5fbind_5fmemory2_5fbit_24',['VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee',1,'vk_mem_alloc.h']]],
+ ['vma_5fallocator_5fcreate_5fkhr_5fdedicated_5fallocation_5fbit_25',['VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT',['../group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878',1,'vk_mem_alloc.h']]],
+ ['vma_5fdefragmentation_5fflag_5fbits_5fmax_5fenum_26',['VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97',1,'vk_mem_alloc.h']]],
+ ['vma_5fdefragmentation_5fflag_5fincremental_27',['VMA_DEFRAGMENTATION_FLAG_INCREMENTAL',['../group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fcopy_28',['VMA_MEMORY_USAGE_CPU_COPY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fonly_29',['VMA_MEMORY_USAGE_CPU_ONLY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fcpu_5fto_5fgpu_30',['VMA_MEMORY_USAGE_CPU_TO_GPU',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5flazily_5fallocated_31',['VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5fonly_32',['VMA_MEMORY_USAGE_GPU_ONLY',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fgpu_5fto_5fcpu_33',['VMA_MEMORY_USAGE_GPU_TO_CPU',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5fmax_5fenum_34',['VMA_MEMORY_USAGE_MAX_ENUM',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e',1,'vk_mem_alloc.h']]],
+ ['vma_5fmemory_5fusage_5funknown_35',['VMA_MEMORY_USAGE_UNKNOWN',['../group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5falgorithm_5fmask_36',['VMA_POOL_CREATE_ALGORITHM_MASK',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fbuddy_5falgorithm_5fbit_37',['VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fflag_5fbits_5fmax_5fenum_38',['VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5fignore_5fbuffer_5fimage_5fgranularity_5fbit_39',['VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5flinear_5falgorithm_5fbit_40',['VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726',1,'vk_mem_alloc.h']]],
+ ['vma_5fpool_5fcreate_5ftlsf_5falgorithm_5fbit_41',['VMA_POOL_CREATE_TLSF_ALGORITHM_BIT',['../group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fflag_5fbits_5fmax_5fenum_42',['VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmask_43',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ffragmentation_5fbit_44',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5fmemory_5fbit_45',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fstrategy_5fmin_5ftime_5fbit_46',['VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fallocation_5fcreate_5fupper_5faddress_5fbit_47',['VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT',['../group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5falgorithm_5fmask_48',['VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5fbuddy_5falgorithm_5fbit_49',['VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5fflag_5fbits_5fmax_5fenum_50',['VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5flinear_5falgorithm_5fbit_51',['VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96',1,'vk_mem_alloc.h']]],
+ ['vma_5fvirtual_5fblock_5fcreate_5ftlsf_5falgorithm_5fbit_52',['VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT',['../group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691',1,'vk_mem_alloc.h']]]
];
diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js
index 685cdbb..1c9c7be 100644
--- a/docs/html/search/functions_0.js
+++ b/docs/html/search/functions_0.js
@@ -1,64 +1,65 @@
var searchData=
[
- ['vmaallocatememory_0',['vmaAllocateMemory',['../vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforbuffer_1',['vmaAllocateMemoryForBuffer',['../vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
- ['vmaallocatememoryforimage_2',['vmaAllocateMemoryForImage',['../vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
- ['vmaallocatememorypages_3',['vmaAllocateMemoryPages',['../vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1',1,'vk_mem_alloc.h']]],
- ['vmabegindefragmentationpass_4',['vmaBeginDefragmentationPass',['../vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory_5',['vmaBindBufferMemory',['../vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
- ['vmabindbuffermemory2_6',['vmaBindBufferMemory2',['../vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory_7',['vmaBindImageMemory',['../vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
- ['vmabindimagememory2_8',['vmaBindImageMemory2',['../vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc',1,'vk_mem_alloc.h']]],
- ['vmabuildstatsstring_9',['vmaBuildStatsString',['../vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
- ['vmabuildvirtualblockstatsstring_10',['vmaBuildVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6',1,'vk_mem_alloc.h']]],
- ['vmacalculatestats_11',['vmaCalculateStats',['../vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
- ['vmacalculatevirtualblockstats_12',['vmaCalculateVirtualBlockStats',['../vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a',1,'vk_mem_alloc.h']]],
- ['vmacheckcorruption_13',['vmaCheckCorruption',['../vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
- ['vmacheckpoolcorruption_14',['vmaCheckPoolCorruption',['../vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
- ['vmaclearvirtualblock_15',['vmaClearVirtualBlock',['../vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571',1,'vk_mem_alloc.h']]],
- ['vmacreateallocator_16',['vmaCreateAllocator',['../vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
- ['vmacreatebuffer_17',['vmaCreateBuffer',['../vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
- ['vmacreatebufferwithalignment_18',['vmaCreateBufferWithAlignment',['../vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834',1,'vk_mem_alloc.h']]],
- ['vmacreateimage_19',['vmaCreateImage',['../vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
- ['vmacreatepool_20',['vmaCreatePool',['../vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
- ['vmacreatevirtualblock_21',['vmaCreateVirtualBlock',['../vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b',1,'vk_mem_alloc.h']]],
- ['vmadefragment_22',['vmaDefragment',['../vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationbegin_23',['vmaDefragmentationBegin',['../vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationend_24',['vmaDefragmentationEnd',['../vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2',1,'vk_mem_alloc.h']]],
- ['vmadestroyallocator_25',['vmaDestroyAllocator',['../vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
- ['vmadestroybuffer_26',['vmaDestroyBuffer',['../vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
- ['vmadestroyimage_27',['vmaDestroyImage',['../vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
- ['vmadestroypool_28',['vmaDestroyPool',['../vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
- ['vmadestroyvirtualblock_29',['vmaDestroyVirtualBlock',['../vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5',1,'vk_mem_alloc.h']]],
- ['vmaenddefragmentationpass_30',['vmaEndDefragmentationPass',['../vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindex_31',['vmaFindMemoryTypeIndex',['../vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforbufferinfo_32',['vmaFindMemoryTypeIndexForBufferInfo',['../vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
- ['vmafindmemorytypeindexforimageinfo_33',['vmaFindMemoryTypeIndexForImageInfo',['../vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
- ['vmaflushallocation_34',['vmaFlushAllocation',['../vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f',1,'vk_mem_alloc.h']]],
- ['vmaflushallocations_35',['vmaFlushAllocations',['../vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc',1,'vk_mem_alloc.h']]],
- ['vmafreememory_36',['vmaFreeMemory',['../vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f',1,'vk_mem_alloc.h']]],
- ['vmafreememorypages_37',['vmaFreeMemoryPages',['../vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e',1,'vk_mem_alloc.h']]],
- ['vmafreestatsstring_38',['vmaFreeStatsString',['../vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
- ['vmafreevirtualblockstatsstring_39',['vmaFreeVirtualBlockStatsString',['../vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623',1,'vk_mem_alloc.h']]],
- ['vmagetallocationinfo_40',['vmaGetAllocationInfo',['../vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
- ['vmagetallocationmemoryproperties_41',['vmaGetAllocationMemoryProperties',['../vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1',1,'vk_mem_alloc.h']]],
- ['vmagetallocatorinfo_42',['vmaGetAllocatorInfo',['../vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7',1,'vk_mem_alloc.h']]],
- ['vmagetheapbudgets_43',['vmaGetHeapBudgets',['../vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7',1,'vk_mem_alloc.h']]],
- ['vmagetmemoryproperties_44',['vmaGetMemoryProperties',['../vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
- ['vmagetmemorytypeproperties_45',['vmaGetMemoryTypeProperties',['../vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
- ['vmagetphysicaldeviceproperties_46',['vmaGetPhysicalDeviceProperties',['../vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
- ['vmagetpoolname_47',['vmaGetPoolName',['../vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030',1,'vk_mem_alloc.h']]],
- ['vmagetpoolstats_48',['vmaGetPoolStats',['../vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
- ['vmagetvirtualallocationinfo_49',['vmaGetVirtualAllocationInfo',['../vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocation_50',['vmaInvalidateAllocation',['../vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae',1,'vk_mem_alloc.h']]],
- ['vmainvalidateallocations_51',['vmaInvalidateAllocations',['../vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5',1,'vk_mem_alloc.h']]],
- ['vmaisvirtualblockempty_52',['vmaIsVirtualBlockEmpty',['../vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1',1,'vk_mem_alloc.h']]],
- ['vmamapmemory_53',['vmaMapMemory',['../vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
- ['vmasetallocationuserdata_54',['vmaSetAllocationUserData',['../vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
- ['vmasetcurrentframeindex_55',['vmaSetCurrentFrameIndex',['../vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
- ['vmasetpoolname_56',['vmaSetPoolName',['../vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58',1,'vk_mem_alloc.h']]],
- ['vmasetvirtualallocationuserdata_57',['vmaSetVirtualAllocationUserData',['../vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9',1,'vk_mem_alloc.h']]],
- ['vmaunmapmemory_58',['vmaUnmapMemory',['../vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocate_59',['vmaVirtualAllocate',['../vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2',1,'vk_mem_alloc.h']]],
- ['vmavirtualfree_60',['vmaVirtualFree',['../vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639',1,'vk_mem_alloc.h']]]
+ ['vk_5fdefine_5fnon_5fdispatchable_5fhandle_0',['VK_DEFINE_NON_DISPATCHABLE_HANDLE',['../group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememory_1',['vmaAllocateMemory',['../group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememoryforbuffer_2',['vmaAllocateMemoryForBuffer',['../group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememoryforimage_3',['vmaAllocateMemoryForImage',['../group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb',1,'vk_mem_alloc.h']]],
+ ['vmaallocatememorypages_4',['vmaAllocateMemoryPages',['../group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1',1,'vk_mem_alloc.h']]],
+ ['vmabegindefragmentationpass_5',['vmaBeginDefragmentationPass',['../group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b',1,'vk_mem_alloc.h']]],
+ ['vmabindbuffermemory_6',['vmaBindBufferMemory',['../group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470',1,'vk_mem_alloc.h']]],
+ ['vmabindbuffermemory2_7',['vmaBindBufferMemory2',['../group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a',1,'vk_mem_alloc.h']]],
+ ['vmabindimagememory_8',['vmaBindImageMemory',['../group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5',1,'vk_mem_alloc.h']]],
+ ['vmabindimagememory2_9',['vmaBindImageMemory2',['../group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc',1,'vk_mem_alloc.h']]],
+ ['vmabuildstatsstring_10',['vmaBuildStatsString',['../group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0',1,'vk_mem_alloc.h']]],
+ ['vmabuildvirtualblockstatsstring_11',['vmaBuildVirtualBlockStatsString',['../group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6',1,'vk_mem_alloc.h']]],
+ ['vmacalculatestats_12',['vmaCalculateStats',['../group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3',1,'vk_mem_alloc.h']]],
+ ['vmacalculatevirtualblockstats_13',['vmaCalculateVirtualBlockStats',['../group__group__virtual.html#ga95169b4730e94757897470086ec2768a',1,'vk_mem_alloc.h']]],
+ ['vmacheckcorruption_14',['vmaCheckCorruption',['../group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98',1,'vk_mem_alloc.h']]],
+ ['vmacheckpoolcorruption_15',['vmaCheckPoolCorruption',['../group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89',1,'vk_mem_alloc.h']]],
+ ['vmaclearvirtualblock_16',['vmaClearVirtualBlock',['../group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571',1,'vk_mem_alloc.h']]],
+ ['vmacreateallocator_17',['vmaCreateAllocator',['../group__group__init.html#ga200692051ddb34240248234f5f4c17bb',1,'vk_mem_alloc.h']]],
+ ['vmacreatebuffer_18',['vmaCreateBuffer',['../group__group__alloc.html#gac72ee55598617e8eecca384e746bab51',1,'vk_mem_alloc.h']]],
+ ['vmacreatebufferwithalignment_19',['vmaCreateBufferWithAlignment',['../group__group__alloc.html#gaa06a690013a0d01e60894ac378083834',1,'vk_mem_alloc.h']]],
+ ['vmacreateimage_20',['vmaCreateImage',['../group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73',1,'vk_mem_alloc.h']]],
+ ['vmacreatepool_21',['vmaCreatePool',['../group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50',1,'vk_mem_alloc.h']]],
+ ['vmacreatevirtualblock_22',['vmaCreateVirtualBlock',['../group__group__virtual.html#gab585754076877265fdae33e5c40ef13b',1,'vk_mem_alloc.h']]],
+ ['vmadefragment_23',['vmaDefragment',['../group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationbegin_24',['vmaDefragmentationBegin',['../group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationend_25',['vmaDefragmentationEnd',['../group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2',1,'vk_mem_alloc.h']]],
+ ['vmadestroyallocator_26',['vmaDestroyAllocator',['../group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d',1,'vk_mem_alloc.h']]],
+ ['vmadestroybuffer_27',['vmaDestroyBuffer',['../group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77',1,'vk_mem_alloc.h']]],
+ ['vmadestroyimage_28',['vmaDestroyImage',['../group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e',1,'vk_mem_alloc.h']]],
+ ['vmadestroypool_29',['vmaDestroyPool',['../group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1',1,'vk_mem_alloc.h']]],
+ ['vmadestroyvirtualblock_30',['vmaDestroyVirtualBlock',['../group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5',1,'vk_mem_alloc.h']]],
+ ['vmaenddefragmentationpass_31',['vmaEndDefragmentationPass',['../group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindex_32',['vmaFindMemoryTypeIndex',['../group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindexforbufferinfo_33',['vmaFindMemoryTypeIndexForBufferInfo',['../group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888',1,'vk_mem_alloc.h']]],
+ ['vmafindmemorytypeindexforimageinfo_34',['vmaFindMemoryTypeIndexForImageInfo',['../group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472',1,'vk_mem_alloc.h']]],
+ ['vmaflushallocation_35',['vmaFlushAllocation',['../group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f',1,'vk_mem_alloc.h']]],
+ ['vmaflushallocations_36',['vmaFlushAllocations',['../group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc',1,'vk_mem_alloc.h']]],
+ ['vmafreememory_37',['vmaFreeMemory',['../group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f',1,'vk_mem_alloc.h']]],
+ ['vmafreememorypages_38',['vmaFreeMemoryPages',['../group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e',1,'vk_mem_alloc.h']]],
+ ['vmafreestatsstring_39',['vmaFreeStatsString',['../group__group__stats.html#ga3104eb30d8122c84dd8541063f145288',1,'vk_mem_alloc.h']]],
+ ['vmafreevirtualblockstatsstring_40',['vmaFreeVirtualBlockStatsString',['../group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623',1,'vk_mem_alloc.h']]],
+ ['vmagetallocationinfo_41',['vmaGetAllocationInfo',['../group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b',1,'vk_mem_alloc.h']]],
+ ['vmagetallocationmemoryproperties_42',['vmaGetAllocationMemoryProperties',['../group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1',1,'vk_mem_alloc.h']]],
+ ['vmagetallocatorinfo_43',['vmaGetAllocatorInfo',['../group__group__init.html#gafa02231a791b37255720d566a52683e7',1,'vk_mem_alloc.h']]],
+ ['vmagetheapbudgets_44',['vmaGetHeapBudgets',['../group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7',1,'vk_mem_alloc.h']]],
+ ['vmagetmemoryproperties_45',['vmaGetMemoryProperties',['../group__group__init.html#gab88db292a17974f911182543fda52d19',1,'vk_mem_alloc.h']]],
+ ['vmagetmemorytypeproperties_46',['vmaGetMemoryTypeProperties',['../group__group__init.html#ga8701444752eb5de4464adb5a2b514bca',1,'vk_mem_alloc.h']]],
+ ['vmagetphysicaldeviceproperties_47',['vmaGetPhysicalDeviceProperties',['../group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0',1,'vk_mem_alloc.h']]],
+ ['vmagetpoolname_48',['vmaGetPoolName',['../group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030',1,'vk_mem_alloc.h']]],
+ ['vmagetpoolstats_49',['vmaGetPoolStats',['../group__group__stats.html#gae8bf76997b234ef68aad922616df4153',1,'vk_mem_alloc.h']]],
+ ['vmagetvirtualallocationinfo_50',['vmaGetVirtualAllocationInfo',['../group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa',1,'vk_mem_alloc.h']]],
+ ['vmainvalidateallocation_51',['vmaInvalidateAllocation',['../group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae',1,'vk_mem_alloc.h']]],
+ ['vmainvalidateallocations_52',['vmaInvalidateAllocations',['../group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5',1,'vk_mem_alloc.h']]],
+ ['vmaisvirtualblockempty_53',['vmaIsVirtualBlockEmpty',['../group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1',1,'vk_mem_alloc.h']]],
+ ['vmamapmemory_54',['vmaMapMemory',['../group__group__alloc.html#gad5bd1243512d099706de88168992f069',1,'vk_mem_alloc.h']]],
+ ['vmasetallocationuserdata_55',['vmaSetAllocationUserData',['../group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f',1,'vk_mem_alloc.h']]],
+ ['vmasetcurrentframeindex_56',['vmaSetCurrentFrameIndex',['../group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236',1,'vk_mem_alloc.h']]],
+ ['vmasetpoolname_57',['vmaSetPoolName',['../group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58',1,'vk_mem_alloc.h']]],
+ ['vmasetvirtualallocationuserdata_58',['vmaSetVirtualAllocationUserData',['../group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2',1,'vk_mem_alloc.h']]],
+ ['vmaunmapmemory_59',['vmaUnmapMemory',['../group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocate_60',['vmaVirtualAllocate',['../group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01',1,'vk_mem_alloc.h']]],
+ ['vmavirtualfree_61',['vmaVirtualFree',['../group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033',1,'vk_mem_alloc.h']]]
];
diff --git a/docs/html/search/groups_0.html b/docs/html/search/groups_0.html
new file mode 100644
index 0000000..b58dd54
--- /dev/null
+++ b/docs/html/search/groups_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_0.js b/docs/html/search/groups_0.js
new file mode 100644
index 0000000..d0ff47c
--- /dev/null
+++ b/docs/html/search/groups_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['library_20initialization_0',['Library initialization',['../group__group__init.html',1,'']]]
+];
diff --git a/docs/html/search/groups_1.html b/docs/html/search/groups_1.html
new file mode 100644
index 0000000..2c2310e
--- /dev/null
+++ b/docs/html/search/groups_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_1.js b/docs/html/search/groups_1.js
new file mode 100644
index 0000000..43d0841
--- /dev/null
+++ b/docs/html/search/groups_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['memory_20allocation_0',['Memory allocation',['../group__group__alloc.html',1,'']]]
+];
diff --git a/docs/html/search/groups_2.html b/docs/html/search/groups_2.html
new file mode 100644
index 0000000..a9b6af7
--- /dev/null
+++ b/docs/html/search/groups_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_2.js b/docs/html/search/groups_2.js
new file mode 100644
index 0000000..99a76d0
--- /dev/null
+++ b/docs/html/search/groups_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['statistics_0',['Statistics',['../group__group__stats.html',1,'']]]
+];
diff --git a/docs/html/search/groups_3.html b/docs/html/search/groups_3.html
new file mode 100644
index 0000000..1f15b56
--- /dev/null
+++ b/docs/html/search/groups_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="groups_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/docs/html/search/groups_3.js b/docs/html/search/groups_3.js
new file mode 100644
index 0000000..b7b01e5
--- /dev/null
+++ b/docs/html/search/groups_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['virtual_20allocator_0',['Virtual allocator',['../group__group__virtual.html',1,'']]]
+];
diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
index 205f9b0..1e1ddfd 100644
--- a/docs/html/search/searchdata.js
+++ b/docs/html/search/searchdata.js
@@ -1,6 +1,6 @@
var indexSectionsWithContent =
{
- 0: "abcdefgimopqrstuv",
+ 0: "abcdefgilmopqrstuv",
1: "v",
2: "v",
3: "v",
@@ -9,7 +9,8 @@
6: "v",
7: "v",
8: "v",
- 9: "acdegmoqrsv"
+ 9: "lmsv",
+ 10: "acdegmoqrsv"
};
var indexSectionNames =
@@ -23,7 +24,8 @@
6: "enums",
7: "enumvalues",
8: "defines",
- 9: "pages"
+ 9: "groups",
+ 10: "pages"
};
var indexSectionLabels =
@@ -37,6 +39,7 @@
6: "Enumerations",
7: "Enumerator",
8: "Macros",
- 9: "Pages"
+ 9: "Modules",
+ 10: "Pages"
};
diff --git a/docs/html/search/typedefs_0.js b/docs/html/search/typedefs_0.js
index 1e178fb..f343e52 100644
--- a/docs/html/search/typedefs_0.js
+++ b/docs/html/search/typedefs_0.js
@@ -1,5 +1,5 @@
var searchData=
[
- ['pfn_5fvmaallocatedevicememoryfunction_0',['PFN_vmaAllocateDeviceMemoryFunction',['../vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3',1,'vk_mem_alloc.h']]],
- ['pfn_5fvmafreedevicememoryfunction_1',['PFN_vmaFreeDeviceMemoryFunction',['../vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b',1,'vk_mem_alloc.h']]]
+ ['pfn_5fvmaallocatedevicememoryfunction_0',['PFN_vmaAllocateDeviceMemoryFunction',['../group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3',1,'vk_mem_alloc.h']]],
+ ['pfn_5fvmafreedevicememoryfunction_1',['PFN_vmaFreeDeviceMemoryFunction',['../group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b',1,'vk_mem_alloc.h']]]
];
diff --git a/docs/html/search/typedefs_1.js b/docs/html/search/typedefs_1.js
index 372f76f..e15adf2 100644
--- a/docs/html/search/typedefs_1.js
+++ b/docs/html/search/typedefs_1.js
@@ -1,35 +1,35 @@
var searchData=
[
- ['vmaallocationcreateflagbits_0',['VmaAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941',1,'vk_mem_alloc.h']]],
- ['vmaallocationcreateflags_1',['VmaAllocationCreateFlags',['../vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
- ['vmaallocationcreateinfo_2',['VmaAllocationCreateInfo',['../vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a',1,'vk_mem_alloc.h']]],
- ['vmaallocationinfo_3',['VmaAllocationInfo',['../vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateflagbits_4',['VmaAllocatorCreateFlagBits',['../vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateflags_5',['VmaAllocatorCreateFlags',['../vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
- ['vmaallocatorcreateinfo_6',['VmaAllocatorCreateInfo',['../vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a',1,'vk_mem_alloc.h']]],
- ['vmaallocatorinfo_7',['VmaAllocatorInfo',['../vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c',1,'vk_mem_alloc.h']]],
- ['vmabudget_8',['VmaBudget',['../vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationflagbits_9',['VmaDefragmentationFlagBits',['../vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationflags_10',['VmaDefragmentationFlags',['../vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationinfo_11',['VmaDefragmentationInfo',['../vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationinfo2_12',['VmaDefragmentationInfo2',['../vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationpassinfo_13',['VmaDefragmentationPassInfo',['../vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationpassmoveinfo_14',['VmaDefragmentationPassMoveInfo',['../vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5',1,'vk_mem_alloc.h']]],
- ['vmadefragmentationstats_15',['VmaDefragmentationStats',['../vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403',1,'vk_mem_alloc.h']]],
- ['vmadevicememorycallbacks_16',['VmaDeviceMemoryCallbacks',['../vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b',1,'vk_mem_alloc.h']]],
- ['vmamemoryusage_17',['VmaMemoryUsage',['../vk__mem__alloc_8h.html#a806e8499dde802e59eb72a1dc811c35f',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateflagbits_18',['VmaPoolCreateFlagBits',['../vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateflags_19',['VmaPoolCreateFlags',['../vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
- ['vmapoolcreateinfo_20',['VmaPoolCreateInfo',['../vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67',1,'vk_mem_alloc.h']]],
- ['vmapoolstats_21',['VmaPoolStats',['../vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1',1,'vk_mem_alloc.h']]],
- ['vmastatinfo_22',['VmaStatInfo',['../vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878',1,'vk_mem_alloc.h']]],
- ['vmastats_23',['VmaStats',['../vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflagbits_24',['VmaVirtualAllocationCreateFlagBits',['../vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateflags_25',['VmaVirtualAllocationCreateFlags',['../vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationcreateinfo_26',['VmaVirtualAllocationCreateInfo',['../vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e',1,'vk_mem_alloc.h']]],
- ['vmavirtualallocationinfo_27',['VmaVirtualAllocationInfo',['../vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateflagbits_28',['VmaVirtualBlockCreateFlagBits',['../vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateflags_29',['VmaVirtualBlockCreateFlags',['../vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e',1,'vk_mem_alloc.h']]],
- ['vmavirtualblockcreateinfo_30',['VmaVirtualBlockCreateInfo',['../vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773',1,'vk_mem_alloc.h']]],
- ['vmavulkanfunctions_31',['VmaVulkanFunctions',['../vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074',1,'vk_mem_alloc.h']]]
+ ['vmaallocationcreateflagbits_0',['VmaAllocationCreateFlagBits',['../group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941',1,'vk_mem_alloc.h']]],
+ ['vmaallocationcreateflags_1',['VmaAllocationCreateFlags',['../group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817',1,'vk_mem_alloc.h']]],
+ ['vmaallocationcreateinfo_2',['VmaAllocationCreateInfo',['../group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a',1,'vk_mem_alloc.h']]],
+ ['vmaallocationinfo_3',['VmaAllocationInfo',['../group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorcreateflagbits_4',['VmaAllocatorCreateFlagBits',['../group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorcreateflags_5',['VmaAllocatorCreateFlags',['../group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorcreateinfo_6',['VmaAllocatorCreateInfo',['../group__group__init.html#gaad9652301d33759b83e52d4f3605a14a',1,'vk_mem_alloc.h']]],
+ ['vmaallocatorinfo_7',['VmaAllocatorInfo',['../group__group__init.html#ga1988031b0223fdbd564250fa1edd942c',1,'vk_mem_alloc.h']]],
+ ['vmabudget_8',['VmaBudget',['../group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationflagbits_9',['VmaDefragmentationFlagBits',['../group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationflags_10',['VmaDefragmentationFlags',['../group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationinfo_11',['VmaDefragmentationInfo',['../group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationinfo2_12',['VmaDefragmentationInfo2',['../group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationpassinfo_13',['VmaDefragmentationPassInfo',['../group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationpassmoveinfo_14',['VmaDefragmentationPassMoveInfo',['../group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5',1,'vk_mem_alloc.h']]],
+ ['vmadefragmentationstats_15',['VmaDefragmentationStats',['../group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403',1,'vk_mem_alloc.h']]],
+ ['vmadevicememorycallbacks_16',['VmaDeviceMemoryCallbacks',['../group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b',1,'vk_mem_alloc.h']]],
+ ['vmamemoryusage_17',['VmaMemoryUsage',['../group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f',1,'vk_mem_alloc.h']]],
+ ['vmapoolcreateflagbits_18',['VmaPoolCreateFlagBits',['../group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303',1,'vk_mem_alloc.h']]],
+ ['vmapoolcreateflags_19',['VmaPoolCreateFlags',['../group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a',1,'vk_mem_alloc.h']]],
+ ['vmapoolcreateinfo_20',['VmaPoolCreateInfo',['../group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67',1,'vk_mem_alloc.h']]],
+ ['vmapoolstats_21',['VmaPoolStats',['../group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1',1,'vk_mem_alloc.h']]],
+ ['vmastatinfo_22',['VmaStatInfo',['../group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878',1,'vk_mem_alloc.h']]],
+ ['vmastats_23',['VmaStats',['../group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateflagbits_24',['VmaVirtualAllocationCreateFlagBits',['../group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateflags_25',['VmaVirtualAllocationCreateFlags',['../group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationcreateinfo_26',['VmaVirtualAllocationCreateInfo',['../group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e',1,'vk_mem_alloc.h']]],
+ ['vmavirtualallocationinfo_27',['VmaVirtualAllocationInfo',['../group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc',1,'vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateflagbits_28',['VmaVirtualBlockCreateFlagBits',['../group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e',1,'vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateflags_29',['VmaVirtualBlockCreateFlags',['../group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e',1,'vk_mem_alloc.h']]],
+ ['vmavirtualblockcreateinfo_30',['VmaVirtualBlockCreateInfo',['../group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773',1,'vk_mem_alloc.h']]],
+ ['vmavulkanfunctions_31',['VmaVulkanFunctions',['../group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074',1,'vk_mem_alloc.h']]]
];
diff --git a/docs/html/search/variables_7.js b/docs/html/search/variables_7.js
index efdbf10..95a7ac4 100644
--- a/docs/html/search/variables_7.js
+++ b/docs/html/search/variables_7.js
@@ -1,4 +1,4 @@
var searchData=
[
- ['offset_0',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo::offset()'],['../struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6',1,'VmaDefragmentationPassMoveInfo::offset()']]]
+ ['offset_0',['offset',['../struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268',1,'VmaAllocationInfo::offset()'],['../struct_vma_defragmentation_pass_move_info.html#a8ab4508bc03625b0653c880576be96c6',1,'VmaDefragmentationPassMoveInfo::offset()'],['../struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5',1,'VmaVirtualAllocationInfo::offset()']]]
];
diff --git a/docs/html/statistics.html b/docs/html/statistics.html
index eec3ff4..0242ae0 100644
--- a/docs/html/statistics.html
+++ b/docs/html/statistics.html
@@ -72,14 +72,14 @@
<div class="textblock"><p >This library contains functions that return information about its internal state, especially the amount of memory allocated from Vulkan. Please keep in mind that these functions need to traverse all internal data structures to gather these information, so they may be quite time-consuming. Don't call them too often.</p>
<h1><a class="anchor" id="statistics_numeric_statistics"></a>
Numeric statistics</h1>
-<p >You can query for overall statistics of the allocator using function <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. Information are returned using structure <a class="el" href="struct_vma_stats.html" title="General statistics from current state of Allocator.">VmaStats</a>. It contains <a class="el" href="struct_vma_stat_info.html" title="Calculated statistics of memory usage in entire allocator.">VmaStatInfo</a> - number of allocated blocks, number of allocations (occupied ranges in these blocks), number of unused (free) ranges in these blocks, number of bytes used and unused (but still allocated from Vulkan) and other information. They are summed across memory heaps, memory types and total for whole allocator.</p>
-<p >You can query for statistics of a custom pool using function <a class="el" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153" title="Retrieves statistics of existing VmaPool object.">vmaGetPoolStats()</a>. Information are returned using structure <a class="el" href="struct_vma_pool_stats.html" title="Describes parameter of existing VmaPool.">VmaPoolStats</a>.</p>
-<p >You can query for information about specific allocation using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. It fill structure <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a>.</p>
+<p >You can query for overall statistics of the allocator using function <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. Information are returned using structure <a class="el" href="struct_vma_stats.html" title="General statistics from current state of Allocator.">VmaStats</a>. It contains <a class="el" href="struct_vma_stat_info.html" title="Calculated statistics of memory usage in entire allocator.">VmaStatInfo</a> - number of allocated blocks, number of allocations (occupied ranges in these blocks), number of unused (free) ranges in these blocks, number of bytes used and unused (but still allocated from Vulkan) and other information. They are summed across memory heaps, memory types and total for whole allocator.</p>
+<p >You can query for statistics of a custom pool using function <a class="el" href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153" title="Retrieves statistics of existing VmaPool object.">vmaGetPoolStats()</a>. Information are returned using structure <a class="el" href="struct_vma_pool_stats.html" title="Describes parameter of existing VmaPool.">VmaPoolStats</a>.</p>
+<p >You can query for information about specific allocation using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. It fill structure <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a>.</p>
<h1><a class="anchor" id="statistics_json_dump"></a>
JSON dump</h1>
-<p >You can dump internal state of the allocator to a string in JSON format using function <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>. The result is guaranteed to be correct JSON. It uses ANSI encoding. Any strings provided by user (see <a class="el" href="allocation_annotation.html#allocation_names">Allocation names</a>) are copied as-is and properly escaped for JSON, so if they use UTF-8, ISO-8859-2 or any other encoding, this JSON string can be treated as using this encoding. It must be freed using function <a class="el" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString()</a>.</p>
+<p >You can dump internal state of the allocator to a string in JSON format using function <a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>. The result is guaranteed to be correct JSON. It uses ANSI encoding. Any strings provided by user (see <a class="el" href="allocation_annotation.html#allocation_names">Allocation names</a>) are copied as-is and properly escaped for JSON, so if they use UTF-8, ISO-8859-2 or any other encoding, this JSON string can be treated as using this encoding. It must be freed using function <a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vmaFreeStatsString()</a>.</p>
<p >The format of this JSON string is not part of official documentation of the library, but it will not change in backward-incompatible way without increasing library major version number and appropriate mention in changelog.</p>
-<p >The JSON string contains all the data that can be obtained using <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. It can also contain detailed map of allocated memory blocks and their regions - free and occupied by allocations. This allows e.g. to visualize the memory or assess fragmentation. </p>
+<p >The JSON string contains all the data that can be obtained using <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. It can also contain detailed map of allocated memory blocks and their regions - free and occupied by allocations. This allows e.g. to visualize the memory or assess fragmentation. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
<!-- start footer part -->
diff --git a/docs/html/staying_within_budget.html b/docs/html/staying_within_budget.html
index 93fc8ec..3ab67fc 100644
--- a/docs/html/staying_within_budget.html
+++ b/docs/html/staying_within_budget.html
@@ -79,20 +79,20 @@
</ul>
<h1><a class="anchor" id="staying_within_budget_querying_for_budget"></a>
Querying for budget</h1>
-<p >To query for current memory usage and available budget, use function <a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a>. Returned structure <a class="el" href="struct_vma_budget.html" title="Statistics of current memory usage and available budget, in bytes, for specific memory heap.">VmaBudget</a> contains quantities expressed in bytes, per Vulkan memory heap.</p>
-<p >Please note that this function returns different information and works faster than <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. <a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a> can be called every frame or even before every allocation, while <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a> is intended to be used rarely, only to obtain statistical information, e.g. for debugging purposes.</p>
+<p >To query for current memory usage and available budget, use function <a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a>. Returned structure <a class="el" href="struct_vma_budget.html" title="Statistics of current memory usage and available budget, in bytes, for specific memory heap.">VmaBudget</a> contains quantities expressed in bytes, per Vulkan memory heap.</p>
+<p >Please note that this function returns different information and works faster than <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>. <a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a> can be called every frame or even before every allocation, while <a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a> is intended to be used rarely, only to obtain statistical information, e.g. for debugging purposes.</p>
<p >It is recommended to use <b>VK_EXT_memory_budget</b> device extension to obtain information about the budget from Vulkan device. VMA is able to use this extension automatically. When not enabled, the allocator behaves same way, but then it estimates current usage and available budget based on its internal information and Vulkan memory heap sizes, which may be less precise. In order to use this extension:</p>
<ol type="1">
<li>Make sure extensions VK_EXT_memory_budget and VK_KHR_get_physical_device_properties2 required by it are available and enable them. Please note that the first is a device extension and the second is instance extension!</li>
-<li>Use flag <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> when creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object.</li>
-<li>Make sure to call <a class="el" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236" title="Sets index of the current frame.">vmaSetCurrentFrameIndex()</a> every frame. Budget is queried from Vulkan inside of it to avoid overhead of querying it with every allocation.</li>
+<li>Use flag <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> when creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object.</li>
+<li>Make sure to call <a class="el" href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236" title="Sets index of the current frame.">vmaSetCurrentFrameIndex()</a> every frame. Budget is queried from Vulkan inside of it to avoid overhead of querying it with every allocation.</li>
</ol>
<h1><a class="anchor" id="staying_within_budget_controlling_memory_usage"></a>
Controlling memory usage</h1>
<p >There are many ways in which you can try to stay within the budget.</p>
<p >First, when making new allocation requires allocating a new memory block, the library tries not to exceed the budget automatically. If a block with default recommended size (e.g. 256 MB) would go over budget, a smaller block is allocated, possibly even dedicated memory for just this resource.</p>
-<p >If the size of the requested resource plus current memory usage is more than the budget, by default the library still tries to create it, leaving it to the Vulkan implementation whether the allocation succeeds or fails. You can change this behavior by using <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> flag. With it, the allocation is not made if it would exceed the budget or if the budget is already exceeded. The allocation then fails with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. Example usage pattern may be to pass the <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> flag when creating resources that are not essential for the application (e.g. the texture of a specific object) and not to pass it when creating critically important resources (e.g. render targets).</p>
-<p >Finally, you can also use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> flag to make sure a new allocation is created only when it fits inside one of the existing memory blocks. If it would require to allocate a new block, if fails instead with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. This also ensures that the function call is very fast because it never goes to Vulkan to obtain a new block.</p>
+<p >If the size of the requested resource plus current memory usage is more than the budget, by default the library still tries to create it, leaving it to the Vulkan implementation whether the allocation succeeds or fails. You can change this behavior by using <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> flag. With it, the allocation is not made if it would exceed the budget or if the budget is already exceeded. The allocation then fails with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. Example usage pattern may be to pass the <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> flag when creating resources that are not essential for the application (e.g. the texture of a specific object) and not to pass it when creating critically important resources (e.g. render targets).</p>
+<p >Finally, you can also use <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> flag to make sure a new allocation is created only when it fits inside one of the existing memory blocks. If it would require to allocate a new block, if fails instead with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. This also ensures that the function call is very fast because it never goes to Vulkan to obtain a new block.</p>
<p >Please note that creating <a class="el" href="custom_memory_pools.html">Custom memory pools</a> with <a class="el" href="struct_vma_pool_create_info.html#ad8006fb803185c0a699d30f3e9a865ae" title="Minimum number of blocks to be always allocated in this pool, even if they stay empty.">VmaPoolCreateInfo::minBlockCount</a> set to more than 0 will try to allocate memory blocks without checking whether they fit within budget. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/struct_vma_allocation.html b/docs/html/struct_vma_allocation.html
index 8be447a..96919c4 100644
--- a/docs/html/struct_vma_allocation.html
+++ b/docs/html/struct_vma_allocation.html
@@ -62,7 +62,7 @@
</div><!-- top -->
<div class="header">
- <div class="headertitle"><div class="title">VmaAllocation Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocation Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -75,7 +75,7 @@
<p >It may be either dedicated block of <code>VkDeviceMemory</code> or a specific region of a bigger block of this type plus unique offset.</p>
<p >There are multiple ways to create such object. You need to fill structure <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. For more information see <a class="el" href="choosing_memory_type.html">Choosing memory type</a>.</p>
<p >Although the library provides convenience functions that create Vulkan buffer or image, allocate memory for it and bind them together, binding of the allocation to a buffer or an image is out of scope of the allocation itself. Allocation object can exist without buffer/image bound, binding can be done manually by the user, and destruction of it can be done independently of destruction of the allocation.</p>
-<p >The object also remembers its size and some other information. To retrieve this information, use function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> and inspect returned structure <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a>. </p>
+<p >The object also remembers its size and some other information. To retrieve this information, use function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> and inspect returned structure <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a>. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
</ul>
diff --git a/docs/html/struct_vma_allocation_create_info.html b/docs/html/struct_vma_allocation_create_info.html
index 9c41a97..bf7db44 100644
--- a/docs/html/struct_vma_allocation_create_info.html
+++ b/docs/html/struct_vma_allocation_create_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_allocation_create_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaAllocationCreateInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocationCreateInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -73,10 +73,10 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:add09658ac14fe290ace25470ddd6d41b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a></td></tr>
-<tr class="memdesc:add09658ac14fe290ace25470ddd6d41b"><td class="mdescLeft"> </td><td class="mdescRight">Use <a class="el" href="vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a> enum. <a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">More...</a><br /></td></tr>
+<tr class="memitem:add09658ac14fe290ace25470ddd6d41b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">flags</a></td></tr>
+<tr class="memdesc:add09658ac14fe290ace25470ddd6d41b"><td class="mdescLeft"> </td><td class="mdescRight">Use <a class="el" href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a> enum. <a href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b">More...</a><br /></td></tr>
<tr class="separator:add09658ac14fe290ace25470ddd6d41b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:accb8b06b1f677d858cb9af20705fa910"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a></td></tr>
+<tr class="memitem:accb8b06b1f677d858cb9af20705fa910"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">usage</a></td></tr>
<tr class="memdesc:accb8b06b1f677d858cb9af20705fa910"><td class="mdescLeft"> </td><td class="mdescRight">Intended usage of memory. <a href="struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910">More...</a><br /></td></tr>
<tr class="separator:accb8b06b1f677d858cb9af20705fa910"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a9166390303ff42d783305bc31c2b6b90"><td class="memItemLeft" align="right" valign="top">VkMemoryPropertyFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#a9166390303ff42d783305bc31c2b6b90">requiredFlags</a></td></tr>
@@ -92,7 +92,7 @@
<tr class="memdesc:a6272c0555cfd1fe28bff1afeb6190150"><td class="mdescLeft"> </td><td class="mdescRight">Pool that this allocation should be created in. <a href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150">More...</a><br /></td></tr>
<tr class="separator:a6272c0555cfd1fe28bff1afeb6190150"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a8259e85c272683434f4abb4ddddffe19"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">pUserData</a></td></tr>
-<tr class="memdesc:a8259e85c272683434f4abb4ddddffe19"><td class="mdescLeft"> </td><td class="mdescRight">Custom general-purpose pointer that will be stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>, can be read as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a> and changed using <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. <a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">More...</a><br /></td></tr>
+<tr class="memdesc:a8259e85c272683434f4abb4ddddffe19"><td class="mdescLeft"> </td><td class="mdescRight">Custom general-purpose pointer that will be stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>, can be read as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a> and changed using <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. <a href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19">More...</a><br /></td></tr>
<tr class="separator:a8259e85c272683434f4abb4ddddffe19"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a983d39e1a2e63649d78a960aa2fdd0f7"><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">priority</a></td></tr>
<tr class="memdesc:a983d39e1a2e63649d78a960aa2fdd0f7"><td class="mdescLeft"> </td><td class="mdescRight">A floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. <a href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7">More...</a><br /></td></tr>
@@ -106,12 +106,12 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> VmaAllocationCreateInfo::flags</td>
+ <td class="memname"><a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a> VmaAllocationCreateInfo::flags</td>
</tr>
</table>
</div><div class="memdoc">
-<p>Use <a class="el" href="vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a> enum. </p>
+<p>Use <a class="el" href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a> enum. </p>
</div>
</div>
@@ -181,7 +181,7 @@
</div><div class="memdoc">
<p>A floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. </p>
-<p >It is used only when <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> flag was used during creation of the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object and this allocation ends up as dedicated or is explicitly forced as dedicated using <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. Otherwise, it has the priority of a memory block where it is placed and this variable is ignored. </p>
+<p >It is used only when <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> flag was used during creation of the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object and this allocation ends up as dedicated or is explicitly forced as dedicated using <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. Otherwise, it has the priority of a memory block where it is placed and this variable is ignored. </p>
</div>
</div>
@@ -197,8 +197,8 @@
</table>
</div><div class="memdoc">
-<p>Custom general-purpose pointer that will be stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>, can be read as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a> and changed using <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. </p>
-<p >If <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> is used, it must be either null or pointer to a null-terminated string. The string will be then copied to internal buffer, so it doesn't need to be valid after allocation call. </p>
+<p>Custom general-purpose pointer that will be stored in <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a>, can be read as <a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13" title="Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vma...">VmaAllocationInfo::pUserData</a> and changed using <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. </p>
+<p >If <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> is used, it must be either null or pointer to a null-terminated string. The string will be then copied to internal buffer, so it doesn't need to be valid after allocation call. </p>
</div>
</div>
@@ -227,13 +227,13 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> VmaAllocationCreateInfo::usage</td>
+ <td class="memname"><a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> VmaAllocationCreateInfo::usage</td>
</tr>
</table>
</div><div class="memdoc">
<p>Intended usage of memory. </p>
-<p >You can leave <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> if you specify memory requirements in other way. <br />
+<p >You can leave <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> if you specify memory requirements in other way. <br />
If <code>pool</code> is not null, this member is ignored. </p>
</div>
diff --git a/docs/html/struct_vma_allocation_info.html b/docs/html/struct_vma_allocation_info.html
index 287aa44..e5874b8 100644
--- a/docs/html/struct_vma_allocation_info.html
+++ b/docs/html/struct_vma_allocation_info.html
@@ -65,11 +65,11 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_allocation_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaAllocationInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocationInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.
+<p>Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.
<a href="struct_vma_allocation_info.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
@@ -92,11 +92,11 @@
<tr class="memdesc:a5eeffbe2d2f30f53370ff14aefbadbe2"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the beginning of this allocation as mapped data. <a href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2">More...</a><br /></td></tr>
<tr class="separator:a5eeffbe2d2f30f53370ff14aefbadbe2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:adc507656149c04de7ed95d0042ba2a13"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">pUserData</a></td></tr>
-<tr class="memdesc:adc507656149c04de7ed95d0042ba2a13"><td class="mdescLeft"> </td><td class="mdescRight">Custom general-purpose pointer that was passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or set using <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. <a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">More...</a><br /></td></tr>
+<tr class="memdesc:adc507656149c04de7ed95d0042ba2a13"><td class="mdescLeft"> </td><td class="mdescRight">Custom general-purpose pointer that was passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or set using <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. <a href="struct_vma_allocation_info.html#adc507656149c04de7ed95d0042ba2a13">More...</a><br /></td></tr>
<tr class="separator:adc507656149c04de7ed95d0042ba2a13"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. </p>
+<div class="textblock"><p >Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="ae0bfb7dfdf79a76ffefc9a94677a2f67" name="ae0bfb7dfdf79a76ffefc9a94677a2f67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0bfb7dfdf79a76ffefc9a94677a2f67">◆ </a></span>deviceMemory</h2>
@@ -112,7 +112,7 @@
<p>Handle to Vulkan memory object. </p>
<p >Same memory object can be shared by multiple allocations.</p>
-<p >It can change after call to <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
+<p >It can change after call to <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
</div>
</div>
@@ -146,8 +146,8 @@
</div><div class="memdoc">
<p>Offset in <code>VkDeviceMemory</code> object to the beginning of this allocation, in bytes. <code>(deviceMemory, offset)</code> pair is unique to this allocation. </p>
-<p >You usually don't need to use this offset. If you create a buffer or an image together with the allocation using e.g. function <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, functions that operate on these resources refer to the beginning of the buffer or image, not entire device memory block. Functions like <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a> also refer to the beginning of the allocation and apply this offset automatically.</p>
-<p >It can change after call to <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
+<p >You usually don't need to use this offset. If you create a buffer or an image together with the allocation using e.g. function <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, functions that operate on these resources refer to the beginning of the buffer or image, not entire device memory block. Functions like <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a> also refer to the beginning of the allocation and apply this offset automatically.</p>
+<p >It can change after call to <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
</div>
</div>
@@ -164,8 +164,8 @@
</div><div class="memdoc">
<p>Pointer to the beginning of this allocation as mapped data. </p>
-<p >If the allocation hasn't been mapped using <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> and hasn't been created with <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag, this value is null.</p>
-<p >It can change after call to <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a>. It can also change after call to <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
+<p >If the allocation hasn't been mapped using <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a> and hasn't been created with <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag, this value is null.</p>
+<p >It can change after call to <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, <a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a>. It can also change after call to <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a> if this allocation is passed to the function. </p>
</div>
</div>
@@ -181,8 +181,8 @@
</table>
</div><div class="memdoc">
-<p>Custom general-purpose pointer that was passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or set using <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. </p>
-<p >It can change after call to <a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a> for this allocation. </p>
+<p>Custom general-purpose pointer that was passed as <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> or set using <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a>. </p>
+<p >It can change after call to <a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f" title="Sets pUserData in given allocation to new value.">vmaSetAllocationUserData()</a> for this allocation. </p>
</div>
</div>
@@ -200,7 +200,7 @@
<p>Size of this allocation, in bytes. </p>
<p >It never changes.</p>
-<dl class="section note"><dt>Note</dt><dd>Allocation size returned in this variable may be greater than the size requested for the resource e.g. as <code>VkBufferCreateInfo::size</code>. Whole size of the allocation is accessible for operations on memory e.g. using a pointer after mapping with <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, but operations on the resource e.g. using <code>vkCmdCopyBuffer</code> must be limited to the size of the resource. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Allocation size returned in this variable may be greater than the size requested for the resource e.g. as <code>VkBufferCreateInfo::size</code>. Whole size of the allocation is accessible for operations on memory e.g. using a pointer after mapping with <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>, but operations on the resource e.g. using <code>vkCmdCopyBuffer</code> must be limited to the size of the resource. </dd></dl>
</div>
</div>
diff --git a/docs/html/struct_vma_allocator.html b/docs/html/struct_vma_allocator.html
index 4427b98..8572eee 100644
--- a/docs/html/struct_vma_allocator.html
+++ b/docs/html/struct_vma_allocator.html
@@ -62,7 +62,7 @@
</div><!-- top -->
<div class="header">
- <div class="headertitle"><div class="title">VmaAllocator Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocator Struct Reference<div class="ingroups"><a class="el" href="group__group__init.html">Library initialization</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -72,7 +72,7 @@
<p><code>#include <vk_mem_alloc.h></code></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Represents main object of this library initialized. </p>
-<p >Fill structure <a class="el" href="struct_vma_allocator_create_info.html" title="Description of a Allocator to be created.">VmaAllocatorCreateInfo</a> and call function <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" title="Creates Allocator object.">vmaCreateAllocator()</a> to create it. Call function <a class="el" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d" title="Destroys allocator object.">vmaDestroyAllocator()</a> to destroy it.</p>
+<p >Fill structure <a class="el" href="struct_vma_allocator_create_info.html" title="Description of a Allocator to be created.">VmaAllocatorCreateInfo</a> and call function <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb" title="Creates VmaAllocator object.">vmaCreateAllocator()</a> to create it. Call function <a class="el" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d" title="Destroys allocator object.">vmaDestroyAllocator()</a> to destroy it.</p>
<p >It is recommended to create just one object of this type per <code>VkDevice</code> object, right after Vulkan is initialized and keep it alive until before Vulkan device is destroyed. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
diff --git a/docs/html/struct_vma_allocator_create_info.html b/docs/html/struct_vma_allocator_create_info.html
index 4b9bd9b..2f605e1 100644
--- a/docs/html/struct_vma_allocator_create_info.html
+++ b/docs/html/struct_vma_allocator_create_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_allocator_create_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaAllocatorCreateInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocatorCreateInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__init.html">Library initialization</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -76,8 +76,8 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:a392ea2ecbaff93f91a7c49f735ad4346"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a></td></tr>
-<tr class="memdesc:a392ea2ecbaff93f91a7c49f735ad4346"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created allocator. Use <a class="el" href="vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f" title="Flags for created VmaAllocator.">VmaAllocatorCreateFlagBits</a> enum. <a href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">More...</a><br /></td></tr>
+<tr class="memitem:a392ea2ecbaff93f91a7c49f735ad4346"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">flags</a></td></tr>
+<tr class="memdesc:a392ea2ecbaff93f91a7c49f735ad4346"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created allocator. Use <a class="el" href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f" title="Flags for created VmaAllocator.">VmaAllocatorCreateFlagBits</a> enum. <a href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346">More...</a><br /></td></tr>
<tr class="separator:a392ea2ecbaff93f91a7c49f735ad4346"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a08230f04ae6ccf8a78150a9e829a7156"><td class="memItemLeft" align="right" valign="top">VkPhysicalDevice </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">physicalDevice</a></td></tr>
<tr class="memdesc:a08230f04ae6ccf8a78150a9e829a7156"><td class="mdescLeft"> </td><td class="mdescRight">Vulkan physical device. <a href="struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156">More...</a><br /></td></tr>
@@ -137,12 +137,12 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> VmaAllocatorCreateInfo::flags</td>
+ <td class="memname"><a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a> VmaAllocatorCreateInfo::flags</td>
</tr>
</table>
</div><div class="memdoc">
-<p>Flags for created allocator. Use <a class="el" href="vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f" title="Flags for created VmaAllocator.">VmaAllocatorCreateFlagBits</a> enum. </p>
+<p>Flags for created allocator. Use <a class="el" href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f" title="Flags for created VmaAllocator.">VmaAllocatorCreateFlagBits</a> enum. </p>
</div>
</div>
@@ -215,7 +215,7 @@
<p >If there is a limit defined for a heap:</p>
<ul>
<li>If user tries to allocate more memory from that heap using this allocator, the allocation fails with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>.</li>
-<li>If the limit is smaller than heap size reported in <code>VkMemoryHeap::size</code>, the value of this limit will be reported instead when using <a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>.</li>
+<li>If the limit is smaller than heap size reported in <code>VkMemoryHeap::size</code>, the value of this limit will be reported instead when using <a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>.</li>
</ul>
<p >Warning! Using this feature may not be equivalent to installing a GPU with smaller amount of memory, because graphics driver doesn't necessary fail new allocations with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> result when memory capacity is exceeded. It may return success and just silently migrate some device memory blocks to system RAM. This driver behavior can also be controlled using VK_AMD_memory_overallocation_behavior extension. </p>
diff --git a/docs/html/struct_vma_allocator_info.html b/docs/html/struct_vma_allocator_info.html
index 9d7aad5..582d7b4 100644
--- a/docs/html/struct_vma_allocator_info.html
+++ b/docs/html/struct_vma_allocator_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_allocator_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaAllocatorInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaAllocatorInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__init.html">Library initialization</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_budget.html b/docs/html/struct_vma_budget.html
index 7a58a47..4959ff3 100644
--- a/docs/html/struct_vma_budget.html
+++ b/docs/html/struct_vma_budget.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_budget-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaBudget Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaBudget Struct Reference<div class="ingroups"><a class="el" href="group__group__stats.html">Statistics</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_defragmentation_context.html b/docs/html/struct_vma_defragmentation_context.html
index 51acec5..8905df5 100644
--- a/docs/html/struct_vma_defragmentation_context.html
+++ b/docs/html/struct_vma_defragmentation_context.html
@@ -62,7 +62,7 @@
</div><!-- top -->
<div class="header">
- <div class="headertitle"><div class="title">VmaDefragmentationContext Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationContext Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -72,7 +72,7 @@
<p><code>#include <vk_mem_alloc.h></code></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Represents Opaque object that represents started defragmentation process. </p>
-<p >Fill structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and call function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> to create it. Call function <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to destroy it. </p>
+<p >Fill structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and call function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> to create it. Call function <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to destroy it. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
</ul>
diff --git a/docs/html/struct_vma_defragmentation_info.html b/docs/html/struct_vma_defragmentation_info.html
index 013ca68..73e329b 100644
--- a/docs/html/struct_vma_defragmentation_info.html
+++ b/docs/html/struct_vma_defragmentation_info.html
@@ -65,11 +65,11 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_defragmentation_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDefragmentationInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.
+<p>Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.
<a href="struct_vma_defragmentation_info.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
@@ -84,8 +84,8 @@
<tr class="separator:aa7c7304e13c71f604c907196c4e28fbc"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
-<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd></dl>
+<div class="textblock"><p >Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
+<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd></dl>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="aa7c7304e13c71f604c907196c4e28fbc" name="aa7c7304e13c71f604c907196c4e28fbc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7c7304e13c71f604c907196c4e28fbc">◆ </a></span>maxAllocationsToMove</h2>
diff --git a/docs/html/struct_vma_defragmentation_info2.html b/docs/html/struct_vma_defragmentation_info2.html
index 58177a3..4f75f8e 100644
--- a/docs/html/struct_vma_defragmentation_info2.html
+++ b/docs/html/struct_vma_defragmentation_info2.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_defragmentation_info2-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDefragmentationInfo2 Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationInfo2 Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -76,7 +76,7 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:a53e844ee5633e229cf6daf14b2d9fff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a></td></tr>
+<tr class="memitem:a53e844ee5633e229cf6daf14b2d9fff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">flags</a></td></tr>
<tr class="memdesc:a53e844ee5633e229cf6daf14b2d9fff9"><td class="mdescLeft"> </td><td class="mdescRight">Reserved for future use. Should be 0. <a href="struct_vma_defragmentation_info2.html#a53e844ee5633e229cf6daf14b2d9fff9">More...</a><br /></td></tr>
<tr class="separator:a53e844ee5633e229cf6daf14b2d9fff9"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3cf86ab32c1da779b4923d301a3056ba"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info2.html#a3cf86ab32c1da779b4923d301a3056ba">allocationCount</a></td></tr>
@@ -112,7 +112,7 @@
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Parameters for defragmentation. </p>
-<p >To be used with function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. </p>
+<p >To be used with function <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="a3cf86ab32c1da779b4923d301a3056ba" name="a3cf86ab32c1da779b4923d301a3056ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3cf86ab32c1da779b4923d301a3056ba">◆ </a></span>allocationCount</h2>
@@ -143,7 +143,7 @@
</div><div class="memdoc">
<p>Optional. Command buffer where GPU copy commands will be posted. </p>
-<p >If not null, it must be a valid command buffer handle that supports Transfer queue type. It must be in the recording state and outside of a render pass instance. You need to submit it and make sure it finished execution before calling <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</p>
+<p >If not null, it must be a valid command buffer handle that supports Transfer queue type. It must be in the recording state and outside of a render pass instance. You need to submit it and make sure it finished execution before calling <a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</p>
<p >Passing null means that only CPU defragmentation will be performed. </p>
</div>
@@ -155,7 +155,7 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> VmaDefragmentationInfo2::flags</td>
+ <td class="memname"><a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a> VmaDefragmentationInfo2::flags</td>
</tr>
</table>
</div><div class="memdoc">
@@ -295,7 +295,7 @@
</div><div class="memdoc">
<p>Either null or pointer to array of pools to be defragmented. </p>
-<p >All the allocations in the specified pools can be moved during defragmentation and there is no way to check if they were really moved as in <code>pAllocationsChanged</code>, so you must query all the allocations in all these pools for new <code>VkDeviceMemory</code> and offset using <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you might need to recreate buffers and images bound to them.</p>
+<p >All the allocations in the specified pools can be moved during defragmentation and there is no way to check if they were really moved as in <code>pAllocationsChanged</code>, so you must query all the allocations in all these pools for new <code>VkDeviceMemory</code> and offset using <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> if you might need to recreate buffers and images bound to them.</p>
<p >The array should have <code>poolCount</code> elements. The array should not contain nulls. Elements in the array should be unique - same pool cannot occur twice.</p>
<p >Using this array is equivalent to specifying all allocations from the pools in <code>pAllocations</code>. It might be more efficient. </p>
diff --git a/docs/html/struct_vma_defragmentation_pass_info.html b/docs/html/struct_vma_defragmentation_pass_info.html
index 49eac0e..86a34a4 100644
--- a/docs/html/struct_vma_defragmentation_pass_info.html
+++ b/docs/html/struct_vma_defragmentation_pass_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_defragmentation_pass_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDefragmentationPassInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationPassInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -83,7 +83,7 @@
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Parameters for incremental defragmentation steps. </p>
-<p >To be used with function <a class="el" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass()</a>. </p>
+<p >To be used with function <a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="ac1086e657ba995f8d1f4e49b83dcfb6c" name="ac1086e657ba995f8d1f4e49b83dcfb6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1086e657ba995f8d1f4e49b83dcfb6c">◆ </a></span>moveCount</h2>
diff --git a/docs/html/struct_vma_defragmentation_pass_move_info.html b/docs/html/struct_vma_defragmentation_pass_move_info.html
index b077c3a..d76af23 100644
--- a/docs/html/struct_vma_defragmentation_pass_move_info.html
+++ b/docs/html/struct_vma_defragmentation_pass_move_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_defragmentation_pass_move_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDefragmentationPassMoveInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationPassMoveInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_defragmentation_stats.html b/docs/html/struct_vma_defragmentation_stats.html
index 3c35ef6..77354c1 100644
--- a/docs/html/struct_vma_defragmentation_stats.html
+++ b/docs/html/struct_vma_defragmentation_stats.html
@@ -65,11 +65,11 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_defragmentation_stats-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDefragmentationStats Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDefragmentationStats Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.
+<p>Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.
<a href="struct_vma_defragmentation_stats.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
@@ -90,7 +90,7 @@
<tr class="separator:a0113f1877904a5d1ee8f409216ff276b"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
+<div class="textblock"><p >Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="aefeabf130022008eadd75999478af3f9" name="aefeabf130022008eadd75999478af3f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aefeabf130022008eadd75999478af3f9">◆ </a></span>allocationsMoved</h2>
diff --git a/docs/html/struct_vma_device_memory_callbacks.html b/docs/html/struct_vma_device_memory_callbacks.html
index 5394c34..6b0654f 100644
--- a/docs/html/struct_vma_device_memory_callbacks.html
+++ b/docs/html/struct_vma_device_memory_callbacks.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_device_memory_callbacks-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaDeviceMemoryCallbacks Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaDeviceMemoryCallbacks Struct Reference<div class="ingroups"><a class="el" href="group__group__init.html">Library initialization</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -76,10 +76,10 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
-<tr class="memitem:a4f17f7b255101e733b44d5633aceabfb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a></td></tr>
+<tr class="memitem:a4f17f7b255101e733b44d5633aceabfb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">pfnAllocate</a></td></tr>
<tr class="memdesc:a4f17f7b255101e733b44d5633aceabfb"><td class="mdescLeft"> </td><td class="mdescRight">Optional, can be null. <a href="struct_vma_device_memory_callbacks.html#a4f17f7b255101e733b44d5633aceabfb">More...</a><br /></td></tr>
<tr class="separator:a4f17f7b255101e733b44d5633aceabfb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abe8a3328bbc916f6f712fdb6b299444c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a></td></tr>
+<tr class="memitem:abe8a3328bbc916f6f712fdb6b299444c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">pfnFree</a></td></tr>
<tr class="memdesc:abe8a3328bbc916f6f712fdb6b299444c"><td class="mdescLeft"> </td><td class="mdescRight">Optional, can be null. <a href="struct_vma_device_memory_callbacks.html#abe8a3328bbc916f6f712fdb6b299444c">More...</a><br /></td></tr>
<tr class="separator:abe8a3328bbc916f6f712fdb6b299444c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a24052de0937ddd54015a2df0363903c6"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_device_memory_callbacks.html#a24052de0937ddd54015a2df0363903c6">pUserData</a></td></tr>
@@ -98,7 +98,7 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> VmaDeviceMemoryCallbacks::pfnAllocate</td>
+ <td class="memname"><a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a> VmaDeviceMemoryCallbacks::pfnAllocate</td>
</tr>
</table>
</div><div class="memdoc">
@@ -114,7 +114,7 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> VmaDeviceMemoryCallbacks::pfnFree</td>
+ <td class="memname"><a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a> VmaDeviceMemoryCallbacks::pfnFree</td>
</tr>
</table>
</div><div class="memdoc">
diff --git a/docs/html/struct_vma_pool.html b/docs/html/struct_vma_pool.html
index c87851b..d619fb7 100644
--- a/docs/html/struct_vma_pool.html
+++ b/docs/html/struct_vma_pool.html
@@ -62,7 +62,7 @@
</div><!-- top -->
<div class="header">
- <div class="headertitle"><div class="title">VmaPool Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaPool Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -72,7 +72,7 @@
<p><code>#include <vk_mem_alloc.h></code></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Represents custom memory pool. </p>
-<p >Fill structure <a class="el" href="struct_vma_pool_create_info.html" title="Describes parameter of created VmaPool.">VmaPoolCreateInfo</a> and call function <a class="el" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50" title="Allocates Vulkan device memory and creates VmaPool object.">vmaCreatePool()</a> to create it. Call function <a class="el" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1" title="Destroys VmaPool object and frees Vulkan device memory.">vmaDestroyPool()</a> to destroy it.</p>
+<p >Fill structure <a class="el" href="struct_vma_pool_create_info.html" title="Describes parameter of created VmaPool.">VmaPoolCreateInfo</a> and call function <a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50" title="Allocates Vulkan device memory and creates VmaPool object.">vmaCreatePool()</a> to create it. Call function <a class="el" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1" title="Destroys VmaPool object and frees Vulkan device memory.">vmaDestroyPool()</a> to destroy it.</p>
<p >For more information see <a class="el" href="choosing_memory_type.html#choosing_memory_type_custom_memory_pools">Custom memory pools</a>. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
diff --git a/docs/html/struct_vma_pool_create_info.html b/docs/html/struct_vma_pool_create_info.html
index 03c156d..91652c4 100644
--- a/docs/html/struct_vma_pool_create_info.html
+++ b/docs/html/struct_vma_pool_create_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_pool_create_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaPoolCreateInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaPoolCreateInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__alloc.html">Memory allocation</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -79,8 +79,8 @@
<tr class="memitem:a596fa76b685d3f1f688f84a709a5b319"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">memoryTypeIndex</a></td></tr>
<tr class="memdesc:a596fa76b685d3f1f688f84a709a5b319"><td class="mdescLeft"> </td><td class="mdescRight">Vulkan memory type index to allocate this pool from. <a href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319">More...</a><br /></td></tr>
<tr class="separator:a596fa76b685d3f1f688f84a709a5b319"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8405139f63d078340ae74513a59f5446"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a></td></tr>
-<tr class="memdesc:a8405139f63d078340ae74513a59f5446"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. <a href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">More...</a><br /></td></tr>
+<tr class="memitem:a8405139f63d078340ae74513a59f5446"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">flags</a></td></tr>
+<tr class="memdesc:a8405139f63d078340ae74513a59f5446"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. <a href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446">More...</a><br /></td></tr>
<tr class="separator:a8405139f63d078340ae74513a59f5446"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa4265160536cdb9be821b7686c16c676"><td class="memItemLeft" align="right" valign="top">VkDeviceSize </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">blockSize</a></td></tr>
<tr class="memdesc:aa4265160536cdb9be821b7686c16c676"><td class="mdescLeft"> </td><td class="mdescRight">Size of a single <code>VkDeviceMemory</code> block to be allocated as part of this pool, in bytes. Optional. <a href="struct_vma_pool_create_info.html#aa4265160536cdb9be821b7686c16c676">More...</a><br /></td></tr>
@@ -129,12 +129,12 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> VmaPoolCreateInfo::flags</td>
+ <td class="memname"><a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a> VmaPoolCreateInfo::flags</td>
</tr>
</table>
</div><div class="memdoc">
-<p>Use combination of <a class="el" href="vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. </p>
+<p>Use combination of <a class="el" href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. </p>
</div>
</div>
@@ -237,7 +237,7 @@
</div><div class="memdoc">
<p>A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relative to other memory allocations. </p>
-<p >It is used only when <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> flag was used during creation of the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. Otherwise, this variable is ignored. </p>
+<p >It is used only when <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> flag was used during creation of the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. Otherwise, this variable is ignored. </p>
</div>
</div>
diff --git a/docs/html/struct_vma_pool_stats.html b/docs/html/struct_vma_pool_stats.html
index b60aab0..e4e634d 100644
--- a/docs/html/struct_vma_pool_stats.html
+++ b/docs/html/struct_vma_pool_stats.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_pool_stats-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaPoolStats Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaPoolStats Struct Reference<div class="ingroups"><a class="el" href="group__group__stats.html">Statistics</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_stat_info.html b/docs/html/struct_vma_stat_info.html
index 003f8ea..0b2f087 100644
--- a/docs/html/struct_vma_stat_info.html
+++ b/docs/html/struct_vma_stat_info.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_stat_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaStatInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaStatInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__stats.html">Statistics</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_stats.html b/docs/html/struct_vma_stats.html
index 519980e..2435e3b 100644
--- a/docs/html/struct_vma_stats.html
+++ b/docs/html/struct_vma_stats.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_stats-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaStats Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaStats Struct Reference<div class="ingroups"><a class="el" href="group__group__stats.html">Statistics</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/struct_vma_virtual_allocation.html b/docs/html/struct_vma_virtual_allocation.html
new file mode 100644
index 0000000..bfbfd39
--- /dev/null
+++ b/docs/html/struct_vma_virtual_allocation.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.2"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Vulkan Memory Allocator: VmaVirtualAllocation Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Vulkan Memory Allocator
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.2 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">VmaVirtualAllocation Struct Reference<div class="ingroups"><a class="el" href="group__group__virtual.html">Virtual allocator</a></div></div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Represents single memory allocation done inside <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>.
+ <a href="struct_vma_virtual_allocation.html#details">More...</a></p>
+
+<p><code>#include <vk_mem_alloc.h></code></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Represents single memory allocation done inside <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
+<p >Use it as a unique identifier to virtual allocation within the single block. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.2
+</small></address>
+</body>
+</html>
diff --git a/docs/html/struct_vma_virtual_allocation_create_info.html b/docs/html/struct_vma_virtual_allocation_create_info.html
index 79b3dc0..ece83c8 100644
--- a/docs/html/struct_vma_virtual_allocation_create_info.html
+++ b/docs/html/struct_vma_virtual_allocation_create_info.html
@@ -65,11 +65,11 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_virtual_allocation_create_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaVirtualAllocationCreateInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaVirtualAllocationCreateInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__virtual.html">Virtual allocator</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>.
+<p>Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>.
<a href="struct_vma_virtual_allocation_create_info.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
@@ -82,15 +82,15 @@
<tr class="memitem:a9d19709872fc1904a105079e1c885821"><td class="memItemLeft" align="right" valign="top">VkDeviceSize </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821">alignment</a></td></tr>
<tr class="memdesc:a9d19709872fc1904a105079e1c885821"><td class="mdescLeft"> </td><td class="mdescRight">Required alignment of the allocation. Optional. <a href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821">More...</a><br /></td></tr>
<tr class="separator:a9d19709872fc1904a105079e1c885821"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab10e16956cc4bf20ced9de77d1129ea4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4">flags</a></td></tr>
-<tr class="memdesc:ab10e16956cc4bf20ced9de77d1129ea4"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. <a href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4">More...</a><br /></td></tr>
+<tr class="memitem:ab10e16956cc4bf20ced9de77d1129ea4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4">flags</a></td></tr>
+<tr class="memdesc:ab10e16956cc4bf20ced9de77d1129ea4"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. <a href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4">More...</a><br /></td></tr>
<tr class="separator:ab10e16956cc4bf20ced9de77d1129ea4"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a015f8544ca51a7350f7434d42d0587bb"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb">pUserData</a></td></tr>
<tr class="memdesc:a015f8544ca51a7350f7434d42d0587bb"><td class="mdescLeft"> </td><td class="mdescRight">Custom pointer to be associated with the allocation. Optional. <a href="struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb">More...</a><br /></td></tr>
<tr class="separator:a015f8544ca51a7350f7434d42d0587bb"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. </p>
+<div class="textblock"><p >Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="a9d19709872fc1904a105079e1c885821" name="a9d19709872fc1904a105079e1c885821"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d19709872fc1904a105079e1c885821">◆ </a></span>alignment</h2>
@@ -116,12 +116,12 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a> VmaVirtualAllocationCreateInfo::flags</td>
+ <td class="memname"><a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a> VmaVirtualAllocationCreateInfo::flags</td>
</tr>
</table>
</div><div class="memdoc">
-<p>Use combination of <a class="el" href="vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. </p>
+<p>Use combination of <a class="el" href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. </p>
</div>
</div>
diff --git a/docs/html/struct_vma_virtual_allocation_info-members.html b/docs/html/struct_vma_virtual_allocation_info-members.html
index 01fbd7c..f93abbf 100644
--- a/docs/html/struct_vma_virtual_allocation_info-members.html
+++ b/docs/html/struct_vma_virtual_allocation_info-members.html
@@ -68,8 +68,9 @@
<p>This is the complete list of members for <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a>, including all inherited members.</p>
<table class="directory">
- <tr class="even"><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45">pUserData</a></td><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td><td class="entry"></td></tr>
- <tr class="odd"><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b">size</a></td><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5">offset</a></td><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45">pUserData</a></td><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b">size</a></td><td class="entry"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/html/struct_vma_virtual_allocation_info.html b/docs/html/struct_vma_virtual_allocation_info.html
index 06e18b8..45fdbb0 100644
--- a/docs/html/struct_vma_virtual_allocation_info.html
+++ b/docs/html/struct_vma_virtual_allocation_info.html
@@ -65,17 +65,20 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_virtual_allocation_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaVirtualAllocationInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaVirtualAllocationInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__virtual.html">Virtual allocator</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>.
+<p>Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>.
<a href="struct_vma_virtual_allocation_info.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
Public Attributes</h2></td></tr>
+<tr class="memitem:accb40a8205f49ccca3de975da7d1a2b5"><td class="memItemLeft" align="right" valign="top">VkDeviceSize </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5">offset</a></td></tr>
+<tr class="memdesc:accb40a8205f49ccca3de975da7d1a2b5"><td class="mdescLeft"> </td><td class="mdescRight">Offset of the allocation. <a href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5">More...</a><br /></td></tr>
+<tr class="separator:accb40a8205f49ccca3de975da7d1a2b5"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:afb6d6bd0a6813869ea0842048d40aa2b"><td class="memItemLeft" align="right" valign="top">VkDeviceSize </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b">size</a></td></tr>
<tr class="memdesc:afb6d6bd0a6813869ea0842048d40aa2b"><td class="mdescLeft"> </td><td class="mdescRight">Size of the allocation. <a href="struct_vma_virtual_allocation_info.html#afb6d6bd0a6813869ea0842048d40aa2b">More...</a><br /></td></tr>
<tr class="separator:afb6d6bd0a6813869ea0842048d40aa2b"><td class="memSeparator" colspan="2"> </td></tr>
@@ -84,8 +87,25 @@
<tr class="separator:a41d5cb09357656411653d82fee436f45"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. </p>
+<div class="textblock"><p >Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
+<a id="accb40a8205f49ccca3de975da7d1a2b5" name="accb40a8205f49ccca3de975da7d1a2b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accb40a8205f49ccca3de975da7d1a2b5">◆ </a></span>offset</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">VkDeviceSize VmaVirtualAllocationInfo::offset</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Offset of the allocation. </p>
+<p >Offset at which the allocation was made. </p>
+
+</div>
+</div>
<a id="a41d5cb09357656411653d82fee436f45" name="a41d5cb09357656411653d82fee436f45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41d5cb09357656411653d82fee436f45">◆ </a></span>pUserData</h2>
@@ -99,7 +119,7 @@
</div><div class="memdoc">
<p>Custom pointer associated with the allocation. </p>
-<p >Same value as passed in <a class="el" href="struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb" title="Custom pointer to be associated with the allocation. Optional.">VmaVirtualAllocationCreateInfo::pUserData</a> or to <a class="el" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9" title="Changes custom pointer associated with given virtual allocation.">vmaSetVirtualAllocationUserData()</a>. </p>
+<p >Same value as passed in <a class="el" href="struct_vma_virtual_allocation_create_info.html#a015f8544ca51a7350f7434d42d0587bb" title="Custom pointer to be associated with the allocation. Optional.">VmaVirtualAllocationCreateInfo::pUserData</a> or to <a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2" title="Changes custom pointer associated with given virtual allocation.">vmaSetVirtualAllocationUserData()</a>. </p>
</div>
</div>
diff --git a/docs/html/struct_vma_virtual_block.html b/docs/html/struct_vma_virtual_block.html
index 043c20c..7476f3a 100644
--- a/docs/html/struct_vma_virtual_block.html
+++ b/docs/html/struct_vma_virtual_block.html
@@ -62,7 +62,7 @@
</div><!-- top -->
<div class="header">
- <div class="headertitle"><div class="title">VmaVirtualBlock Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaVirtualBlock Struct Reference<div class="ingroups"><a class="el" href="group__group__virtual.html">Virtual allocator</a></div></div></div>
</div><!--header-->
<div class="contents">
@@ -72,7 +72,7 @@
<p><code>#include <vk_mem_alloc.h></code></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory. </p>
-<p >Fill in <a class="el" href="struct_vma_virtual_block_create_info.html" title="Parameters of created VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().">VmaVirtualBlockCreateInfo</a> structure and use <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a> to create it. Use <a class="el" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5" title="Destroys VmaVirtualBlock object.">vmaDestroyVirtualBlock()</a> to destroy it. For more information, see documentation chapter <a class="el" href="virtual_allocator.html">Virtual allocator</a>.</p>
+<p >Fill in <a class="el" href="struct_vma_virtual_block_create_info.html" title="Parameters of created VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().">VmaVirtualBlockCreateInfo</a> structure and use <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a> to create it. Use <a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5" title="Destroys VmaVirtualBlock object.">vmaDestroyVirtualBlock()</a> to destroy it. For more information, see documentation chapter <a class="el" href="virtual_allocator.html">Virtual allocator</a>.</p>
<p >This object is not thread-safe - should not be used from multiple threads simultaneously, must be synchronized externally. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>D:/PROJECTS/Vulkan Memory Allocator/REPO/include/<a class="el" href="vk__mem__alloc_8h.html">vk_mem_alloc.h</a></li>
diff --git a/docs/html/struct_vma_virtual_block_create_info.html b/docs/html/struct_vma_virtual_block_create_info.html
index 6bbffa7..ecfa529 100644
--- a/docs/html/struct_vma_virtual_block_create_info.html
+++ b/docs/html/struct_vma_virtual_block_create_info.html
@@ -65,11 +65,11 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_virtual_block_create_info-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaVirtualBlockCreateInfo Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaVirtualBlockCreateInfo Struct Reference<div class="ingroups"><a class="el" href="group__group__virtual.html">Virtual allocator</a></div></div></div>
</div><!--header-->
<div class="contents">
-<p>Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>.
+<p>Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>.
<a href="struct_vma_virtual_block_create_info.html#details">More...</a></p>
<p><code>#include <vk_mem_alloc.h></code></p>
@@ -79,15 +79,15 @@
<tr class="memitem:a670ab8c6a6e822f3c36781d79e8824e9"><td class="memItemLeft" align="right" valign="top">VkDeviceSize </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9">size</a></td></tr>
<tr class="memdesc:a670ab8c6a6e822f3c36781d79e8824e9"><td class="mdescLeft"> </td><td class="mdescRight">Total size of the virtual block. <a href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9">More...</a><br /></td></tr>
<tr class="separator:a670ab8c6a6e822f3c36781d79e8824e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5838b15c053a0370420e4e1d82d09c09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09">flags</a></td></tr>
-<tr class="memdesc:a5838b15c053a0370420e4e1d82d09c09"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. <a href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09">More...</a><br /></td></tr>
+<tr class="memitem:a5838b15c053a0370420e4e1d82d09c09"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09">flags</a></td></tr>
+<tr class="memdesc:a5838b15c053a0370420e4e1d82d09c09"><td class="mdescLeft"> </td><td class="mdescRight">Use combination of <a class="el" href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. <a href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09">More...</a><br /></td></tr>
<tr class="separator:a5838b15c053a0370420e4e1d82d09c09"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a290283bf915c257d24584872d793ad30"><td class="memItemLeft" align="right" valign="top">const VkAllocationCallbacks * </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html#a290283bf915c257d24584872d793ad30">pAllocationCallbacks</a></td></tr>
<tr class="memdesc:a290283bf915c257d24584872d793ad30"><td class="mdescLeft"> </td><td class="mdescRight">Custom CPU memory allocation callbacks. Optional. <a href="struct_vma_virtual_block_create_info.html#a290283bf915c257d24584872d793ad30">More...</a><br /></td></tr>
<tr class="separator:a290283bf915c257d24584872d793ad30"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p >Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. </p>
+<div class="textblock"><p >Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. </p>
</div><h2 class="groupheader">Member Data Documentation</h2>
<a id="a5838b15c053a0370420e4e1d82d09c09" name="a5838b15c053a0370420e4e1d82d09c09"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5838b15c053a0370420e4e1d82d09c09">◆ </a></span>flags</h2>
@@ -96,12 +96,12 @@
<div class="memproto">
<table class="memname">
<tr>
- <td class="memname"><a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> VmaVirtualBlockCreateInfo::flags</td>
+ <td class="memname"><a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> VmaVirtualBlockCreateInfo::flags</td>
</tr>
</table>
</div><div class="memdoc">
-<p>Use combination of <a class="el" href="vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. </p>
+<p>Use combination of <a class="el" href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. </p>
</div>
</div>
diff --git a/docs/html/struct_vma_vulkan_functions.html b/docs/html/struct_vma_vulkan_functions.html
index a06e02d..e9ba301 100644
--- a/docs/html/struct_vma_vulkan_functions.html
+++ b/docs/html/struct_vma_vulkan_functions.html
@@ -65,7 +65,7 @@
<div class="summary">
<a href="#pub-attribs">Public Attributes</a> |
<a href="struct_vma_vulkan_functions-members.html">List of all members</a> </div>
- <div class="headertitle"><div class="title">VmaVulkanFunctions Struct Reference</div></div>
+ <div class="headertitle"><div class="title">VmaVulkanFunctions Struct Reference<div class="ingroups"><a class="el" href="group__group__init.html">Library initialization</a></div></div></div>
</div><!--header-->
<div class="contents">
diff --git a/docs/html/usage_patterns.html b/docs/html/usage_patterns.html
index 188db8b..55ff169 100644
--- a/docs/html/usage_patterns.html
+++ b/docs/html/usage_patterns.html
@@ -73,7 +73,7 @@
<h1><a class="anchor" id="usage_patterns_common_mistakes"></a>
Common mistakes</h1>
<p ><b>Use of CPU_TO_GPU instead of CPU_ONLY memory</b></p>
-<p ><a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> is recommended only for resources that will be mapped and written by the CPU, as well as read directly by the GPU - like some buffers or textures updated every frame (dynamic). If you create a staging copy of a resource to be written by CPU and then used as a source of transfer to another resource placed in the GPU memory, that staging resource should be created with <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>. Please read the descriptions of these enums carefully for details.</p>
+<p ><a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> is recommended only for resources that will be mapped and written by the CPU, as well as read directly by the GPU - like some buffers or textures updated every frame (dynamic). If you create a staging copy of a resource to be written by CPU and then used as a source of transfer to another resource placed in the GPU memory, that staging resource should be created with <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>. Please read the descriptions of these enums carefully for details.</p>
<p ><b>Unnecessary use of custom pools</b></p>
<p ><a class="el" href="custom_memory_pools.html">Custom memory pools</a> may be useful for special purposes - when you want to keep certain type of resources separate e.g. to reserve minimum amount of memory for them or limit maximum amount of memory they can occupy. For most resources this is not needed and so it is not recommended to create <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> objects and allocations out of them. Allocating from the default pool is sufficient.</p>
<h1><a class="anchor" id="usage_patterns_simple"></a>
@@ -81,23 +81,23 @@
<h2><a class="anchor" id="usage_patterns_simple_render_targets"></a>
Render targets</h2>
<p ><b>When:</b> Any resources that you frequently write and read on GPU, e.g. images used as color attachments (aka "render targets"), depth-stencil attachments, images/buffers used as storage image/buffer (aka "Unordered Access View (UAV)").</p>
-<p ><b>What to do:</b> Create them in video memory that is fastest to access from GPU using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>.</p>
-<p >Consider using <a class="el" href="vk_khr_dedicated_allocation.html">VK_KHR_dedicated_allocation</a> extension and/or manually creating them as dedicated allocations using <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>, especially if they are large or if you plan to destroy and recreate them e.g. when display resolution changes. Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later.</p>
+<p ><b>What to do:</b> Create them in video memory that is fastest to access from GPU using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>.</p>
+<p >Consider using <a class="el" href="vk_khr_dedicated_allocation.html">VK_KHR_dedicated_allocation</a> extension and/or manually creating them as dedicated allocations using <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>, especially if they are large or if you plan to destroy and recreate them e.g. when display resolution changes. Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later.</p>
<h2><a class="anchor" id="usage_patterns_simple_immutable_resources"></a>
Immutable resources</h2>
<p ><b>When:</b> Any resources that you fill on CPU only once (aka "immutable") or infrequently and then read frequently on GPU, e.g. textures, vertex and index buffers, constant buffers that don't change often.</p>
-<p ><b>What to do:</b> Create them in video memory that is fastest to access from GPU using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>.</p>
-<p >To initialize content of such resource, create a CPU-side (aka "staging") copy of it in system memory - <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>, map it, fill it, and submit a transfer from it to the GPU resource. You can keep the staging copy if you need it for another upload transfer in the future. If you don't, you can destroy it or reuse this buffer for uploading different resource after the transfer finishes.</p>
+<p ><b>What to do:</b> Create them in video memory that is fastest to access from GPU using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>.</p>
+<p >To initialize content of such resource, create a CPU-side (aka "staging") copy of it in system memory - <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>, map it, fill it, and submit a transfer from it to the GPU resource. You can keep the staging copy if you need it for another upload transfer in the future. If you don't, you can destroy it or reuse this buffer for uploading different resource after the transfer finishes.</p>
<p >Prefer to create just buffers in system memory rather than images, even for uploading textures. Use <code>vkCmdCopyBufferToImage()</code>. Dont use images with <code>VK_IMAGE_TILING_LINEAR</code>.</p>
<h2><a class="anchor" id="usage_patterns_dynamic_resources"></a>
Dynamic resources</h2>
<p ><b>When:</b> Any resources that change frequently (aka "dynamic"), e.g. every frame or every draw call, written on CPU, read on GPU.</p>
-<p ><b>What to do:</b> Create them using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>. You can map it and write to it directly on CPU, as well as read from it on GPU.</p>
+<p ><b>What to do:</b> Create them using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>. You can map it and write to it directly on CPU, as well as read from it on GPU.</p>
<p >This is a more complex situation. Different solutions are possible, and the best one depends on specific GPU type, but you can use this simple approach for the start. Prefer to write to such resource sequentially (e.g. using <code>memcpy</code>). Don't perform random access or any reads from it on CPU, as it may be very slow. Also note that textures written directly from the host through a mapped pointer need to be in LINEAR not OPTIMAL layout.</p>
<h2><a class="anchor" id="usage_patterns_readback"></a>
Readback</h2>
<p ><b>When:</b> Resources that contain data written by GPU that you want to read back on CPU, e.g. results of some computations.</p>
-<p ><b>What to do:</b> Create them using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>. You can write to them directly on GPU, as well as map and read them on CPU.</p>
+<p ><b>What to do:</b> Create them using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>. You can write to them directly on GPU, as well as map and read them on CPU.</p>
<h1><a class="anchor" id="usage_patterns_advanced"></a>
Advanced patterns</h1>
<h2><a class="anchor" id="usage_patterns_integrated_graphics"></a>
@@ -108,9 +108,9 @@
Direct access versus transfer</h2>
<p >For resources that you frequently write on CPU and read on GPU, many solutions are possible:</p>
<ol type="1">
-<li>Create one copy in video memory using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>, second copy in system memory using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> and submit explicit transfer each time.</li>
-<li>Create just a single copy using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>, map it and fill it on CPU, read it directly on GPU.</li>
-<li>Create just a single copy using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>, map it and fill it on CPU, read it directly on GPU.</li>
+<li>Create one copy in video memory using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>, second copy in system memory using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> and submit explicit transfer each time.</li>
+<li>Create just a single copy using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a>, map it and fill it on CPU, read it directly on GPU.</li>
+<li>Create just a single copy using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a>, map it and fill it on CPU, read it directly on GPU.</li>
</ol>
<p >Which solution is the most efficient depends on your resource and especially on the GPU. It is best to measure it and then make the decision. Some general recommendations:</p>
<ul>
@@ -120,8 +120,8 @@
</ul>
<p >Similarly, for resources that you frequently write on GPU and read on CPU, multiple solutions are possible:</p>
<ol type="1">
-<li>Create one copy in video memory using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>, second copy in system memory using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> and submit explicit tranfer each time.</li>
-<li>Create just single copy using <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>, write to it directly on GPU, map it and read it on CPU.</li>
+<li>Create one copy in video memory using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a>, second copy in system memory using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> and submit explicit tranfer each time.</li>
+<li>Create just single copy using <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a>, write to it directly on GPU, map it and read it on CPU.</li>
</ol>
<p >You should take some measurements to decide which option is faster in case of your specific resource.</p>
<p >Note that textures accessed directly from the host through a mapped pointer need to be in LINEAR layout, which may slow down their usage on the device. Textures accessed only by the device and transfer operations can use OPTIMAL layout.</p>
diff --git a/docs/html/virtual_allocator.html b/docs/html/virtual_allocator.html
index 4fe2641..d281fa4 100644
--- a/docs/html/virtual_allocator.html
+++ b/docs/html/virtual_allocator.html
@@ -75,71 +75,73 @@
<p >To use this functionality, there is no main "allocator" object. You don't need to have <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object created. All you need to do is to create a separate <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object for each block of memory you want to be managed by the allocator:</p>
<ol type="1">
<li>Fill in <a class="el" href="struct_vma_virtual_block_create_info.html" title="Parameters of created VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().">VmaVirtualBlockCreateInfo</a> structure.</li>
-<li>Call <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. Get new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object.</li>
+<li>Call <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. Get new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object.</li>
</ol>
<p >Example:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> blockCreateInfo = {};</div>
<div class="line">blockCreateInfo.<a class="code hl_variable" href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9">size</a> = 1048576; <span class="comment">// 1 MB</span></div>
<div class="line"> </div>
<div class="line"><a class="code hl_struct" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> block;</div>
-<div class="line">VkResult res = <a class="code hl_function" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a>(&blockCreateInfo, &block);</div>
-<div class="ttc" id="astruct_vma_virtual_block_create_info_html"><div class="ttname"><a href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></div><div class="ttdoc">Parameters of created VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1318</div></div>
-<div class="ttc" id="astruct_vma_virtual_block_create_info_html_a670ab8c6a6e822f3c36781d79e8824e9"><div class="ttname"><a href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9">VmaVirtualBlockCreateInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Total size of the virtual block.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1324</div></div>
+<div class="line">VkResult res = <a class="code hl_function" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a>(&blockCreateInfo, &block);</div>
+<div class="ttc" id="agroup__group__virtual_html_gab585754076877265fdae33e5c40ef13b"><div class="ttname"><a href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a></div><div class="ttdeci">VkResult vmaCreateVirtualBlock(const VmaVirtualBlockCreateInfo *pCreateInfo, VmaVirtualBlock *pVirtualBlock)</div><div class="ttdoc">Creates new VmaVirtualBlock object.</div></div>
+<div class="ttc" id="astruct_vma_virtual_block_create_info_html"><div class="ttname"><a href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></div><div class="ttdoc">Parameters of created VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1459</div></div>
+<div class="ttc" id="astruct_vma_virtual_block_create_info_html_a670ab8c6a6e822f3c36781d79e8824e9"><div class="ttname"><a href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9">VmaVirtualBlockCreateInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Total size of the virtual block.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1465</div></div>
<div class="ttc" id="astruct_vma_virtual_block_html"><div class="ttname"><a href="struct_vma_virtual_block.html">VmaVirtualBlock</a></div><div class="ttdoc">Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ab585754076877265fdae33e5c40ef13b"><div class="ttname"><a href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a></div><div class="ttdeci">VkResult vmaCreateVirtualBlock(const VmaVirtualBlockCreateInfo *pCreateInfo, VmaVirtualBlock *pVirtualBlock)</div><div class="ttdoc">Creates new VmaVirtualBlock object.</div></div>
</div><!-- fragment --><h1><a class="anchor" id="virtual_allocator_making_virtual_allocations"></a>
Making virtual allocations</h1>
-<p ><a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object contains internal data structure that keeps track of free and occupied regions using the same code as the main Vulkan memory allocator. However, there is no "virtual allocation" object. When you request a new allocation, a <code>VkDeviceSize</code> number is returned. It is an offset inside the block where the allocation has been placed, but it also uniquely identifies the allocation within this block.</p>
-<p >In order to make an allocation:</p>
+<p ><a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object contains internal data structure that keeps track of free and occupied regions using the same code as the main Vulkan memory allocator. Similarly to <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> for standard GPU allocations, there is <a class="el" href="struct_vma_virtual_allocation.html" title="Represents single memory allocation done inside VmaVirtualBlock.">VmaVirtualAllocation</a> type that represents an opaque handle to an allocation withing the virtual block.</p>
+<p >In order to make such allocation:</p>
<ol type="1">
<li>Fill in <a class="el" href="struct_vma_virtual_allocation_create_info.html" title="Parameters of created virtual allocation to be passed to vmaVirtualAllocate().">VmaVirtualAllocationCreateInfo</a> structure.</li>
-<li>Call <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. Get new <code>VkDeviceSize offset</code> that identifies the allocation.</li>
+<li>Call <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. Get new <a class="el" href="struct_vma_virtual_allocation.html" title="Represents single memory allocation done inside VmaVirtualBlock.">VmaVirtualAllocation</a> object that represents the allocation. You can also receive <code>VkDeviceSize offset</code> that was assigned to the allocation.</li>
</ol>
<p >Example:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> allocCreateInfo = {};</div>
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e">size</a> = 4096; <span class="comment">// 4 KB</span></div>
<div class="line"> </div>
-<div class="line">VkDeviceSize allocOffset;</div>
-<div class="line">res = <a class="code hl_function" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vmaVirtualAllocate</a>(block, &allocCreateInfo, &allocOffset);</div>
+<div class="line"><a class="code hl_struct" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> alloc;</div>
+<div class="line">VkDeviceSize offset;</div>
+<div class="line">res = <a class="code hl_function" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vmaVirtualAllocate</a>(block, &allocCreateInfo, &alloc, &offset);</div>
<div class="line"><span class="keywordflow">if</span>(res == VK_SUCCESS)</div>
<div class="line">{</div>
-<div class="line"> <span class="comment">// Use the 4 KB of your memory starting at allocOffset.</span></div>
+<div class="line"> <span class="comment">// Use the 4 KB of your memory starting at offset.</span></div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">else</span></div>
<div class="line">{</div>
<div class="line"> <span class="comment">// Allocation failed - no space for it could be found. Handle this error!</span></div>
<div class="line">}</div>
-<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></div><div class="ttdoc">Parameters of created virtual allocation to be passed to vmaVirtualAllocate().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1339</div></div>
-<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html_aae08752b86817abd0d944c6025dc603e"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e">VmaVirtualAllocationCreateInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Size of the allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1344</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a1c15925e6745dacee0cfc877fffecec2"><div class="ttname"><a href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vmaVirtualAllocate</a></div><div class="ttdeci">VkResult vmaVirtualAllocate(VmaVirtualBlock virtualBlock, const VmaVirtualAllocationCreateInfo *pCreateInfo, VkDeviceSize *pOffset)</div><div class="ttdoc">Allocates new virtual allocation inside given VmaVirtualBlock.</div></div>
+<div class="ttc" id="agroup__group__virtual_html_ga6b7cdcc1c3e5103c323fedc4e1319e01"><div class="ttname"><a href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vmaVirtualAllocate</a></div><div class="ttdeci">VkResult vmaVirtualAllocate(VmaVirtualBlock virtualBlock, const VmaVirtualAllocationCreateInfo *pCreateInfo, VmaVirtualAllocation *pAllocation, VkDeviceSize *pOffset)</div><div class="ttdoc">Allocates new virtual allocation inside given VmaVirtualBlock.</div></div>
+<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></div><div class="ttdoc">Parameters of created virtual allocation to be passed to vmaVirtualAllocate().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1480</div></div>
+<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html_aae08752b86817abd0d944c6025dc603e"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e">VmaVirtualAllocationCreateInfo::size</a></div><div class="ttdeci">VkDeviceSize size</div><div class="ttdoc">Size of the allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1485</div></div>
+<div class="ttc" id="astruct_vma_virtual_allocation_html"><div class="ttname"><a href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a></div><div class="ttdoc">Represents single memory allocation done inside VmaVirtualBlock.</div></div>
</div><!-- fragment --><h1><a class="anchor" id="virtual_allocator_deallocation"></a>
Deallocation</h1>
-<p >When no longer needed, an allocation can be freed by calling <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a>. You can only pass to this function the exact offset that was previously returned by <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a> and not any other location within the memory.</p>
-<p >When whole block is no longer needed, the block object can be released by calling <a class="el" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5" title="Destroys VmaVirtualBlock object.">vmaDestroyVirtualBlock()</a>. All allocations must be freed before the block is destroyed, which is checked internally by an assert. However, if you don't want to call <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> for each allocation, you can use <a class="el" href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571" title="Frees all virtual allocations inside given VmaVirtualBlock.">vmaClearVirtualBlock()</a> to free them all at once - a feature not available in normal Vulkan memory allocator. Example:</p>
-<div class="fragment"><div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vmaVirtualFree</a>(block, allocOffset);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a>(block);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a13f01c44b3c1a06e695f1f5d24b80639"><div class="ttname"><a href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vmaVirtualFree</a></div><div class="ttdeci">void vmaVirtualFree(VmaVirtualBlock virtualBlock, VkDeviceSize offset)</div><div class="ttdoc">Frees virtual allocation inside given VmaVirtualBlock.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a3795f7783ae2c182cede067d656f66a5"><div class="ttname"><a href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a></div><div class="ttdeci">void vmaDestroyVirtualBlock(VmaVirtualBlock virtualBlock)</div><div class="ttdoc">Destroys VmaVirtualBlock object.</div></div>
+<p >When no longer needed, an allocation can be freed by calling <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a>. You can only pass to this function an allocation that was previously returned by <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a> called for the same <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>.</p>
+<p >When whole block is no longer needed, the block object can be released by calling <a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5" title="Destroys VmaVirtualBlock object.">vmaDestroyVirtualBlock()</a>. All allocations must be freed before the block is destroyed, which is checked internally by an assert. However, if you don't want to call <a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> for each allocation, you can use <a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571" title="Frees all virtual allocations inside given VmaVirtualBlock.">vmaClearVirtualBlock()</a> to free them all at once - a feature not available in normal Vulkan memory allocator. Example:</p>
+<div class="fragment"><div class="line"><a class="code hl_function" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vmaVirtualFree</a>(block, alloc);</div>
+<div class="line"><a class="code hl_function" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a>(block);</div>
+<div class="ttc" id="agroup__group__virtual_html_ga09fc688c0c3653ff23723b037e5d5033"><div class="ttname"><a href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vmaVirtualFree</a></div><div class="ttdeci">void vmaVirtualFree(VmaVirtualBlock virtualBlock, VmaVirtualAllocation allocation)</div><div class="ttdoc">Frees virtual allocation inside given VmaVirtualBlock.</div></div>
+<div class="ttc" id="agroup__group__virtual_html_ga3795f7783ae2c182cede067d656f66a5"><div class="ttname"><a href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a></div><div class="ttdeci">void vmaDestroyVirtualBlock(VmaVirtualBlock virtualBlock)</div><div class="ttdoc">Destroys VmaVirtualBlock object.</div></div>
</div><!-- fragment --><h1><a class="anchor" id="virtual_allocator_allocation_parameters"></a>
Allocation parameters</h1>
-<p >You can attach a custom pointer to each allocation by using <a class="el" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9" title="Changes custom pointer associated with given virtual allocation.">vmaSetVirtualAllocationUserData()</a>. Its default value is null. It can be used to store any data that needs to be associated with that allocation - e.g. an index, a handle, or a pointer to some larger data structure containing more information. Example:</p>
+<p >You can attach a custom pointer to each allocation by using <a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2" title="Changes custom pointer associated with given virtual allocation.">vmaSetVirtualAllocationUserData()</a>. Its default value is null. It can be used to store any data that needs to be associated with that allocation - e.g. an index, a handle, or a pointer to some larger data structure containing more information. Example:</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>CustomAllocData</div>
<div class="line">{</div>
<div class="line"> std::string m_AllocName;</div>
<div class="line">};</div>
<div class="line">CustomAllocData* allocData = <span class="keyword">new</span> CustomAllocData();</div>
<div class="line">allocData->m_AllocName = <span class="stringliteral">"My allocation 1"</span>;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">vmaSetVirtualAllocationUserData</a>(block, allocOffset, allocData);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4b96f835d38686df937e097a0c7db5e9"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">vmaSetVirtualAllocationUserData</a></div><div class="ttdeci">void vmaSetVirtualAllocationUserData(VmaVirtualBlock virtualBlock, VkDeviceSize offset, void *pUserData)</div><div class="ttdoc">Changes custom pointer associated with given virtual allocation.</div></div>
-</div><!-- fragment --><p >The pointer can later be fetched, along with allocation size, by passing the allocation offset to function <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a> and inspecting returned structure <a class="el" href="struct_vma_virtual_allocation_info.html" title="Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().">VmaVirtualAllocationInfo</a>. If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation! Example:</p>
+<div class="line"><a class="code hl_function" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vmaSetVirtualAllocationUserData</a>(block, alloc, allocData);</div>
+<div class="ttc" id="agroup__group__virtual_html_ga001ea1850458a4062b829e09c303fca2"><div class="ttname"><a href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vmaSetVirtualAllocationUserData</a></div><div class="ttdeci">void vmaSetVirtualAllocationUserData(VmaVirtualBlock virtualBlock, VmaVirtualAllocation allocation, void *pUserData)</div><div class="ttdoc">Changes custom pointer associated with given virtual allocation.</div></div>
+</div><!-- fragment --><p >The pointer can later be fetched, along with allocation offset and size, by passing the allocation handle to function <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a> and inspecting returned structure <a class="el" href="struct_vma_virtual_allocation_info.html" title="Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().">VmaVirtualAllocationInfo</a>. If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation! Example:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> allocInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">vmaGetVirtualAllocationInfo</a>(block, allocOffset, &allocInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vmaGetVirtualAllocationInfo</a>(block, alloc, &allocInfo);</div>
<div class="line"><span class="keyword">delete</span> (CustomAllocData*)allocInfo.<a class="code hl_variable" href="struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45">pUserData</a>;</div>
<div class="line"> </div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vmaVirtualFree</a>(block, allocOffset);</div>
-<div class="ttc" id="astruct_vma_virtual_allocation_info_html"><div class="ttname"><a href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></div><div class="ttdoc">Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1362</div></div>
-<div class="ttc" id="astruct_vma_virtual_allocation_info_html_a41d5cb09357656411653d82fee436f45"><div class="ttname"><a href="struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45">VmaVirtualAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom pointer associated with the allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1372</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_ab5fcb961ffea69023e7e0ea100bdad8e"><div class="ttname"><a href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">vmaGetVirtualAllocationInfo</a></div><div class="ttdeci">void vmaGetVirtualAllocationInfo(VmaVirtualBlock virtualBlock, VkDeviceSize offset, VmaVirtualAllocationInfo *pVirtualAllocInfo)</div><div class="ttdoc">Returns information about a specific virtual allocation within a virtual block, like its size and pUs...</div></div>
+<div class="line"><a class="code hl_function" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vmaVirtualFree</a>(block, alloc);</div>
+<div class="ttc" id="agroup__group__virtual_html_ga8ee14ceb1fe033ec84d8aa29e1f75afa"><div class="ttname"><a href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vmaGetVirtualAllocationInfo</a></div><div class="ttdeci">void vmaGetVirtualAllocationInfo(VmaVirtualBlock virtualBlock, VmaVirtualAllocation allocation, VmaVirtualAllocationInfo *pVirtualAllocInfo)</div><div class="ttdoc">Returns information about a specific virtual allocation within a virtual block, like its size and pUs...</div></div>
+<div class="ttc" id="astruct_vma_virtual_allocation_info_html"><div class="ttname"><a href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></div><div class="ttdoc">Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1503</div></div>
+<div class="ttc" id="astruct_vma_virtual_allocation_info_html_a41d5cb09357656411653d82fee436f45"><div class="ttname"><a href="struct_vma_virtual_allocation_info.html#a41d5cb09357656411653d82fee436f45">VmaVirtualAllocationInfo::pUserData</a></div><div class="ttdeci">void * pUserData</div><div class="ttdoc">Custom pointer associated with the allocation.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1518</div></div>
</div><!-- fragment --><h1><a class="anchor" id="virtual_allocator_alignment_and_units"></a>
Alignment and units</h1>
<p >It feels natural to express sizes and offsets in bytes. If an offset of an allocation needs to be aligned to a multiply of some number (e.g. 4 bytes), you can fill optional member <a class="el" href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821" title="Required alignment of the allocation. Optional.">VmaVirtualAllocationCreateInfo::alignment</a> to request it. Example:</p>
@@ -147,31 +149,31 @@
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e">size</a> = 4096; <span class="comment">// 4 KB</span></div>
<div class="line">allocCreateInfo.<a class="code hl_variable" href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821">alignment</a> = 4; <span class="comment">// Returned offset must be a multiply of 4 B</span></div>
<div class="line"> </div>
-<div class="line">VkDeviceSize allocOffset;</div>
-<div class="line">res = <a class="code hl_function" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vmaVirtualAllocate</a>(block, &allocCreateInfo, &allocOffset);</div>
-<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html_a9d19709872fc1904a105079e1c885821"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821">VmaVirtualAllocationCreateInfo::alignment</a></div><div class="ttdeci">VkDeviceSize alignment</div><div class="ttdoc">Required alignment of the allocation. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1349</div></div>
+<div class="line"><a class="code hl_struct" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> alloc;</div>
+<div class="line">res = <a class="code hl_function" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vmaVirtualAllocate</a>(block, &allocCreateInfo, &alloc, <span class="keyword">nullptr</span>);</div>
+<div class="ttc" id="astruct_vma_virtual_allocation_create_info_html_a9d19709872fc1904a105079e1c885821"><div class="ttname"><a href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821">VmaVirtualAllocationCreateInfo::alignment</a></div><div class="ttdeci">VkDeviceSize alignment</div><div class="ttdoc">Required alignment of the allocation. Optional.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1490</div></div>
</div><!-- fragment --><p >Alignments of different allocations made from one block may vary. However, if all alignments and sizes are always multiply of some size e.g. 4 B or <code>sizeof(MyDataStruct)</code>, you can express all sizes, alignments, and offsets in multiples of that size instead of individual bytes. It might be more convenient, but you need to make sure to use this new unit consistently in all the places:</p>
<ul>
<li><a class="el" href="struct_vma_virtual_block_create_info.html#a670ab8c6a6e822f3c36781d79e8824e9" title="Total size of the virtual block.">VmaVirtualBlockCreateInfo::size</a></li>
<li><a class="el" href="struct_vma_virtual_allocation_create_info.html#aae08752b86817abd0d944c6025dc603e" title="Size of the allocation.">VmaVirtualAllocationCreateInfo::size</a> and <a class="el" href="struct_vma_virtual_allocation_create_info.html#a9d19709872fc1904a105079e1c885821" title="Required alignment of the allocation. Optional.">VmaVirtualAllocationCreateInfo::alignment</a></li>
-<li>Using offset returned by <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a></li>
+<li>Using offset returned by <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a> or in <a class="el" href="struct_vma_virtual_allocation_info.html#accb40a8205f49ccca3de975da7d1a2b5" title="Offset of the allocation.">VmaVirtualAllocationInfo::offset</a></li>
</ul>
<h1><a class="anchor" id="virtual_allocator_statistics"></a>
Statistics</h1>
-<p >You can obtain statistics of a virtual block using <a class="el" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a" title="Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...">vmaCalculateVirtualBlockStats()</a>. The function fills structure <a class="el" href="struct_vma_stat_info.html" title="Calculated statistics of memory usage in entire allocator.">VmaStatInfo</a> - same as used by the normal Vulkan memory allocator. Example:</p>
+<p >You can obtain statistics of a virtual block using <a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a" title="Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...">vmaCalculateVirtualBlockStats()</a>. The function fills structure <a class="el" href="struct_vma_stat_info.html" title="Calculated statistics of memory usage in entire allocator.">VmaStatInfo</a> - same as used by the normal Vulkan memory allocator. Example:</p>
<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_vma_stat_info.html">VmaStatInfo</a> statInfo;</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a>(block, &statInfo);</div>
+<div class="line"><a class="code hl_function" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a>(block, &statInfo);</div>
<div class="line">printf(<span class="stringliteral">"My virtual block has %llu bytes used by %u virtual allocations\n"</span>,</div>
<div class="line"> statInfo.<a class="code hl_variable" href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">usedBytes</a>, statInfo.<a class="code hl_variable" href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">allocationCount</a>);</div>
-<div class="ttc" id="astruct_vma_stat_info_html"><div class="ttname"><a href="struct_vma_stat_info.html">VmaStatInfo</a></div><div class="ttdoc">Calculated statistics of memory usage in entire allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:953</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_a537741e4d5cdddc1c0ab95ec650afaff"><div class="ttname"><a href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">VmaStatInfo::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of VmaAllocation allocation objects allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:957</div></div>
-<div class="ttc" id="astruct_vma_stat_info_html_ab0c6c73837e5a70c749fbd4f6064895a"><div class="ttname"><a href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">VmaStatInfo::usedBytes</a></div><div class="ttdeci">VkDeviceSize usedBytes</div><div class="ttdoc">Total number of bytes occupied by all allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:961</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a95169b4730e94757897470086ec2768a"><div class="ttname"><a href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a></div><div class="ttdeci">void vmaCalculateVirtualBlockStats(VmaVirtualBlock virtualBlock, VmaStatInfo *pStatInfo)</div><div class="ttdoc">Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...</div></div>
-</div><!-- fragment --><p >You can also request a full list of allocations and free regions as a string in JSON format by calling <a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. Returned string must be later freed using <a class="el" href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623" title="Frees a string returned by vmaBuildVirtualBlockStatsString().">vmaFreeVirtualBlockStatsString()</a>. The format of this string differs from the one returned by the main Vulkan allocator, but it is similar.</p>
+<div class="ttc" id="agroup__group__virtual_html_ga95169b4730e94757897470086ec2768a"><div class="ttname"><a href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a></div><div class="ttdeci">void vmaCalculateVirtualBlockStats(VmaVirtualBlock virtualBlock, VmaStatInfo *pStatInfo)</div><div class="ttdoc">Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html"><div class="ttname"><a href="struct_vma_stat_info.html">VmaStatInfo</a></div><div class="ttdoc">Calculated statistics of memory usage in entire allocator.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1066</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_a537741e4d5cdddc1c0ab95ec650afaff"><div class="ttname"><a href="struct_vma_stat_info.html#a537741e4d5cdddc1c0ab95ec650afaff">VmaStatInfo::allocationCount</a></div><div class="ttdeci">uint32_t allocationCount</div><div class="ttdoc">Number of VmaAllocation allocation objects allocated.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1070</div></div>
+<div class="ttc" id="astruct_vma_stat_info_html_ab0c6c73837e5a70c749fbd4f6064895a"><div class="ttname"><a href="struct_vma_stat_info.html#ab0c6c73837e5a70c749fbd4f6064895a">VmaStatInfo::usedBytes</a></div><div class="ttdeci">VkDeviceSize usedBytes</div><div class="ttdoc">Total number of bytes occupied by all allocations.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:1074</div></div>
+</div><!-- fragment --><p >You can also request a full list of allocations and free regions as a string in JSON format by calling <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. Returned string must be later freed using <a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623" title="Frees a string returned by vmaBuildVirtualBlockStatsString().">vmaFreeVirtualBlockStatsString()</a>. The format of this string differs from the one returned by the main Vulkan allocator, but it is similar.</p>
<h1><a class="anchor" id="virtual_allocator_additional_considerations"></a>
Additional considerations</h1>
<p >The "virtual allocator" functionality is implemented on a level of individual memory blocks. Keeping track of a whole collection of blocks, allocating new ones when out of free space, deleting empty ones, and deciding which one to try first for a new allocation must be implemented by the user.</p>
-<p >Alternative allocation algorithms are supported, just like in custom pools of the real GPU memory. See enum <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a> to learn how to specify them (e.g. <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" title="Enables alternative, linear allocation algorithm in this virtual block.">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a>). You can find their description in chapter <a class="el" href="custom_memory_pools.html">Custom memory pools</a>. Allocation strategies are also supported. See enum <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a> to learn how to specify them (e.g. <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b" title="Allocation strategy that tries to minimize allocation time.">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a>).</p>
+<p >Alternative allocation algorithms are supported, just like in custom pools of the real GPU memory. See enum <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a> to learn how to specify them (e.g. <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" title="Enables alternative, linear allocation algorithm in this virtual block.">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a>). You can find their description in chapter <a class="el" href="custom_memory_pools.html">Custom memory pools</a>. Allocation strategies are also supported. See enum <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a> to learn how to specify them (e.g. <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b" title="Allocation strategy that tries to minimize allocation time.">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a>).</p>
<p >Following features are supported only by the allocator of the real GPU memory and not by virtual allocations: buffer-image granularity, <code>VMA_DEBUG_MARGIN</code>, <code>VMA_MIN_ALIGNMENT</code>. </p>
</div></div><!-- contents -->
</div><!-- PageDoc -->
diff --git a/docs/html/vk__mem__alloc_8h.html b/docs/html/vk__mem__alloc_8h.html
index f73790b..2f39050 100644
--- a/docs/html/vk__mem__alloc_8h.html
+++ b/docs/html/vk__mem__alloc_8h.html
@@ -109,7 +109,7 @@
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="struct_vma_pool_stats.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="struct_vma_allocation_info.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="struct_vma_allocation_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for defragmentation. <a href="struct_vma_defragmentation_info2.html#details">More...</a><br /></td></tr>
@@ -120,19 +120,19 @@
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for incremental defragmentation steps. <a href="struct_vma_defragmentation_pass_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_info.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_stats.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="struct_vma_defragmentation_stats.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="struct_vma_virtual_block_create_info.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="struct_vma_virtual_block_create_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="struct_vma_virtual_allocation_create_info.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="struct_vma_virtual_allocation_create_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="struct_vma_virtual_allocation_info.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="struct_vma_virtual_allocation_info.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
@@ -152,373 +152,382 @@
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
-<tr class="memitem:afd73b95e737ee7e76f827cb5472f559f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f">VmaAllocatorCreateFlagBits</a></td></tr>
-<tr class="memdesc:afd73b95e737ee7e76f827cb5472f559f"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="vk__mem__alloc_8h.html#afd73b95e737ee7e76f827cb5472f559f">More...</a><br /></td></tr>
-<tr class="separator:afd73b95e737ee7e76f827cb5472f559f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acfe6863e160722c2c1bbcf7573fddc4d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></td></tr>
-<tr class="separator:acfe6863e160722c2c1bbcf7573fddc4d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a806e8499dde802e59eb72a1dc811c35f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a806e8499dde802e59eb72a1dc811c35f">VmaMemoryUsage</a></td></tr>
-<tr class="separator:a806e8499dde802e59eb72a1dc811c35f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4fceecc301f4064dc808d3cd6c038941"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941">VmaAllocationCreateFlagBits</a></td></tr>
-<tr class="memdesc:a4fceecc301f4064dc808d3cd6c038941"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a4fceecc301f4064dc808d3cd6c038941">More...</a><br /></td></tr>
-<tr class="separator:a4fceecc301f4064dc808d3cd6c038941"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5225e5e11f8376f6a31a1791f3d6e817"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></td></tr>
-<tr class="separator:a5225e5e11f8376f6a31a1791f3d6e817"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4d4f2efc2509157a9e4ecd4fd7942303"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303">VmaPoolCreateFlagBits</a></td></tr>
-<tr class="memdesc:a4d4f2efc2509157a9e4ecd4fd7942303"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a4d4f2efc2509157a9e4ecd4fd7942303">More...</a><br /></td></tr>
-<tr class="separator:a4d4f2efc2509157a9e4ecd4fd7942303"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2770e325ea42e087c1b91fdf46d0292a"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></td></tr>
-<tr class="memdesc:a2770e325ea42e087c1b91fdf46d0292a"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. <a href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">More...</a><br /></td></tr>
-<tr class="separator:a2770e325ea42e087c1b91fdf46d0292a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a13415cc0b443353a7b5abda300b833fc"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc">VmaDefragmentationFlagBits</a></td></tr>
-<tr class="memdesc:a13415cc0b443353a7b5abda300b833fc"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="vk__mem__alloc_8h.html#a13415cc0b443353a7b5abda300b833fc">More...</a><br /></td></tr>
-<tr class="separator:a13415cc0b443353a7b5abda300b833fc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a88a77cef37e5d3c4fc9eb328885d048d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></td></tr>
-<tr class="separator:a88a77cef37e5d3c4fc9eb328885d048d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0860ba1c0a67178fae4aecb63a78573e"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e">VmaVirtualBlockCreateFlagBits</a></td></tr>
-<tr class="memdesc:a0860ba1c0a67178fae4aecb63a78573e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a0860ba1c0a67178fae4aecb63a78573e">More...</a><br /></td></tr>
-<tr class="separator:a0860ba1c0a67178fae4aecb63a78573e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e">VmaVirtualBlockCreateFlags</a></td></tr>
-<tr class="memdesc:a4e49c2f0ab7f6b4868833e5bac78d91e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. <a href="vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e">More...</a><br /></td></tr>
-<tr class="separator:a4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a936815e64946a6b6d812d08d10184c23"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23">VmaVirtualAllocationCreateFlagBits</a></td></tr>
-<tr class="memdesc:a936815e64946a6b6d812d08d10184c23"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a936815e64946a6b6d812d08d10184c23">More...</a><br /></td></tr>
-<tr class="separator:a936815e64946a6b6d812d08d10184c23"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae96ffc099bf898257fb19e9410ed08a7"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a></td></tr>
-<tr class="memdesc:ae96ffc099bf898257fb19e9410ed08a7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. <a href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">More...</a><br /></td></tr>
-<tr class="separator:ae96ffc099bf898257fb19e9410ed08a7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7e1ed85f7799600b03ad51a77acc21f3"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
-<tr class="memdesc:a7e1ed85f7799600b03ad51a77acc21f3"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called after successful vkAllocateMemory. <a href="vk__mem__alloc_8h.html#a7e1ed85f7799600b03ad51a77acc21f3">More...</a><br /></td></tr>
-<tr class="separator:a7e1ed85f7799600b03ad51a77acc21f3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a154ccaaf53dc2c36378f80f0c4f3679b"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
-<tr class="memdesc:a154ccaaf53dc2c36378f80f0c4f3679b"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called before vkFreeMemory. <a href="vk__mem__alloc_8h.html#a154ccaaf53dc2c36378f80f0c4f3679b">More...</a><br /></td></tr>
-<tr class="separator:a154ccaaf53dc2c36378f80f0c4f3679b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a77692d3c8770ea8882d573206bd27b2b"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a></td></tr>
-<tr class="memdesc:a77692d3c8770ea8882d573206bd27b2b"><td class="mdescLeft"> </td><td class="mdescRight">Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. <a href="vk__mem__alloc_8h.html#a77692d3c8770ea8882d573206bd27b2b">More...</a><br /></td></tr>
-<tr class="separator:a77692d3c8770ea8882d573206bd27b2b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abb0a8e3b5040d847571cca6c7f9a8074"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">VmaVulkanFunctions</a></td></tr>
-<tr class="memdesc:abb0a8e3b5040d847571cca6c7f9a8074"><td class="mdescLeft"> </td><td class="mdescRight">Pointers to some Vulkan functions - a subset used by the library. <a href="vk__mem__alloc_8h.html#abb0a8e3b5040d847571cca6c7f9a8074">More...</a><br /></td></tr>
-<tr class="separator:abb0a8e3b5040d847571cca6c7f9a8074"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aad9652301d33759b83e52d4f3605a14a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">VmaAllocatorCreateInfo</a></td></tr>
-<tr class="memdesc:aad9652301d33759b83e52d4f3605a14a"><td class="mdescLeft"> </td><td class="mdescRight">Description of a Allocator to be created. <a href="vk__mem__alloc_8h.html#aad9652301d33759b83e52d4f3605a14a">More...</a><br /></td></tr>
-<tr class="separator:aad9652301d33759b83e52d4f3605a14a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1988031b0223fdbd564250fa1edd942c"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a></td></tr>
-<tr class="memdesc:a1988031b0223fdbd564250fa1edd942c"><td class="mdescLeft"> </td><td class="mdescRight">Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="vk__mem__alloc_8h.html#a1988031b0223fdbd564250fa1edd942c">More...</a><br /></td></tr>
-<tr class="separator:a1988031b0223fdbd564250fa1edd942c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aec5b57e29c97b5d69c6d5654d60df878"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">VmaStatInfo</a></td></tr>
-<tr class="memdesc:aec5b57e29c97b5d69c6d5654d60df878"><td class="mdescLeft"> </td><td class="mdescRight">Calculated statistics of memory usage in entire allocator. <a href="vk__mem__alloc_8h.html#aec5b57e29c97b5d69c6d5654d60df878">More...</a><br /></td></tr>
-<tr class="separator:aec5b57e29c97b5d69c6d5654d60df878"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a21813b2efdf3836767a9058cd8a94034"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stats.html">VmaStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">VmaStats</a></td></tr>
-<tr class="memdesc:a21813b2efdf3836767a9058cd8a94034"><td class="mdescLeft"> </td><td class="mdescRight">General statistics from current state of Allocator. <a href="vk__mem__alloc_8h.html#a21813b2efdf3836767a9058cd8a94034">More...</a><br /></td></tr>
-<tr class="separator:a21813b2efdf3836767a9058cd8a94034"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa078667e71b1ef24e87a6a30d128381d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_budget.html">VmaBudget</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">VmaBudget</a></td></tr>
-<tr class="memdesc:aa078667e71b1ef24e87a6a30d128381d"><td class="mdescLeft"> </td><td class="mdescRight">Statistics of current memory usage and available budget, in bytes, for specific memory heap. <a href="vk__mem__alloc_8h.html#aa078667e71b1ef24e87a6a30d128381d">More...</a><br /></td></tr>
-<tr class="separator:aa078667e71b1ef24e87a6a30d128381d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3bf110892ea2fb4649fedb68488d026a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a3bf110892ea2fb4649fedb68488d026a">VmaAllocationCreateInfo</a></td></tr>
-<tr class="separator:a3bf110892ea2fb4649fedb68488d026a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1017aa83489c0eee8d2163d2bf253f67"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a></td></tr>
-<tr class="memdesc:a1017aa83489c0eee8d2163d2bf253f67"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="vk__mem__alloc_8h.html#a1017aa83489c0eee8d2163d2bf253f67">More...</a><br /></td></tr>
-<tr class="separator:a1017aa83489c0eee8d2163d2bf253f67"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4759a2d9f99c19ba7627553c847132f1"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a></td></tr>
-<tr class="memdesc:a4759a2d9f99c19ba7627553c847132f1"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="vk__mem__alloc_8h.html#a4759a2d9f99c19ba7627553c847132f1">More...</a><br /></td></tr>
-<tr class="separator:a4759a2d9f99c19ba7627553c847132f1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1cf7774606721026a68aabe3af2e5b50"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a></td></tr>
-<tr class="memdesc:a1cf7774606721026a68aabe3af2e5b50"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="vk__mem__alloc_8h.html#a1cf7774606721026a68aabe3af2e5b50">More...</a><br /></td></tr>
-<tr class="separator:a1cf7774606721026a68aabe3af2e5b50"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad6daeffaa670ce6d11a203a6224c9937"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a></td></tr>
-<tr class="memdesc:ad6daeffaa670ce6d11a203a6224c9937"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for defragmentation. <a href="vk__mem__alloc_8h.html#ad6daeffaa670ce6d11a203a6224c9937">More...</a><br /></td></tr>
-<tr class="separator:ad6daeffaa670ce6d11a203a6224c9937"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a></td></tr>
-<tr class="separator:ad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a72aebd522242d56abea67b4f47f6549e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a></td></tr>
-<tr class="memdesc:a72aebd522242d56abea67b4f47f6549e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for incremental defragmentation steps. <a href="vk__mem__alloc_8h.html#a72aebd522242d56abea67b4f47f6549e">More...</a><br /></td></tr>
-<tr class="separator:a72aebd522242d56abea67b4f47f6549e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2bf47f96bf92bed2a49461bd9af3acfa"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a></td></tr>
-<tr class="memdesc:a2bf47f96bf92bed2a49461bd9af3acfa"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="vk__mem__alloc_8h.html#a2bf47f96bf92bed2a49461bd9af3acfa">More...</a><br /></td></tr>
-<tr class="separator:a2bf47f96bf92bed2a49461bd9af3acfa"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad94034192259c2e34a4d1c5e27810403"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a></td></tr>
-<tr class="memdesc:ad94034192259c2e34a4d1c5e27810403"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="vk__mem__alloc_8h.html#ad94034192259c2e34a4d1c5e27810403">More...</a><br /></td></tr>
-<tr class="separator:ad94034192259c2e34a4d1c5e27810403"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4753d42d40217a3a652a3cdf253ad773"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773">VmaVirtualBlockCreateInfo</a></td></tr>
-<tr class="memdesc:a4753d42d40217a3a652a3cdf253ad773"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="vk__mem__alloc_8h.html#a4753d42d40217a3a652a3cdf253ad773">More...</a><br /></td></tr>
-<tr class="separator:a4753d42d40217a3a652a3cdf253ad773"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac3c90d80bedc6847a41b82d0e2158c9e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e">VmaVirtualAllocationCreateInfo</a></td></tr>
-<tr class="memdesc:ac3c90d80bedc6847a41b82d0e2158c9e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="vk__mem__alloc_8h.html#ac3c90d80bedc6847a41b82d0e2158c9e">More...</a><br /></td></tr>
-<tr class="separator:ac3c90d80bedc6847a41b82d0e2158c9e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc">VmaVirtualAllocationInfo</a></td></tr>
-<tr class="memdesc:a75bc33ff7cf18c98e101f570dc2a5ebc"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="vk__mem__alloc_8h.html#a75bc33ff7cf18c98e101f570dc2a5ebc">More...</a><br /></td></tr>
-<tr class="separator:a75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafd73b95e737ee7e76f827cb5472f559f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f">VmaAllocatorCreateFlagBits</a></td></tr>
+<tr class="memdesc:gafd73b95e737ee7e76f827cb5472f559f"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="group__group__init.html#gafd73b95e737ee7e76f827cb5472f559f">More...</a><br /></td></tr>
+<tr class="separator:gafd73b95e737ee7e76f827cb5472f559f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacfe6863e160722c2c1bbcf7573fddc4d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gacfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></td></tr>
+<tr class="separator:gacfe6863e160722c2c1bbcf7573fddc4d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga806e8499dde802e59eb72a1dc811c35f"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f">VmaMemoryUsage</a></td></tr>
+<tr class="memdesc:ga806e8499dde802e59eb72a1dc811c35f"><td class="mdescLeft"> </td><td class="mdescRight">Intended usage of the allocated memory. <a href="group__group__alloc.html#ga806e8499dde802e59eb72a1dc811c35f">More...</a><br /></td></tr>
+<tr class="separator:ga806e8499dde802e59eb72a1dc811c35f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4fceecc301f4064dc808d3cd6c038941"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941">VmaAllocationCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga4fceecc301f4064dc808d3cd6c038941"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="group__group__alloc.html#ga4fceecc301f4064dc808d3cd6c038941">More...</a><br /></td></tr>
+<tr class="separator:ga4fceecc301f4064dc808d3cd6c038941"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5225e5e11f8376f6a31a1791f3d6e817"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></td></tr>
+<tr class="separator:ga5225e5e11f8376f6a31a1791f3d6e817"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303">VmaPoolCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="group__group__alloc.html#ga4d4f2efc2509157a9e4ecd4fd7942303">More...</a><br /></td></tr>
+<tr class="separator:ga4d4f2efc2509157a9e4ecd4fd7942303"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2770e325ea42e087c1b91fdf46d0292a"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></td></tr>
+<tr class="memdesc:ga2770e325ea42e087c1b91fdf46d0292a"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. See <a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. <a href="group__group__alloc.html#ga2770e325ea42e087c1b91fdf46d0292a">More...</a><br /></td></tr>
+<tr class="separator:ga2770e325ea42e087c1b91fdf46d0292a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga13415cc0b443353a7b5abda300b833fc"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc">VmaDefragmentationFlagBits</a></td></tr>
+<tr class="memdesc:ga13415cc0b443353a7b5abda300b833fc"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="group__group__alloc.html#ga13415cc0b443353a7b5abda300b833fc">More...</a><br /></td></tr>
+<tr class="separator:ga13415cc0b443353a7b5abda300b833fc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88a77cef37e5d3c4fc9eb328885d048d"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></td></tr>
+<tr class="separator:ga88a77cef37e5d3c4fc9eb328885d048d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0860ba1c0a67178fae4aecb63a78573e"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e">VmaVirtualBlockCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga0860ba1c0a67178fae4aecb63a78573e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="group__group__virtual.html#ga0860ba1c0a67178fae4aecb63a78573e">More...</a><br /></td></tr>
+<tr class="separator:ga0860ba1c0a67178fae4aecb63a78573e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">VmaVirtualBlockCreateFlags</a></td></tr>
+<tr class="memdesc:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. <a href="group__group__virtual.html#ga4e49c2f0ab7f6b4868833e5bac78d91e">More...</a><br /></td></tr>
+<tr class="separator:ga4e49c2f0ab7f6b4868833e5bac78d91e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga936815e64946a6b6d812d08d10184c23"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23">VmaVirtualAllocationCreateFlagBits</a></td></tr>
+<tr class="memdesc:ga936815e64946a6b6d812d08d10184c23"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="group__group__virtual.html#ga936815e64946a6b6d812d08d10184c23">More...</a><br /></td></tr>
+<tr class="separator:ga936815e64946a6b6d812d08d10184c23"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae96ffc099bf898257fb19e9410ed08a7"><td class="memItemLeft" align="right" valign="top">typedef VkFlags </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a></td></tr>
+<tr class="memdesc:gae96ffc099bf898257fb19e9410ed08a7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. See <a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. <a href="group__group__virtual.html#gae96ffc099bf898257fb19e9410ed08a7">More...</a><br /></td></tr>
+<tr class="separator:gae96ffc099bf898257fb19e9410ed08a7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">PFN_vmaAllocateDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
+<tr class="memdesc:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called after successful vkAllocateMemory. <a href="group__group__init.html#ga7e1ed85f7799600b03ad51a77acc21f3">More...</a><br /></td></tr>
+<tr class="separator:ga7e1ed85f7799600b03ad51a77acc21f3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="memItemLeft" align="right" valign="top">typedef void(VKAPI_PTR * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">PFN_vmaFreeDeviceMemoryFunction</a>) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td></tr>
+<tr class="memdesc:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="mdescLeft"> </td><td class="mdescRight">Callback function called before vkFreeMemory. <a href="group__group__init.html#ga154ccaaf53dc2c36378f80f0c4f3679b">More...</a><br /></td></tr>
+<tr class="separator:ga154ccaaf53dc2c36378f80f0c4f3679b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga77692d3c8770ea8882d573206bd27b2b"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">VmaDeviceMemoryCallbacks</a></td></tr>
+<tr class="memdesc:ga77692d3c8770ea8882d573206bd27b2b"><td class="mdescLeft"> </td><td class="mdescRight">Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. <a href="group__group__init.html#ga77692d3c8770ea8882d573206bd27b2b">More...</a><br /></td></tr>
+<tr class="separator:ga77692d3c8770ea8882d573206bd27b2b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">VmaVulkanFunctions</a></td></tr>
+<tr class="memdesc:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="mdescLeft"> </td><td class="mdescRight">Pointers to some Vulkan functions - a subset used by the library. <a href="group__group__init.html#gabb0a8e3b5040d847571cca6c7f9a8074">More...</a><br /></td></tr>
+<tr class="separator:gabb0a8e3b5040d847571cca6c7f9a8074"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaad9652301d33759b83e52d4f3605a14a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">VmaAllocatorCreateInfo</a></td></tr>
+<tr class="memdesc:gaad9652301d33759b83e52d4f3605a14a"><td class="mdescLeft"> </td><td class="mdescRight">Description of a Allocator to be created. <a href="group__group__init.html#gaad9652301d33759b83e52d4f3605a14a">More...</a><br /></td></tr>
+<tr class="separator:gaad9652301d33759b83e52d4f3605a14a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1988031b0223fdbd564250fa1edd942c"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">VmaAllocatorInfo</a></td></tr>
+<tr class="memdesc:ga1988031b0223fdbd564250fa1edd942c"><td class="mdescLeft"> </td><td class="mdescRight">Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="group__group__init.html#ga1988031b0223fdbd564250fa1edd942c">More...</a><br /></td></tr>
+<tr class="separator:ga1988031b0223fdbd564250fa1edd942c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaec5b57e29c97b5d69c6d5654d60df878"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">VmaStatInfo</a></td></tr>
+<tr class="memdesc:gaec5b57e29c97b5d69c6d5654d60df878"><td class="mdescLeft"> </td><td class="mdescRight">Calculated statistics of memory usage in entire allocator. <a href="group__group__stats.html#gaec5b57e29c97b5d69c6d5654d60df878">More...</a><br /></td></tr>
+<tr class="separator:gaec5b57e29c97b5d69c6d5654d60df878"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga21813b2efdf3836767a9058cd8a94034"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_stats.html">VmaStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">VmaStats</a></td></tr>
+<tr class="memdesc:ga21813b2efdf3836767a9058cd8a94034"><td class="mdescLeft"> </td><td class="mdescRight">General statistics from current state of Allocator. <a href="group__group__stats.html#ga21813b2efdf3836767a9058cd8a94034">More...</a><br /></td></tr>
+<tr class="separator:ga21813b2efdf3836767a9058cd8a94034"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa078667e71b1ef24e87a6a30d128381d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_budget.html">VmaBudget</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">VmaBudget</a></td></tr>
+<tr class="memdesc:gaa078667e71b1ef24e87a6a30d128381d"><td class="mdescLeft"> </td><td class="mdescRight">Statistics of current memory usage and available budget, in bytes, for specific memory heap. <a href="group__group__stats.html#gaa078667e71b1ef24e87a6a30d128381d">More...</a><br /></td></tr>
+<tr class="separator:gaa078667e71b1ef24e87a6a30d128381d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3bf110892ea2fb4649fedb68488d026a"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga3bf110892ea2fb4649fedb68488d026a">VmaAllocationCreateInfo</a></td></tr>
+<tr class="separator:ga3bf110892ea2fb4649fedb68488d026a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1017aa83489c0eee8d2163d2bf253f67"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">VmaPoolCreateInfo</a></td></tr>
+<tr class="memdesc:ga1017aa83489c0eee8d2163d2bf253f67"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="group__group__alloc.html#ga1017aa83489c0eee8d2163d2bf253f67">More...</a><br /></td></tr>
+<tr class="separator:ga1017aa83489c0eee8d2163d2bf253f67"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4759a2d9f99c19ba7627553c847132f1"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">VmaPoolStats</a></td></tr>
+<tr class="memdesc:ga4759a2d9f99c19ba7627553c847132f1"><td class="mdescLeft"> </td><td class="mdescRight">Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. <a href="group__group__stats.html#ga4759a2d9f99c19ba7627553c847132f1">More...</a><br /></td></tr>
+<tr class="separator:ga4759a2d9f99c19ba7627553c847132f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1cf7774606721026a68aabe3af2e5b50"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">VmaAllocationInfo</a></td></tr>
+<tr class="memdesc:ga1cf7774606721026a68aabe3af2e5b50"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. <a href="group__group__alloc.html#ga1cf7774606721026a68aabe3af2e5b50">More...</a><br /></td></tr>
+<tr class="separator:ga1cf7774606721026a68aabe3af2e5b50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6daeffaa670ce6d11a203a6224c9937"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">VmaDefragmentationInfo2</a></td></tr>
+<tr class="memdesc:gad6daeffaa670ce6d11a203a6224c9937"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for defragmentation. <a href="group__group__alloc.html#gad6daeffaa670ce6d11a203a6224c9937">More...</a><br /></td></tr>
+<tr class="separator:gad6daeffaa670ce6d11a203a6224c9937"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad6799e8e2b1527abfc84d33bc44aeaf5">VmaDefragmentationPassMoveInfo</a></td></tr>
+<tr class="separator:gad6799e8e2b1527abfc84d33bc44aeaf5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga72aebd522242d56abea67b4f47f6549e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">VmaDefragmentationPassInfo</a></td></tr>
+<tr class="memdesc:ga72aebd522242d56abea67b4f47f6549e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters for incremental defragmentation steps. <a href="group__group__alloc.html#ga72aebd522242d56abea67b4f47f6549e">More...</a><br /></td></tr>
+<tr class="separator:ga72aebd522242d56abea67b4f47f6549e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">VmaDefragmentationInfo</a></td></tr>
+<tr class="memdesc:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Optional configuration parameters to be passed to function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="group__group__alloc.html#ga2bf47f96bf92bed2a49461bd9af3acfa">More...</a><br /></td></tr>
+<tr class="separator:ga2bf47f96bf92bed2a49461bd9af3acfa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad94034192259c2e34a4d1c5e27810403"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">VmaDefragmentationStats</a></td></tr>
+<tr class="memdesc:gad94034192259c2e34a4d1c5e27810403"><td class="mdescLeft"> </td><td class="mdescRight">Statistics returned by function <a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. <a href="group__group__alloc.html#gad94034192259c2e34a4d1c5e27810403">More...</a><br /></td></tr>
+<tr class="separator:gad94034192259c2e34a4d1c5e27810403"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga4753d42d40217a3a652a3cdf253ad773"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">VmaVirtualBlockCreateInfo</a></td></tr>
+<tr class="memdesc:ga4753d42d40217a3a652a3cdf253ad773"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. <a href="group__group__virtual.html#ga4753d42d40217a3a652a3cdf253ad773">More...</a><br /></td></tr>
+<tr class="separator:ga4753d42d40217a3a652a3cdf253ad773"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">VmaVirtualAllocationCreateInfo</a></td></tr>
+<tr class="memdesc:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of created virtual allocation to be passed to <a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. <a href="group__group__virtual.html#gac3c90d80bedc6847a41b82d0e2158c9e">More...</a><br /></td></tr>
+<tr class="separator:gac3c90d80bedc6847a41b82d0e2158c9e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">VmaVirtualAllocationInfo</a></td></tr>
+<tr class="memdesc:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="mdescLeft"> </td><td class="mdescRight">Parameters of an existing virtual allocation, returned by <a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. <a href="group__group__virtual.html#ga75bc33ff7cf18c98e101f570dc2a5ebc">More...</a><br /></td></tr>
+<tr class="separator:ga75bc33ff7cf18c98e101f570dc2a5ebc"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
-<tr class="memitem:a4f87c9100d154a65a4ad495f7763cf7c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> { <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> = 0x00000004
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> = 0x00000008
+<tr class="memitem:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d">VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT</a> = 0x00000001
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> = 0x00000002
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> = 0x00000004
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0">VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT</a> = 0x00000008
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> = 0x00000010
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> = 0x00000020
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> = 0x00000040
-, <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+  <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> = 0x00000010
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089">VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT</a> = 0x00000020
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a">VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT</a> = 0x00000040
+, <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c">VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
<br />
}</td></tr>
-<tr class="memdesc:a4f87c9100d154a65a4ad495f7763cf7c"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">More...</a><br /></td></tr>
-<tr class="separator:a4f87c9100d154a65a4ad495f7763cf7c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa5846affa1e9da3800e3e78fae2305cc"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> { <br />
-  <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3
+<tr class="memdesc:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="mdescLeft"> </td><td class="mdescRight">Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. <a href="group__group__init.html#ga4f87c9100d154a65a4ad495f7763cf7c">More...</a><br /></td></tr>
+<tr class="separator:ga4f87c9100d154a65a4ad495f7763cf7c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa5846affa1e9da3800e3e78fae2305cc"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> { <br />
+  <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd">VMA_MEMORY_USAGE_UNKNOWN</a> = 0
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7">VMA_MEMORY_USAGE_GPU_ONLY</a> = 1
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5">VMA_MEMORY_USAGE_CPU_ONLY</a> = 2
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67">VMA_MEMORY_USAGE_CPU_TO_GPU</a> = 3
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a> = 5
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a> = 6
-, <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF
+  <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27">VMA_MEMORY_USAGE_GPU_TO_CPU</a> = 4
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500">VMA_MEMORY_USAGE_CPU_COPY</a> = 5
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d">VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED</a> = 6
+, <a class="el" href="group__group__alloc.html#ggaa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e">VMA_MEMORY_USAGE_MAX_ENUM</a> = 0x7FFFFFFF
<br />
}</td></tr>
-<tr class="separator:aa5846affa1e9da3800e3e78fae2305cc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad9889c10c798b040d59c92f257cae597"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> { <br />
-  <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">VMA_ALLOCATION_CREATE_RESERVED_1_BIT</a> = 0x00000008
+<tr class="memdesc:gaa5846affa1e9da3800e3e78fae2305cc"><td class="mdescLeft"> </td><td class="mdescRight">Intended usage of the allocated memory. <a href="group__group__alloc.html#gaa5846affa1e9da3800e3e78fae2305cc">More...</a><br /></td></tr>
+<tr class="separator:gaa5846affa1e9da3800e3e78fae2305cc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad9889c10c798b040d59c92f257cae597"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> = 0x00000001
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> = 0x00000002
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> = 0x00000004
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103">VMA_ALLOCATION_CREATE_RESERVED_1_BIT</a> = 0x00000008
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">VMA_ALLOCATION_CREATE_RESERVED_2_BIT</a> = 0x00000010
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a> = 0x00000080
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7">VMA_ALLOCATION_CREATE_RESERVED_2_BIT</a> = 0x00000010
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520">VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT</a> = 0x00000020
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df">VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = 0x00000040
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea">VMA_ALLOCATION_CREATE_DONT_BIND_BIT</a> = 0x00000080
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> = 0x00000100
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT</a> = 0x00000200
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a> = 0x00010000
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> = 0x00020000
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d">VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT</a> = 0x00000100
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6">VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT</a> = 0x00000200
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d">VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT</a> = 0x00010000
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62">VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT</a> = 0x00020000
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a> = 0x00040000
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777">VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT</a> = 0x00040000
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d">VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706">VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a>
-, <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+  <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e">VMA_ALLOCATION_CREATE_STRATEGY_MASK</a>
+, <a class="el" href="group__group__alloc.html#ggad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882">VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
<br />
}</td></tr>
-<tr class="memdesc:ad9889c10c798b040d59c92f257cae597"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">More...</a><br /></td></tr>
-<tr class="separator:ad9889c10c798b040d59c92f257cae597"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> { <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002
-, <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004
-, <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000008
-, <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a>
+<tr class="memdesc:gad9889c10c798b040d59c92f257cae597"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. <a href="group__group__alloc.html#gad9889c10c798b040d59c92f257cae597">More...</a><br /></td></tr>
+<tr class="separator:gad9889c10c798b040d59c92f257cae597"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2">VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT</a> = 0x00000002
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000004
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000008
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a855ee6e02e46d835ee28c8cd596b7e32">VMA_POOL_CREATE_TLSF_ALGORITHM_BIT</a> = 0x00000010
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+  <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c">VMA_POOL_CREATE_ALGORITHM_MASK</a>
+, <a class="el" href="group__group__alloc.html#gga9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec">VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
<br />
}</td></tr>
-<tr class="memdesc:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">More...</a><br /></td></tr>
-<tr class="separator:a9a7c45f9c863695d98c83fa5ac940fe7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6552a65b71d16f378c6994b3ceaef50c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> { <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> = 0x1
-, <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<tr class="memdesc:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. <a href="group__group__alloc.html#ga9a7c45f9c863695d98c83fa5ac940fe7">More...</a><br /></td></tr>
+<tr class="separator:ga9a7c45f9c863695d98c83fa5ac940fe7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6552a65b71d16f378c6994b3ceaef50c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> { <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33">VMA_DEFRAGMENTATION_FLAG_INCREMENTAL</a> = 0x1
+, <a class="el" href="group__group__alloc.html#gga6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97">VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
}</td></tr>
-<tr class="memdesc:a6552a65b71d16f378c6994b3ceaef50c"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">More...</a><br /></td></tr>
-<tr class="separator:a6552a65b71d16f378c6994b3ceaef50c"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a88bcf8c1cd3bb1610ff7343811c65bca"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> { <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000001
-, <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000002
-, <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK</a>
-, <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
- }</td></tr>
-<tr class="memdesc:a88bcf8c1cd3bb1610ff7343811c65bca"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">More...</a><br /></td></tr>
-<tr class="separator:a88bcf8c1cd3bb1610ff7343811c65bca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a2e9c64d405b14156fea7e10c4ad06cb6"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> { <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT
-, <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT
-, <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT
-, <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT
+<tr class="memdesc:ga6552a65b71d16f378c6994b3ceaef50c"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be used in <a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. <a href="group__group__alloc.html#ga6552a65b71d16f378c6994b3ceaef50c">More...</a><br /></td></tr>
+<tr class="separator:ga6552a65b71d16f378c6994b3ceaef50c"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a> = 0x00000001
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63">VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT</a> = 0x00000002
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa4db7cb39f9c0f1a4b71c5f76b4cfa691">VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT</a> = 0x00000004
+, <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844">VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK</a>
, <br />
-  <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK</a> = VMA_ALLOCATION_CREATE_STRATEGY_MASK
-, <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+  <a class="el" href="group__group__virtual.html#gga88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87">VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
<br />
}</td></tr>
-<tr class="memdesc:a2e9c64d405b14156fea7e10c4ad06cb6"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">More...</a><br /></td></tr>
-<tr class="separator:a2e9c64d405b14156fea7e10c4ad06cb6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memdesc:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. <a href="group__group__virtual.html#ga88bcf8c1cd3bb1610ff7343811c65bca">More...</a><br /></td></tr>
+<tr class="separator:ga88bcf8c1cd3bb1610ff7343811c65bca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> { <br />
+  <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e">VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT</a> = VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT</a> = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT
+, <br />
+  <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3">VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK</a> = VMA_ALLOCATION_CREATE_STRATEGY_MASK
+, <a class="el" href="group__group__virtual.html#gga2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9">VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM</a> = 0x7FFFFFFF
+<br />
+ }</td></tr>
+<tr class="memdesc:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="mdescLeft"> </td><td class="mdescRight">Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. <a href="group__group__virtual.html#ga2e9c64d405b14156fea7e10c4ad06cb6">More...</a><br /></td></tr>
+<tr class="separator:ga2e9c64d405b14156fea7e10c4ad06cb6"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:a200692051ddb34240248234f5f4c17bb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a> (const <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocator.html">VmaAllocator</a> *pAllocator)</td></tr>
-<tr class="memdesc:a200692051ddb34240248234f5f4c17bb"><td class="mdescLeft"> </td><td class="mdescRight">Creates Allocator object. <a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">More...</a><br /></td></tr>
-<tr class="separator:a200692051ddb34240248234f5f4c17bb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</td></tr>
-<tr class="memdesc:aa8d164061c88f22fb1fd3c8f3534bc1d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys allocator object. <a href="vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d">More...</a><br /></td></tr>
-<tr class="separator:aa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:afa02231a791b37255720d566a52683e7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> *pAllocatorInfo)</td></tr>
-<tr class="memdesc:afa02231a791b37255720d566a52683e7"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object - handle to Vulkan device etc. <a href="vk__mem__alloc_8h.html#afa02231a791b37255720d566a52683e7">More...</a><br /></td></tr>
-<tr class="separator:afa02231a791b37255720d566a52683e7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</td></tr>
-<tr class="separator:aecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab88db292a17974f911182543fda52d19"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceMemoryProperties **ppPhysicalDeviceMemoryProperties)</td></tr>
-<tr class="separator:ab88db292a17974f911182543fda52d19"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8701444752eb5de4464adb5a2b514bca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags)</td></tr>
-<tr class="memdesc:a8701444752eb5de4464adb5a2b514bca"><td class="mdescLeft"> </td><td class="mdescRight">Given Memory Type Index, returns Property Flags of this memory type. <a href="vk__mem__alloc_8h.html#a8701444752eb5de4464adb5a2b514bca">More...</a><br /></td></tr>
-<tr class="separator:a8701444752eb5de4464adb5a2b514bca"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ade56bf8dc9f5a5eaddf5f119ed525236"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t frameIndex)</td></tr>
-<tr class="memdesc:ade56bf8dc9f5a5eaddf5f119ed525236"><td class="mdescLeft"> </td><td class="mdescRight">Sets index of the current frame. <a href="vk__mem__alloc_8h.html#ade56bf8dc9f5a5eaddf5f119ed525236">More...</a><br /></td></tr>
-<tr class="separator:ade56bf8dc9f5a5eaddf5f119ed525236"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a333b61c1788cb23559177531e6a93ca3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_stats.html">VmaStats</a> *pStats)</td></tr>
-<tr class="memdesc:a333b61c1788cb23559177531e6a93ca3"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics from current state of the Allocator. <a href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3">More...</a><br /></td></tr>
-<tr class="separator:a333b61c1788cb23559177531e6a93ca3"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7">vmaGetHeapBudgets</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_budget.html">VmaBudget</a> *pBudgets)</td></tr>
-<tr class="memdesc:a9f88db9d46a432c0ad7278cecbc5eaa7"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves information about current memory budget for all memory heaps. <a href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7">More...</a><br /></td></tr>
-<tr class="separator:a9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aef15a94b58fbcb0fe706d5720e84a74a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
-<tr class="memdesc:aef15a94b58fbcb0fe706d5720e84a74a"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given memoryTypeBits and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="vk__mem__alloc_8h.html#aef15a94b58fbcb0fe706d5720e84a74a">More...</a><br /></td></tr>
-<tr class="separator:aef15a94b58fbcb0fe706d5720e84a74a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae790ab9ffaf7667fb8f62523e6897888"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
-<tr class="memdesc:ae790ab9ffaf7667fb8f62523e6897888"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkBufferCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="vk__mem__alloc_8h.html#ae790ab9ffaf7667fb8f62523e6897888">More...</a><br /></td></tr>
-<tr class="separator:ae790ab9ffaf7667fb8f62523e6897888"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a088da83d8eaf3ce9056d9ea0b981d472"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
-<tr class="memdesc:a088da83d8eaf3ce9056d9ea0b981d472"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkImageCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="vk__mem__alloc_8h.html#a088da83d8eaf3ce9056d9ea0b981d472">More...</a><br /></td></tr>
-<tr class="separator:a088da83d8eaf3ce9056d9ea0b981d472"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5c8770ded7c59c8caac6de0c2cb00b50"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_pool.html">VmaPool</a> *pPool)</td></tr>
-<tr class="memdesc:a5c8770ded7c59c8caac6de0c2cb00b50"><td class="mdescLeft"> </td><td class="mdescRight">Allocates Vulkan device memory and creates <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="vk__mem__alloc_8h.html#a5c8770ded7c59c8caac6de0c2cb00b50">More...</a><br /></td></tr>
-<tr class="separator:a5c8770ded7c59c8caac6de0c2cb00b50"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5485779c8f1948238fc4e92232fa65e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
-<tr class="memdesc:a5485779c8f1948238fc4e92232fa65e1"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object and frees Vulkan device memory. <a href="vk__mem__alloc_8h.html#a5485779c8f1948238fc4e92232fa65e1">More...</a><br /></td></tr>
-<tr class="separator:a5485779c8f1948238fc4e92232fa65e1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae8bf76997b234ef68aad922616df4153"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> *pPoolStats)</td></tr>
-<tr class="memdesc:ae8bf76997b234ef68aad922616df4153"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="vk__mem__alloc_8h.html#ae8bf76997b234ef68aad922616df4153">More...</a><br /></td></tr>
-<tr class="separator:ae8bf76997b234ef68aad922616df4153"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad535935619c7a549bf837e1bb0068f89"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
-<tr class="memdesc:ad535935619c7a549bf837e1bb0068f89"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory pool in search for corruptions. <a href="vk__mem__alloc_8h.html#ad535935619c7a549bf837e1bb0068f89">More...</a><br /></td></tr>
-<tr class="separator:ad535935619c7a549bf837e1bb0068f89"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af09b4e4eafdbee812e8d73ddf960f030"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char **ppName)</td></tr>
-<tr class="memdesc:af09b4e4eafdbee812e8d73ddf960f030"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves name of a custom pool. <a href="vk__mem__alloc_8h.html#af09b4e4eafdbee812e8d73ddf960f030">More...</a><br /></td></tr>
-<tr class="separator:af09b4e4eafdbee812e8d73ddf960f030"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:adbae3a0b4ab078024462fc85c37f3b58"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char *pName)</td></tr>
-<tr class="memdesc:adbae3a0b4ab078024462fc85c37f3b58"><td class="mdescLeft"> </td><td class="mdescRight">Sets name of a custom pool. <a href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58">More...</a><br /></td></tr>
-<tr class="separator:adbae3a0b4ab078024462fc85c37f3b58"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:abf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:abf28077dbf82d0908b8acbe8ee8dd9b8"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation. <a href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8">More...</a><br /></td></tr>
-<tr class="separator:abf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, size_t allocationCount, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:ad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation for multiple allocation objects at once. <a href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1">More...</a><br /></td></tr>
-<tr class="separator:ad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a7fdf64415b6c3d83c454f28d2c53df7b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="separator:a7fdf64415b6c3d83c454f28d2c53df7b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0faa3f9e5fb233d29d1e00390650febb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:a0faa3f9e5fb233d29d1e00390650febb"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>. <a href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb">More...</a><br /></td></tr>
-<tr class="separator:a0faa3f9e5fb233d29d1e00390650febb"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5fea5518972ae9094b1526cbcb19b05f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
-<tr class="memdesc:a5fea5518972ae9094b1526cbcb19b05f"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory previously allocated using <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, or <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. <a href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">More...</a><br /></td></tr>
-<tr class="separator:a5fea5518972ae9094b1526cbcb19b05f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a834b1e4aef395c0a1d56a28e69a4a17e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, size_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations)</td></tr>
-<tr class="memdesc:a834b1e4aef395c0a1d56a28e69a4a17e"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory and destroys multiple allocations. <a href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e">More...</a><br /></td></tr>
-<tr class="separator:a834b1e4aef395c0a1d56a28e69a4a17e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a86dd08aba8633bfa4ad0df2e76481d8b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:a86dd08aba8633bfa4ad0df2e76481d8b"><td class="mdescLeft"> </td><td class="mdescRight">Returns current information about specified allocation. <a href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b">More...</a><br /></td></tr>
-<tr class="separator:a86dd08aba8633bfa4ad0df2e76481d8b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:af9147d31ffc11d62fc187bde283ed14f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void *pUserData)</td></tr>
-<tr class="memdesc:af9147d31ffc11d62fc187bde283ed14f"><td class="mdescLeft"> </td><td class="mdescRight">Sets pUserData in given allocation to new value. <a href="vk__mem__alloc_8h.html#af9147d31ffc11d62fc187bde283ed14f">More...</a><br /></td></tr>
-<tr class="separator:af9147d31ffc11d62fc187bde283ed14f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a571e87dd38e552249b56b1b0b982fad1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkMemoryPropertyFlags *pFlags)</td></tr>
-<tr class="memdesc:a571e87dd38e552249b56b1b0b982fad1"><td class="mdescLeft"> </td><td class="mdescRight">Given an allocation, returns Property Flags of its memory type. <a href="vk__mem__alloc_8h.html#a571e87dd38e552249b56b1b0b982fad1">More...</a><br /></td></tr>
-<tr class="separator:a571e87dd38e552249b56b1b0b982fad1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ad5bd1243512d099706de88168992f069"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">vmaMapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void **ppData)</td></tr>
-<tr class="memdesc:ad5bd1243512d099706de88168992f069"><td class="mdescLeft"> </td><td class="mdescRight">Maps memory represented by given allocation and returns pointer to it. <a href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069">More...</a><br /></td></tr>
-<tr class="separator:ad5bd1243512d099706de88168992f069"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9bc268595cb33f6ec4d519cfce81ff45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
-<tr class="memdesc:a9bc268595cb33f6ec4d519cfce81ff45"><td class="mdescLeft"> </td><td class="mdescRight">Unmaps memory represented by given allocation, mapped previously using <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. <a href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45">More...</a><br /></td></tr>
-<tr class="separator:a9bc268595cb33f6ec4d519cfce81ff45"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a30c37c1eec6025f397be41644f48490f"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
-<tr class="memdesc:a30c37c1eec6025f397be41644f48490f"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given allocation. <a href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f">More...</a><br /></td></tr>
-<tr class="separator:a30c37c1eec6025f397be41644f48490f"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aaa8412919139ef413a4215ac6a290fae"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
-<tr class="memdesc:aaa8412919139ef413a4215ac6a290fae"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given allocation. <a href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae">More...</a><br /></td></tr>
-<tr class="separator:aaa8412919139ef413a4215ac6a290fae"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac3dd00da721875ed99fa8a881922bdfc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
-<tr class="memdesc:ac3dd00da721875ed99fa8a881922bdfc"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given set of allocations. <a href="vk__mem__alloc_8h.html#ac3dd00da721875ed99fa8a881922bdfc">More...</a><br /></td></tr>
-<tr class="separator:ac3dd00da721875ed99fa8a881922bdfc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab25b558d75f7378ec944a1522fdcc3c5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
-<tr class="memdesc:ab25b558d75f7378ec944a1522fdcc3c5"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given set of allocations. <a href="vk__mem__alloc_8h.html#ab25b558d75f7378ec944a1522fdcc3c5">More...</a><br /></td></tr>
-<tr class="separator:ab25b558d75f7378ec944a1522fdcc3c5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a49329a7f030dafcf82f7b73334c22e98"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits)</td></tr>
-<tr class="memdesc:a49329a7f030dafcf82f7b73334c22e98"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. <a href="vk__mem__alloc_8h.html#a49329a7f030dafcf82f7b73334c22e98">More...</a><br /></td></tr>
-<tr class="separator:a49329a7f030dafcf82f7b73334c22e98"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> *pInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pStats, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</td></tr>
-<tr class="memdesc:a36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="mdescLeft"> </td><td class="mdescRight">Begins defragmentation process. <a href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">More...</a><br /></td></tr>
-<tr class="separator:a36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a8774e20e91e245aae959ba63efa15dd2"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
-<tr class="memdesc:a8774e20e91e245aae959ba63efa15dd2"><td class="mdescLeft"> </td><td class="mdescRight">Ends defragmentation process. <a href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2">More...</a><br /></td></tr>
-<tr class="separator:a8774e20e91e245aae959ba63efa15dd2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context, <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> *pInfo)</td></tr>
-<tr class="separator:ac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1b9ffa538bed905af55c747cc48963bd"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
-<tr class="separator:a1b9ffa538bed905af55c747cc48963bd"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a9f0f8f56db5f7f57fe4454f465142dac"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pDefragmentationStats)</td></tr>
-<tr class="memdesc:a9f0f8f56db5f7f57fe4454f465142dac"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Compacts memory by moving allocations. <a href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac">More...</a><br /></td></tr>
-<tr class="separator:a9f0f8f56db5f7f57fe4454f465142dac"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a6b0929b914b60cf2d45cac4bf3547470"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkBuffer buffer)</td></tr>
-<tr class="memdesc:a6b0929b914b60cf2d45cac4bf3547470"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation. <a href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470">More...</a><br /></td></tr>
-<tr class="separator:a6b0929b914b60cf2d45cac4bf3547470"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a927c944f45e0f2941182abb6f608e64a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkBuffer buffer, const void *pNext)</td></tr>
-<tr class="memdesc:a927c944f45e0f2941182abb6f608e64a"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation with additional parameters. <a href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a">More...</a><br /></td></tr>
-<tr class="separator:a927c944f45e0f2941182abb6f608e64a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkImage image)</td></tr>
-<tr class="memdesc:a3d3ca45799923aa5d138e9e5f9eb2da5"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation. <a href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5">More...</a><br /></td></tr>
-<tr class="separator:a3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa8251ee81b0045a443e35b8e8aa021bc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkImage image, const void *pNext)</td></tr>
-<tr class="memdesc:aa8251ee81b0045a443e35b8e8aa021bc"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation with additional parameters. <a href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc">More...</a><br /></td></tr>
-<tr class="separator:aa8251ee81b0045a443e35b8e8aa021bc"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ac72ee55598617e8eecca384e746bab51"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="separator:ac72ee55598617e8eecca384e746bab51"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa06a690013a0d01e60894ac378083834"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkDeviceSize minAlignment, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:aa06a690013a0d01e60894ac378083834"><td class="mdescLeft"> </td><td class="mdescRight">Creates a buffer with additional minimum alignment. <a href="vk__mem__alloc_8h.html#aa06a690013a0d01e60894ac378083834">More...</a><br /></td></tr>
-<tr class="separator:aa06a690013a0d01e60894ac378083834"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
-<tr class="memdesc:a0d9f4e4ba5bf9aab1f1c746387753d77"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan buffer and frees allocated memory. <a href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77">More...</a><br /></td></tr>
-<tr class="separator:a0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a02a94f25679275851a53e82eacbcfc73"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkImage *pImage, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
-<tr class="memdesc:a02a94f25679275851a53e82eacbcfc73"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>. <a href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73">More...</a><br /></td></tr>
-<tr class="separator:a02a94f25679275851a53e82eacbcfc73"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
-<tr class="memdesc:ae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan image and frees allocated memory. <a href="vk__mem__alloc_8h.html#ae50d2cb3b4a3bfd4dd40987234e50e7e">More...</a><br /></td></tr>
-<tr class="separator:ae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab585754076877265fdae33e5c40ef13b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a> (const <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> *pVirtualBlock)</td></tr>
-<tr class="memdesc:ab585754076877265fdae33e5c40ef13b"><td class="mdescLeft"> </td><td class="mdescRight">Creates new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b">More...</a><br /></td></tr>
-<tr class="separator:ab585754076877265fdae33e5c40ef13b"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3795f7783ae2c182cede067d656f66a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
-<tr class="memdesc:a3795f7783ae2c182cede067d656f66a5"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="vk__mem__alloc_8h.html#a3795f7783ae2c182cede067d656f66a5">More...</a><br /></td></tr>
-<tr class="separator:a3795f7783ae2c182cede067d656f66a5"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:acd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memItemLeft" align="right" valign="top">VkBool32 </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1">vmaIsVirtualBlockEmpty</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
-<tr class="memdesc:acd53b5b1d23f8fcbad692ccfdc1811f1"><td class="mdescLeft"> </td><td class="mdescRight">Returns true of the <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is empty - contains 0 virtual allocations and has all its space available for new allocations. <a href="vk__mem__alloc_8h.html#acd53b5b1d23f8fcbad692ccfdc1811f1">More...</a><br /></td></tr>
-<tr class="separator:acd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:ab5fcb961ffea69023e7e0ea100bdad8e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">vmaGetVirtualAllocationInfo</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, VkDeviceSize offset, <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> *pVirtualAllocInfo)</td></tr>
-<tr class="memdesc:ab5fcb961ffea69023e7e0ea100bdad8e"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about a specific virtual allocation within a virtual block, like its size and <code>pUserData</code> pointer. <a href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e">More...</a><br /></td></tr>
-<tr class="separator:ab5fcb961ffea69023e7e0ea100bdad8e"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a1c15925e6745dacee0cfc877fffecec2"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">vmaVirtualAllocate</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, const <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> *pCreateInfo, VkDeviceSize *pOffset)</td></tr>
-<tr class="memdesc:a1c15925e6745dacee0cfc877fffecec2"><td class="mdescLeft"> </td><td class="mdescRight">Allocates new virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2">More...</a><br /></td></tr>
-<tr class="separator:a1c15925e6745dacee0cfc877fffecec2"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a13f01c44b3c1a06e695f1f5d24b80639"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">vmaVirtualFree</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, VkDeviceSize offset)</td></tr>
-<tr class="memdesc:a13f01c44b3c1a06e695f1f5d24b80639"><td class="mdescLeft"> </td><td class="mdescRight">Frees virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639">More...</a><br /></td></tr>
-<tr class="separator:a13f01c44b3c1a06e695f1f5d24b80639"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a5eda6f55919fb05bd2f56a112590c571"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571">vmaClearVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
-<tr class="memdesc:a5eda6f55919fb05bd2f56a112590c571"><td class="mdescLeft"> </td><td class="mdescRight">Frees all virtual allocations inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571">More...</a><br /></td></tr>
-<tr class="separator:a5eda6f55919fb05bd2f56a112590c571"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a4b96f835d38686df937e097a0c7db5e9"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">vmaSetVirtualAllocationUserData</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, VkDeviceSize offset, void *pUserData)</td></tr>
-<tr class="memdesc:a4b96f835d38686df937e097a0c7db5e9"><td class="mdescLeft"> </td><td class="mdescRight">Changes custom pointer associated with given virtual allocation. <a href="vk__mem__alloc_8h.html#a4b96f835d38686df937e097a0c7db5e9">More...</a><br /></td></tr>
-<tr class="separator:a4b96f835d38686df937e097a0c7db5e9"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a95169b4730e94757897470086ec2768a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> *pStatInfo)</td></tr>
-<tr class="memdesc:a95169b4730e94757897470086ec2768a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates and returns statistics about virtual allocations and memory usage in given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a">More...</a><br /></td></tr>
-<tr class="separator:a95169b4730e94757897470086ec2768a"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a52d810e1222c592e5d80556ad005f1e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6">vmaBuildVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char **ppStatsString, VkBool32 detailedMap)</td></tr>
-<tr class="memdesc:a52d810e1222c592e5d80556ad005f1e6"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns a null-terminated string in JSON format with information about given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6">More...</a><br /></td></tr>
-<tr class="separator:a52d810e1222c592e5d80556ad005f1e6"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a47fb8d8aa69df4a7c23a9719b4080623"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623">vmaFreeVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char *pStatsString)</td></tr>
-<tr class="memdesc:a47fb8d8aa69df4a7c23a9719b4080623"><td class="mdescLeft"> </td><td class="mdescRight">Frees a string returned by <a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. <a href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623">More...</a><br /></td></tr>
-<tr class="separator:a47fb8d8aa69df4a7c23a9719b4080623"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:aa4fee7eb5253377599ef4fd38c93c2a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char **ppStatsString, VkBool32 detailedMap)</td></tr>
-<tr class="memdesc:aa4fee7eb5253377599ef4fd38c93c2a0"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns statistics as a null-terminated string in JSON format. <a href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0">More...</a><br /></td></tr>
-<tr class="separator:aa4fee7eb5253377599ef4fd38c93c2a0"><td class="memSeparator" colspan="2"> </td></tr>
-<tr class="memitem:a3104eb30d8122c84dd8541063f145288"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char *pStatsString)</td></tr>
-<tr class="separator:a3104eb30d8122c84dd8541063f145288"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga565936f8d98d225b536a2d9703bc7676"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga565936f8d98d225b536a2d9703bc7676">VK_DEFINE_NON_DISPATCHABLE_HANDLE</a> (<a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a>)</td></tr>
+<tr class="separator:ga565936f8d98d225b536a2d9703bc7676"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga200692051ddb34240248234f5f4c17bb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a> (const <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocator.html">VmaAllocator</a> *pAllocator)</td></tr>
+<tr class="memdesc:ga200692051ddb34240248234f5f4c17bb"><td class="mdescLeft"> </td><td class="mdescRight">Creates <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. <a href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">More...</a><br /></td></tr>
+<tr class="separator:ga200692051ddb34240248234f5f4c17bb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">vmaDestroyAllocator</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator)</td></tr>
+<tr class="memdesc:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="mdescLeft"> </td><td class="mdescRight">Destroys allocator object. <a href="group__group__init.html#gaa8d164061c88f22fb1fd3c8f3534bc1d">More...</a><br /></td></tr>
+<tr class="separator:gaa8d164061c88f22fb1fd3c8f3534bc1d"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gafa02231a791b37255720d566a52683e7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gafa02231a791b37255720d566a52683e7">vmaGetAllocatorInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> *pAllocatorInfo)</td></tr>
+<tr class="memdesc:gafa02231a791b37255720d566a52683e7"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object - handle to Vulkan device etc. <a href="group__group__init.html#gafa02231a791b37255720d566a52683e7">More...</a><br /></td></tr>
+<tr class="separator:gafa02231a791b37255720d566a52683e7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gaecabf7b6e91ea87d0316fa0a9e014fe0">vmaGetPhysicalDeviceProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceProperties **ppPhysicalDeviceProperties)</td></tr>
+<tr class="separator:gaecabf7b6e91ea87d0316fa0a9e014fe0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab88db292a17974f911182543fda52d19"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gab88db292a17974f911182543fda52d19">vmaGetMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkPhysicalDeviceMemoryProperties **ppPhysicalDeviceMemoryProperties)</td></tr>
+<tr class="separator:gab88db292a17974f911182543fda52d19"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8701444752eb5de4464adb5a2b514bca"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">vmaGetMemoryTypeProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeIndex, VkMemoryPropertyFlags *pFlags)</td></tr>
+<tr class="memdesc:ga8701444752eb5de4464adb5a2b514bca"><td class="mdescLeft"> </td><td class="mdescRight">Given Memory Type Index, returns Property Flags of this memory type. <a href="group__group__init.html#ga8701444752eb5de4464adb5a2b514bca">More...</a><br /></td></tr>
+<tr class="separator:ga8701444752eb5de4464adb5a2b514bca"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">vmaSetCurrentFrameIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t frameIndex)</td></tr>
+<tr class="memdesc:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="mdescLeft"> </td><td class="mdescRight">Sets index of the current frame. <a href="group__group__init.html#gade56bf8dc9f5a5eaddf5f119ed525236">More...</a><br /></td></tr>
+<tr class="separator:gade56bf8dc9f5a5eaddf5f119ed525236"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga333b61c1788cb23559177531e6a93ca3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">vmaCalculateStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_stats.html">VmaStats</a> *pStats)</td></tr>
+<tr class="memdesc:ga333b61c1788cb23559177531e6a93ca3"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics from current state of the Allocator. <a href="group__group__stats.html#ga333b61c1788cb23559177531e6a93ca3">More...</a><br /></td></tr>
+<tr class="separator:ga333b61c1788cb23559177531e6a93ca3"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">vmaGetHeapBudgets</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_budget.html">VmaBudget</a> *pBudgets)</td></tr>
+<tr class="memdesc:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves information about current memory budget for all memory heaps. <a href="group__group__stats.html#ga9f88db9d46a432c0ad7278cecbc5eaa7">More...</a><br /></td></tr>
+<tr class="separator:ga9f88db9d46a432c0ad7278cecbc5eaa7"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">vmaFindMemoryTypeIndex</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given memoryTypeBits and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#gaef15a94b58fbcb0fe706d5720e84a74a">More...</a><br /></td></tr>
+<tr class="separator:gaef15a94b58fbcb0fe706d5720e84a74a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae790ab9ffaf7667fb8f62523e6897888"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">vmaFindMemoryTypeIndexForBufferInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:gae790ab9ffaf7667fb8f62523e6897888"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkBufferCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#gae790ab9ffaf7667fb8f62523e6897888">More...</a><br /></td></tr>
+<tr class="separator:gae790ab9ffaf7667fb8f62523e6897888"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">vmaFindMemoryTypeIndexForImageInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, uint32_t *pMemoryTypeIndex)</td></tr>
+<tr class="memdesc:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="mdescLeft"> </td><td class="mdescRight">Helps to find memoryTypeIndex, given VkImageCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. <a href="group__group__alloc.html#ga088da83d8eaf3ce9056d9ea0b981d472">More...</a><br /></td></tr>
+<tr class="separator:ga088da83d8eaf3ce9056d9ea0b981d472"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">vmaCreatePool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_pool.html">VmaPool</a> *pPool)</td></tr>
+<tr class="memdesc:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="mdescLeft"> </td><td class="mdescRight">Allocates Vulkan device memory and creates <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="group__group__alloc.html#ga5c8770ded7c59c8caac6de0c2cb00b50">More...</a><br /></td></tr>
+<tr class="separator:ga5c8770ded7c59c8caac6de0c2cb00b50"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5485779c8f1948238fc4e92232fa65e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">vmaDestroyPool</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
+<tr class="memdesc:ga5485779c8f1948238fc4e92232fa65e1"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object and frees Vulkan device memory. <a href="group__group__alloc.html#ga5485779c8f1948238fc4e92232fa65e1">More...</a><br /></td></tr>
+<tr class="separator:ga5485779c8f1948238fc4e92232fa65e1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae8bf76997b234ef68aad922616df4153"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">vmaGetPoolStats</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> *pPoolStats)</td></tr>
+<tr class="memdesc:gae8bf76997b234ef68aad922616df4153"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves statistics of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. <a href="group__group__stats.html#gae8bf76997b234ef68aad922616df4153">More...</a><br /></td></tr>
+<tr class="separator:gae8bf76997b234ef68aad922616df4153"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad535935619c7a549bf837e1bb0068f89"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">vmaCheckPoolCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool)</td></tr>
+<tr class="memdesc:gad535935619c7a549bf837e1bb0068f89"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory pool in search for corruptions. <a href="group__group__alloc.html#gad535935619c7a549bf837e1bb0068f89">More...</a><br /></td></tr>
+<tr class="separator:gad535935619c7a549bf837e1bb0068f89"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">vmaGetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char **ppName)</td></tr>
+<tr class="memdesc:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves name of a custom pool. <a href="group__group__alloc.html#gaf09b4e4eafdbee812e8d73ddf960f030">More...</a><br /></td></tr>
+<tr class="separator:gaf09b4e4eafdbee812e8d73ddf960f030"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gadbae3a0b4ab078024462fc85c37f3b58"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">vmaSetPoolName</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_pool.html">VmaPool</a> pool, const char *pName)</td></tr>
+<tr class="memdesc:gadbae3a0b4ab078024462fc85c37f3b58"><td class="mdescLeft"> </td><td class="mdescRight">Sets name of a custom pool. <a href="group__group__alloc.html#gadbae3a0b4ab078024462fc85c37f3b58">More...</a><br /></td></tr>
+<tr class="separator:gadbae3a0b4ab078024462fc85c37f3b58"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">vmaAllocateMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation. <a href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8">More...</a><br /></td></tr>
+<tr class="separator:gabf28077dbf82d0908b8acbe8ee8dd9b8"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">vmaAllocateMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkMemoryRequirements *pVkMemoryRequirements, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, size_t allocationCount, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="mdescLeft"> </td><td class="mdescRight">General purpose memory allocation for multiple allocation objects at once. <a href="group__group__alloc.html#gad37e82e492b3de38fc3f4cffd9ad0ae1">More...</a><br /></td></tr>
+<tr class="separator:gad37e82e492b3de38fc3f4cffd9ad0ae1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga7fdf64415b6c3d83c454f28d2c53df7b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="separator:ga7fdf64415b6c3d83c454f28d2c53df7b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0faa3f9e5fb233d29d1e00390650febb"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">vmaAllocateMemoryForImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga0faa3f9e5fb233d29d1e00390650febb"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>. <a href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb">More...</a><br /></td></tr>
+<tr class="separator:ga0faa3f9e5fb233d29d1e00390650febb"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5fea5518972ae9094b1526cbcb19b05f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga5fea5518972ae9094b1526cbcb19b05f"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory previously allocated using <a class="el" href="group__group__alloc.html#gabf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="group__group__alloc.html#ga7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, or <a class="el" href="group__group__alloc.html#ga0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. <a href="group__group__alloc.html#ga5fea5518972ae9094b1526cbcb19b05f">More...</a><br /></td></tr>
+<tr class="separator:ga5fea5518972ae9094b1526cbcb19b05f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">vmaFreeMemoryPages</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, size_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations)</td></tr>
+<tr class="memdesc:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory and destroys multiple allocations. <a href="group__group__alloc.html#ga834b1e4aef395c0a1d56a28e69a4a17e">More...</a><br /></td></tr>
+<tr class="separator:ga834b1e4aef395c0a1d56a28e69a4a17e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">vmaGetAllocationInfo</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="mdescLeft"> </td><td class="mdescRight">Returns current information about specified allocation. <a href="group__group__alloc.html#ga86dd08aba8633bfa4ad0df2e76481d8b">More...</a><br /></td></tr>
+<tr class="separator:ga86dd08aba8633bfa4ad0df2e76481d8b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaf9147d31ffc11d62fc187bde283ed14f"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">vmaSetAllocationUserData</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void *pUserData)</td></tr>
+<tr class="memdesc:gaf9147d31ffc11d62fc187bde283ed14f"><td class="mdescLeft"> </td><td class="mdescRight">Sets pUserData in given allocation to new value. <a href="group__group__alloc.html#gaf9147d31ffc11d62fc187bde283ed14f">More...</a><br /></td></tr>
+<tr class="separator:gaf9147d31ffc11d62fc187bde283ed14f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga571e87dd38e552249b56b1b0b982fad1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">vmaGetAllocationMemoryProperties</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkMemoryPropertyFlags *pFlags)</td></tr>
+<tr class="memdesc:ga571e87dd38e552249b56b1b0b982fad1"><td class="mdescLeft"> </td><td class="mdescRight">Given an allocation, returns Property Flags of its memory type. <a href="group__group__alloc.html#ga571e87dd38e552249b56b1b0b982fad1">More...</a><br /></td></tr>
+<tr class="separator:ga571e87dd38e552249b56b1b0b982fad1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gad5bd1243512d099706de88168992f069"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">vmaMapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, void **ppData)</td></tr>
+<tr class="memdesc:gad5bd1243512d099706de88168992f069"><td class="mdescLeft"> </td><td class="mdescRight">Maps memory represented by given allocation and returns pointer to it. <a href="group__group__alloc.html#gad5bd1243512d099706de88168992f069">More...</a><br /></td></tr>
+<tr class="separator:gad5bd1243512d099706de88168992f069"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">vmaUnmapMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="mdescLeft"> </td><td class="mdescRight">Unmaps memory represented by given allocation, mapped previously using <a class="el" href="group__group__alloc.html#gad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. <a href="group__group__alloc.html#ga9bc268595cb33f6ec4d519cfce81ff45">More...</a><br /></td></tr>
+<tr class="separator:ga9bc268595cb33f6ec4d519cfce81ff45"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga30c37c1eec6025f397be41644f48490f"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">vmaFlushAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
+<tr class="memdesc:ga30c37c1eec6025f397be41644f48490f"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given allocation. <a href="group__group__alloc.html#ga30c37c1eec6025f397be41644f48490f">More...</a><br /></td></tr>
+<tr class="separator:ga30c37c1eec6025f397be41644f48490f"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaaa8412919139ef413a4215ac6a290fae"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">vmaInvalidateAllocation</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize offset, VkDeviceSize size)</td></tr>
+<tr class="memdesc:gaaa8412919139ef413a4215ac6a290fae"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given allocation. <a href="group__group__alloc.html#gaaa8412919139ef413a4215ac6a290fae">More...</a><br /></td></tr>
+<tr class="separator:gaaa8412919139ef413a4215ac6a290fae"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac3dd00da721875ed99fa8a881922bdfc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">vmaFlushAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
+<tr class="memdesc:gac3dd00da721875ed99fa8a881922bdfc"><td class="mdescLeft"> </td><td class="mdescRight">Flushes memory of given set of allocations. <a href="group__group__alloc.html#gac3dd00da721875ed99fa8a881922bdfc">More...</a><br /></td></tr>
+<tr class="separator:gac3dd00da721875ed99fa8a881922bdfc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab25b558d75f7378ec944a1522fdcc3c5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">vmaInvalidateAllocations</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t allocationCount, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *allocations, const VkDeviceSize *offsets, const VkDeviceSize *sizes)</td></tr>
+<tr class="memdesc:gab25b558d75f7378ec944a1522fdcc3c5"><td class="mdescLeft"> </td><td class="mdescRight">Invalidates memory of given set of allocations. <a href="group__group__alloc.html#gab25b558d75f7378ec944a1522fdcc3c5">More...</a><br /></td></tr>
+<tr class="separator:gab25b558d75f7378ec944a1522fdcc3c5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga49329a7f030dafcf82f7b73334c22e98"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">vmaCheckCorruption</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryTypeBits)</td></tr>
+<tr class="memdesc:ga49329a7f030dafcf82f7b73334c22e98"><td class="mdescLeft"> </td><td class="mdescRight">Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. <a href="group__group__alloc.html#ga49329a7f030dafcf82f7b73334c22e98">More...</a><br /></td></tr>
+<tr class="separator:ga49329a7f030dafcf82f7b73334c22e98"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">vmaDefragmentationBegin</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> *pInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pStats, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> *pContext)</td></tr>
+<tr class="memdesc:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="mdescLeft"> </td><td class="mdescRight">Begins defragmentation process. <a href="group__group__alloc.html#ga36ba776fd7fd5cb1e9359fdc0d8e6e8a">More...</a><br /></td></tr>
+<tr class="separator:ga36ba776fd7fd5cb1e9359fdc0d8e6e8a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8774e20e91e245aae959ba63efa15dd2"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">vmaDefragmentationEnd</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
+<tr class="memdesc:ga8774e20e91e245aae959ba63efa15dd2"><td class="mdescLeft"> </td><td class="mdescRight">Ends defragmentation process. <a href="group__group__alloc.html#ga8774e20e91e245aae959ba63efa15dd2">More...</a><br /></td></tr>
+<tr class="separator:ga8774e20e91e245aae959ba63efa15dd2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context, <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> *pInfo)</td></tr>
+<tr class="separator:gac0f01545b6262f7d4d128fc8f8e5c77b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga1b9ffa538bed905af55c747cc48963bd"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga1b9ffa538bed905af55c747cc48963bd">vmaEndDefragmentationPass</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> context)</td></tr>
+<tr class="separator:ga1b9ffa538bed905af55c747cc48963bd"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">vmaDefragment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocations, size_t allocationCount, VkBool32 *pAllocationsChanged, const <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> *pDefragmentationInfo, <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> *pDefragmentationStats)</td></tr>
+<tr class="memdesc:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="mdescLeft"> </td><td class="mdescRight">Deprecated. Compacts memory by moving allocations. <a href="group__group__alloc.html#ga9f0f8f56db5f7f57fe4454f465142dac">More...</a><br /></td></tr>
+<tr class="separator:ga9f0f8f56db5f7f57fe4454f465142dac"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b0929b914b60cf2d45cac4bf3547470"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">vmaBindBufferMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkBuffer buffer)</td></tr>
+<tr class="memdesc:ga6b0929b914b60cf2d45cac4bf3547470"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation. <a href="group__group__alloc.html#ga6b0929b914b60cf2d45cac4bf3547470">More...</a><br /></td></tr>
+<tr class="separator:ga6b0929b914b60cf2d45cac4bf3547470"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga927c944f45e0f2941182abb6f608e64a"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">vmaBindBufferMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkBuffer buffer, const void *pNext)</td></tr>
+<tr class="memdesc:ga927c944f45e0f2941182abb6f608e64a"><td class="mdescLeft"> </td><td class="mdescRight">Binds buffer to allocation with additional parameters. <a href="group__group__alloc.html#ga927c944f45e0f2941182abb6f608e64a">More...</a><br /></td></tr>
+<tr class="separator:ga927c944f45e0f2941182abb6f608e64a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">vmaBindImageMemory</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkImage image)</td></tr>
+<tr class="memdesc:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation. <a href="group__group__alloc.html#ga3d3ca45799923aa5d138e9e5f9eb2da5">More...</a><br /></td></tr>
+<tr class="separator:ga3d3ca45799923aa5d138e9e5f9eb2da5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">vmaBindImageMemory2</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation, VkDeviceSize allocationLocalOffset, VkImage image, const void *pNext)</td></tr>
+<tr class="memdesc:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="mdescLeft"> </td><td class="mdescRight">Binds image to allocation with additional parameters. <a href="group__group__alloc.html#gaa8251ee81b0045a443e35b8e8aa021bc">More...</a><br /></td></tr>
+<tr class="separator:gaa8251ee81b0045a443e35b8e8aa021bc"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gac72ee55598617e8eecca384e746bab51"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="separator:gac72ee55598617e8eecca384e746bab51"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa06a690013a0d01e60894ac378083834"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">vmaCreateBufferWithAlignment</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkBufferCreateInfo *pBufferCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkDeviceSize minAlignment, VkBuffer *pBuffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:gaa06a690013a0d01e60894ac378083834"><td class="mdescLeft"> </td><td class="mdescRight">Creates a buffer with additional minimum alignment. <a href="group__group__alloc.html#gaa06a690013a0d01e60894ac378083834">More...</a><br /></td></tr>
+<tr class="separator:gaa06a690013a0d01e60894ac378083834"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">vmaDestroyBuffer</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkBuffer buffer, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan buffer and frees allocated memory. <a href="group__group__alloc.html#ga0d9f4e4ba5bf9aab1f1c746387753d77">More...</a><br /></td></tr>
+<tr class="separator:ga0d9f4e4ba5bf9aab1f1c746387753d77"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga02a94f25679275851a53e82eacbcfc73"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">vmaCreateImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, const VkImageCreateInfo *pImageCreateInfo, const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> *pAllocationCreateInfo, VkImage *pImage, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> *pAllocation, <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> *pAllocationInfo)</td></tr>
+<tr class="memdesc:ga02a94f25679275851a53e82eacbcfc73"><td class="mdescLeft"> </td><td class="mdescRight">Function similar to <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>. <a href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73">More...</a><br /></td></tr>
+<tr class="separator:ga02a94f25679275851a53e82eacbcfc73"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">vmaDestroyImage</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, VkImage image, <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> allocation)</td></tr>
+<tr class="memdesc:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="mdescLeft"> </td><td class="mdescRight">Destroys Vulkan image and frees allocated memory. <a href="group__group__alloc.html#gae50d2cb3b4a3bfd4dd40987234e50e7e">More...</a><br /></td></tr>
+<tr class="separator:gae50d2cb3b4a3bfd4dd40987234e50e7e"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gab585754076877265fdae33e5c40ef13b"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">vmaCreateVirtualBlock</a> (const <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> *pVirtualBlock)</td></tr>
+<tr class="memdesc:gab585754076877265fdae33e5c40ef13b"><td class="mdescLeft"> </td><td class="mdescRight">Creates new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="group__group__virtual.html#gab585754076877265fdae33e5c40ef13b">More...</a><br /></td></tr>
+<tr class="separator:gab585754076877265fdae33e5c40ef13b"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3795f7783ae2c182cede067d656f66a5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">vmaDestroyVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:ga3795f7783ae2c182cede067d656f66a5"><td class="mdescLeft"> </td><td class="mdescRight">Destroys <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. <a href="group__group__virtual.html#ga3795f7783ae2c182cede067d656f66a5">More...</a><br /></td></tr>
+<tr class="separator:ga3795f7783ae2c182cede067d656f66a5"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memItemLeft" align="right" valign="top">VkBool32 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">vmaIsVirtualBlockEmpty</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="mdescLeft"> </td><td class="mdescRight">Returns true of the <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is empty - contains 0 virtual allocations and has all its space available for new allocations. <a href="group__group__virtual.html#gacd53b5b1d23f8fcbad692ccfdc1811f1">More...</a><br /></td></tr>
+<tr class="separator:gacd53b5b1d23f8fcbad692ccfdc1811f1"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">vmaGetVirtualAllocationInfo</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation, <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> *pVirtualAllocInfo)</td></tr>
+<tr class="memdesc:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="mdescLeft"> </td><td class="mdescRight">Returns information about a specific virtual allocation within a virtual block, like its size and <code>pUserData</code> pointer. <a href="group__group__virtual.html#ga8ee14ceb1fe033ec84d8aa29e1f75afa">More...</a><br /></td></tr>
+<tr class="separator:ga8ee14ceb1fe033ec84d8aa29e1f75afa"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="memItemLeft" align="right" valign="top">VkResult </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">vmaVirtualAllocate</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, const <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> *pCreateInfo, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> *pAllocation, VkDeviceSize *pOffset)</td></tr>
+<tr class="memdesc:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="mdescLeft"> </td><td class="mdescRight">Allocates new virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga6b7cdcc1c3e5103c323fedc4e1319e01">More...</a><br /></td></tr>
+<tr class="separator:ga6b7cdcc1c3e5103c323fedc4e1319e01"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga09fc688c0c3653ff23723b037e5d5033"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">vmaVirtualFree</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation)</td></tr>
+<tr class="memdesc:ga09fc688c0c3653ff23723b037e5d5033"><td class="mdescLeft"> </td><td class="mdescRight">Frees virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga09fc688c0c3653ff23723b037e5d5033">More...</a><br /></td></tr>
+<tr class="separator:ga09fc688c0c3653ff23723b037e5d5033"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga5eda6f55919fb05bd2f56a112590c571"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">vmaClearVirtualBlock</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock)</td></tr>
+<tr class="memdesc:ga5eda6f55919fb05bd2f56a112590c571"><td class="mdescLeft"> </td><td class="mdescRight">Frees all virtual allocations inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga5eda6f55919fb05bd2f56a112590c571">More...</a><br /></td></tr>
+<tr class="separator:ga5eda6f55919fb05bd2f56a112590c571"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga001ea1850458a4062b829e09c303fca2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">vmaSetVirtualAllocationUserData</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_virtual_allocation.html">VmaVirtualAllocation</a> allocation, void *pUserData)</td></tr>
+<tr class="memdesc:ga001ea1850458a4062b829e09c303fca2"><td class="mdescLeft"> </td><td class="mdescRight">Changes custom pointer associated with given virtual allocation. <a href="group__group__virtual.html#ga001ea1850458a4062b829e09c303fca2">More...</a><br /></td></tr>
+<tr class="separator:ga001ea1850458a4062b829e09c303fca2"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga95169b4730e94757897470086ec2768a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">vmaCalculateVirtualBlockStats</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> *pStatInfo)</td></tr>
+<tr class="memdesc:ga95169b4730e94757897470086ec2768a"><td class="mdescLeft"> </td><td class="mdescRight">Calculates and returns statistics about virtual allocations and memory usage in given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__virtual.html#ga95169b4730e94757897470086ec2768a">More...</a><br /></td></tr>
+<tr class="separator:ga95169b4730e94757897470086ec2768a"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga52d810e1222c592e5d80556ad005f1e6"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">vmaBuildVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char **ppStatsString, VkBool32 detailedMap)</td></tr>
+<tr class="memdesc:ga52d810e1222c592e5d80556ad005f1e6"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns a null-terminated string in JSON format with information about given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. <a href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6">More...</a><br /></td></tr>
+<tr class="separator:ga52d810e1222c592e5d80556ad005f1e6"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">vmaFreeVirtualBlockStatsString</a> (<a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> virtualBlock, char *pStatsString)</td></tr>
+<tr class="memdesc:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="mdescLeft"> </td><td class="mdescRight">Frees a string returned by <a class="el" href="group__group__stats.html#ga52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. <a href="group__group__stats.html#ga47fb8d8aa69df4a7c23a9719b4080623">More...</a><br /></td></tr>
+<tr class="separator:ga47fb8d8aa69df4a7c23a9719b4080623"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">vmaBuildStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char **ppStatsString, VkBool32 detailedMap)</td></tr>
+<tr class="memdesc:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="mdescLeft"> </td><td class="mdescRight">Builds and returns statistics as a null-terminated string in JSON format. <a href="group__group__stats.html#gaa4fee7eb5253377599ef4fd38c93c2a0">More...</a><br /></td></tr>
+<tr class="separator:gaa4fee7eb5253377599ef4fd38c93c2a0"><td class="memSeparator" colspan="2"> </td></tr>
+<tr class="memitem:ga3104eb30d8122c84dd8541063f145288"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__group__stats.html#ga3104eb30d8122c84dd8541063f145288">vmaFreeStatsString</a> (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, char *pStatsString)</td></tr>
+<tr class="separator:ga3104eb30d8122c84dd8541063f145288"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a162894cbe84f7d76632eb9af1e4b3558" name="a162894cbe84f7d76632eb9af1e4b3558"></a>
@@ -605,3367 +614,6 @@
</div>
</div>
-<h2 class="groupheader">Typedef Documentation</h2>
-<a id="a7e1ed85f7799600b03ad51a77acc21f3" name="a7e1ed85f7799600b03ad51a77acc21f3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7e1ed85f7799600b03ad51a77acc21f3">◆ </a></span>PFN_vmaAllocateDeviceMemoryFunction</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef void(VKAPI_PTR * PFN_vmaAllocateDeviceMemoryFunction) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Callback function called after successful vkAllocateMemory. </p>
-
-</div>
-</div>
-<a id="a154ccaaf53dc2c36378f80f0c4f3679b" name="a154ccaaf53dc2c36378f80f0c4f3679b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a154ccaaf53dc2c36378f80f0c4f3679b">◆ </a></span>PFN_vmaFreeDeviceMemoryFunction</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef void(VKAPI_PTR * PFN_vmaFreeDeviceMemoryFunction) (<a class="el" href="struct_vma_allocator.html">VmaAllocator</a> allocator, uint32_t memoryType, VkDeviceMemory memory, VkDeviceSize size, void *pUserData)</td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Callback function called before vkFreeMemory. </p>
-
-</div>
-</div>
-<a id="a4fceecc301f4064dc808d3cd6c038941" name="a4fceecc301f4064dc808d3cd6c038941"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4fceecc301f4064dc808d3cd6c038941">◆ </a></span>VmaAllocationCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. </p>
-
-</div>
-</div>
-<a id="a5225e5e11f8376f6a31a1791f3d6e817" name="a5225e5e11f8376f6a31a1791f3d6e817"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5225e5e11f8376f6a31a1791f3d6e817">◆ </a></span>VmaAllocationCreateFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#a5225e5e11f8376f6a31a1791f3d6e817">VmaAllocationCreateFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a3bf110892ea2fb4649fedb68488d026a" name="a3bf110892ea2fb4649fedb68488d026a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3bf110892ea2fb4649fedb68488d026a">◆ </a></span>VmaAllocationCreateInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a1cf7774606721026a68aabe3af2e5b50" name="a1cf7774606721026a68aabe3af2e5b50"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1cf7774606721026a68aabe3af2e5b50">◆ </a></span>VmaAllocationInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> <a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters of <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> objects, that can be retrieved using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>. </p>
-
-</div>
-</div>
-<a id="afd73b95e737ee7e76f827cb5472f559f" name="afd73b95e737ee7e76f827cb5472f559f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afd73b95e737ee7e76f827cb5472f559f">◆ </a></span>VmaAllocatorCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. </p>
-
-</div>
-</div>
-<a id="acfe6863e160722c2c1bbcf7573fddc4d" name="acfe6863e160722c2c1bbcf7573fddc4d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acfe6863e160722c2c1bbcf7573fddc4d">◆ </a></span>VmaAllocatorCreateFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#acfe6863e160722c2c1bbcf7573fddc4d">VmaAllocatorCreateFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aad9652301d33759b83e52d4f3605a14a" name="aad9652301d33759b83e52d4f3605a14a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aad9652301d33759b83e52d4f3605a14a">◆ </a></span>VmaAllocatorCreateInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Description of a Allocator to be created. </p>
-
-</div>
-</div>
-<a id="a1988031b0223fdbd564250fa1edd942c" name="a1988031b0223fdbd564250fa1edd942c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1988031b0223fdbd564250fa1edd942c">◆ </a></span>VmaAllocatorInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> <a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object. </p>
-
-</div>
-</div>
-<a id="aa078667e71b1ef24e87a6a30d128381d" name="aa078667e71b1ef24e87a6a30d128381d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa078667e71b1ef24e87a6a30d128381d">◆ </a></span>VmaBudget</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_budget.html">VmaBudget</a> <a class="el" href="struct_vma_budget.html">VmaBudget</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Statistics of current memory usage and available budget, in bytes, for specific memory heap. </p>
-
-</div>
-</div>
-<a id="a13415cc0b443353a7b5abda300b833fc" name="a13415cc0b443353a7b5abda300b833fc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a13415cc0b443353a7b5abda300b833fc">◆ </a></span>VmaDefragmentationFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be used in <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. </p>
-
-</div>
-</div>
-<a id="a88a77cef37e5d3c4fc9eb328885d048d" name="a88a77cef37e5d3c4fc9eb328885d048d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a88a77cef37e5d3c4fc9eb328885d048d">◆ </a></span>VmaDefragmentationFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#a88a77cef37e5d3c4fc9eb328885d048d">VmaDefragmentationFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a2bf47f96bf92bed2a49461bd9af3acfa" name="a2bf47f96bf92bed2a49461bd9af3acfa"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2bf47f96bf92bed2a49461bd9af3acfa">◆ </a></span>VmaDefragmentationInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deprecated. Optional configuration parameters to be passed to function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
-<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead. </dd></dl>
-
-</div>
-</div>
-<a id="ad6daeffaa670ce6d11a203a6224c9937" name="ad6daeffaa670ce6d11a203a6224c9937"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad6daeffaa670ce6d11a203a6224c9937">◆ </a></span>VmaDefragmentationInfo2</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters for defragmentation. </p>
-<p >To be used with function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. </p>
-
-</div>
-</div>
-<a id="a72aebd522242d56abea67b4f47f6549e" name="a72aebd522242d56abea67b4f47f6549e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a72aebd522242d56abea67b4f47f6549e">◆ </a></span>VmaDefragmentationPassInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> <a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters for incremental defragmentation steps. </p>
-<p >To be used with function <a class="el" href="vk__mem__alloc_8h.html#ac0f01545b6262f7d4d128fc8f8e5c77b">vmaBeginDefragmentationPass()</a>. </p>
-
-</div>
-</div>
-<a id="ad6799e8e2b1527abfc84d33bc44aeaf5" name="ad6799e8e2b1527abfc84d33bc44aeaf5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad6799e8e2b1527abfc84d33bc44aeaf5">◆ </a></span>VmaDefragmentationPassMoveInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a> <a class="el" href="struct_vma_defragmentation_pass_move_info.html">VmaDefragmentationPassMoveInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="ad94034192259c2e34a4d1c5e27810403" name="ad94034192259c2e34a4d1c5e27810403"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad94034192259c2e34a4d1c5e27810403">◆ </a></span>VmaDefragmentationStats</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> <a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Statistics returned by function <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>. </p>
-
-</div>
-</div>
-<a id="a77692d3c8770ea8882d573206bd27b2b" name="a77692d3c8770ea8882d573206bd27b2b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a77692d3c8770ea8882d573206bd27b2b">◆ </a></span>VmaDeviceMemoryCallbacks</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a> <a class="el" href="struct_vma_device_memory_callbacks.html">VmaDeviceMemoryCallbacks</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set of callbacks that the library will call for <code>vkAllocateMemory</code> and <code>vkFreeMemory</code>. </p>
-<p >Provided for informative purpose, e.g. to gather statistics about number of allocations or total amount of memory allocated in Vulkan.</p>
-<p >Used in <a class="el" href="struct_vma_allocator_create_info.html#af1380969b5e1ea4c3184a877892d260e" title="Informative callbacks for vkAllocateMemory, vkFreeMemory. Optional.">VmaAllocatorCreateInfo::pDeviceMemoryCallbacks</a>. </p>
-
-</div>
-</div>
-<a id="a806e8499dde802e59eb72a1dc811c35f" name="a806e8499dde802e59eb72a1dc811c35f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a806e8499dde802e59eb72a1dc811c35f">◆ </a></span>VmaMemoryUsage</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a> <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a4d4f2efc2509157a9e4ecd4fd7942303" name="a4d4f2efc2509157a9e4ecd4fd7942303"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4d4f2efc2509157a9e4ecd4fd7942303">◆ </a></span>VmaPoolCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. </p>
-
-</div>
-</div>
-<a id="a2770e325ea42e087c1b91fdf46d0292a" name="a2770e325ea42e087c1b91fdf46d0292a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2770e325ea42e087c1b91fdf46d0292a">◆ </a></span>VmaPoolCreateFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#a2770e325ea42e087c1b91fdf46d0292a">VmaPoolCreateFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7" title="Flags to be passed as VmaPoolCreateInfo::flags.">VmaPoolCreateFlagBits</a>. </p>
-
-</div>
-</div>
-<a id="a1017aa83489c0eee8d2163d2bf253f67" name="a1017aa83489c0eee8d2163d2bf253f67"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1017aa83489c0eee8d2163d2bf253f67">◆ </a></span>VmaPoolCreateInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Describes parameter of created <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. </p>
-
-</div>
-</div>
-<a id="a4759a2d9f99c19ba7627553c847132f1" name="a4759a2d9f99c19ba7627553c847132f1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4759a2d9f99c19ba7627553c847132f1">◆ </a></span>VmaPoolStats</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> <a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Describes parameter of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a>. </p>
-
-</div>
-</div>
-<a id="aec5b57e29c97b5d69c6d5654d60df878" name="aec5b57e29c97b5d69c6d5654d60df878"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aec5b57e29c97b5d69c6d5654d60df878">◆ </a></span>VmaStatInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> <a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Calculated statistics of memory usage in entire allocator. </p>
-
-</div>
-</div>
-<a id="a21813b2efdf3836767a9058cd8a94034" name="a21813b2efdf3836767a9058cd8a94034"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a21813b2efdf3836767a9058cd8a94034">◆ </a></span>VmaStats</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_stats.html">VmaStats</a> <a class="el" href="struct_vma_stats.html">VmaStats</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>General statistics from current state of Allocator. </p>
-
-</div>
-</div>
-<a id="a936815e64946a6b6d812d08d10184c23" name="a936815e64946a6b6d812d08d10184c23"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a936815e64946a6b6d812d08d10184c23">◆ </a></span>VmaVirtualAllocationCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. </p>
-
-</div>
-</div>
-<a id="ae96ffc099bf898257fb19e9410ed08a7" name="ae96ffc099bf898257fb19e9410ed08a7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae96ffc099bf898257fb19e9410ed08a7">◆ </a></span>VmaVirtualAllocationCreateFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#ae96ffc099bf898257fb19e9410ed08a7">VmaVirtualAllocationCreateFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6" title="Flags to be passed as VmaVirtualAllocationCreateInfo::flags.">VmaVirtualAllocationCreateFlagBits</a>. </p>
-
-</div>
-</div>
-<a id="ac3c90d80bedc6847a41b82d0e2158c9e" name="ac3c90d80bedc6847a41b82d0e2158c9e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac3c90d80bedc6847a41b82d0e2158c9e">◆ </a></span>VmaVirtualAllocationCreateInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters of created virtual allocation to be passed to <a class="el" href="vk__mem__alloc_8h.html#a1c15925e6745dacee0cfc877fffecec2" title="Allocates new virtual allocation inside given VmaVirtualBlock.">vmaVirtualAllocate()</a>. </p>
-
-</div>
-</div>
-<a id="a75bc33ff7cf18c98e101f570dc2a5ebc" name="a75bc33ff7cf18c98e101f570dc2a5ebc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a75bc33ff7cf18c98e101f570dc2a5ebc">◆ </a></span>VmaVirtualAllocationInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> <a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters of an existing virtual allocation, returned by <a class="el" href="vk__mem__alloc_8h.html#ab5fcb961ffea69023e7e0ea100bdad8e" title="Returns information about a specific virtual allocation within a virtual block, like its size and pUs...">vmaGetVirtualAllocationInfo()</a>. </p>
-
-</div>
-</div>
-<a id="a0860ba1c0a67178fae4aecb63a78573e" name="a0860ba1c0a67178fae4aecb63a78573e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0860ba1c0a67178fae4aecb63a78573e">◆ </a></span>VmaVirtualBlockCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef enum <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a> <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. </p>
-
-</div>
-</div>
-<a id="a4e49c2f0ab7f6b4868833e5bac78d91e" name="a4e49c2f0ab7f6b4868833e5bac78d91e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4e49c2f0ab7f6b4868833e5bac78d91e">◆ </a></span>VmaVirtualBlockCreateFlags</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef VkFlags <a class="el" href="vk__mem__alloc_8h.html#a4e49c2f0ab7f6b4868833e5bac78d91e">VmaVirtualBlockCreateFlags</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. See <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca" title="Flags to be passed as VmaVirtualBlockCreateInfo::flags.">VmaVirtualBlockCreateFlagBits</a>. </p>
-
-</div>
-</div>
-<a id="a4753d42d40217a3a652a3cdf253ad773" name="a4753d42d40217a3a652a3cdf253ad773"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4753d42d40217a3a652a3cdf253ad773">◆ </a></span>VmaVirtualBlockCreateInfo</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Parameters of created <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object to be passed to <a class="el" href="vk__mem__alloc_8h.html#ab585754076877265fdae33e5c40ef13b" title="Creates new VmaVirtualBlock object.">vmaCreateVirtualBlock()</a>. </p>
-
-</div>
-</div>
-<a id="abb0a8e3b5040d847571cca6c7f9a8074" name="abb0a8e3b5040d847571cca6c7f9a8074"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abb0a8e3b5040d847571cca6c7f9a8074">◆ </a></span>VmaVulkanFunctions</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">typedef struct <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a> <a class="el" href="struct_vma_vulkan_functions.html">VmaVulkanFunctions</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Pointers to some Vulkan functions - a subset used by the library. </p>
-<p >Used in <a class="el" href="struct_vma_allocator_create_info.html#a3dc197be3227da7338b1643f70db36bd" title="Pointers to Vulkan functions. Can be null.">VmaAllocatorCreateInfo::pVulkanFunctions</a>. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Enumeration Type Documentation</h2>
-<a id="ad9889c10c798b040d59c92f257cae597" name="ad9889c10c798b040d59c92f257cae597"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad9889c10c798b040d59c92f257cae597">◆ </a></span>VmaAllocationCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597">VmaAllocationCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_allocation_create_info.html#add09658ac14fe290ace25470ddd6d41b" title="Use VmaAllocationCreateFlagBits enum.">VmaAllocationCreateInfo::flags</a>. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" name="ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f"></a>VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT </td><td class="fielddoc"><p >Set this flag if the allocation should have its own memory block. </p>
-<p >Use it for special, big resources, like fullscreen images used as attachments. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" name="ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff"></a>VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT </td><td class="fielddoc"><p >Set this flag to only try to allocate from existing <code>VkDeviceMemory</code> blocks and never create new such block. </p>
-<p >If new allocation cannot be placed in any of the existing blocks, allocation fails with <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> error.</p>
-<p >You should not use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> and <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> at the same time. It makes no sense.</p>
-<p >If <a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> is not null, this flag is implied and ignored. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" name="ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f"></a>VMA_ALLOCATION_CREATE_MAPPED_BIT </td><td class="fielddoc"><p >Set this flag to use a memory that will be persistently mapped and retrieve pointer to it. </p>
-<p >Pointer to mapped memory will be returned through <a class="el" href="struct_vma_allocation_info.html#a5eeffbe2d2f30f53370ff14aefbadbe2" title="Pointer to the beginning of this allocation as mapped data.">VmaAllocationInfo::pMappedData</a>.</p>
-<p >It is valid to use this flag for allocation made from memory type that is not <code>HOST_VISIBLE</code>. This flag is then ignored and memory is not mapped. This is useful if you need an allocation that is efficient to use on GPU (<code>DEVICE_LOCAL</code>) and still want to map it directly if possible on platforms that support it (e.g. Intel GPU). </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103" name="ad9889c10c798b040d59c92f257cae597ad7e8035e8edecd8dfa1f32a194bdf103"></a>VMA_ALLOCATION_CREATE_RESERVED_1_BIT </td><td class="fielddoc"><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000003">Deprecated:</a></b></dt><dd>Removed. Do not use. </dd></dl>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7" name="ad9889c10c798b040d59c92f257cae597ae9290dbcf5817e7616d5802e2aa251e7"></a>VMA_ALLOCATION_CREATE_RESERVED_2_BIT </td><td class="fielddoc"><dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000004">Deprecated:</a></b></dt><dd>Removed. Do not use. </dd></dl>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520" name="ad9889c10c798b040d59c92f257cae597aa6f24f821cd6a7c5e4a443f7bf59c520"></a>VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT </td><td class="fielddoc"><p >Set this flag to treat <a class="el" href="struct_vma_allocation_create_info.html#a8259e85c272683434f4abb4ddddffe19" title="Custom general-purpose pointer that will be stored in VmaAllocation, can be read as VmaAllocationInfo...">VmaAllocationCreateInfo::pUserData</a> as pointer to a null-terminated string. Instead of copying pointer value, a local copy of the string is made and stored in allocation's <code>pUserData</code>. The string is automatically freed together with the allocation. It is also used in <a class="el" href="vk__mem__alloc_8h.html#aa4fee7eb5253377599ef4fd38c93c2a0" title="Builds and returns statistics as a null-terminated string in JSON format.">vmaBuildStatsString()</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df" name="ad9889c10c798b040d59c92f257cae597a42ba3a2d2c7117953210b7c3ef8da0df"></a>VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT </td><td class="fielddoc"><p >Allocation will be created from upper stack in a double stack pool.</p>
-<p >This flag is only allowed for custom pools created with <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> flag. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea" name="ad9889c10c798b040d59c92f257cae597a2310568c62208af432724305fe29ccea"></a>VMA_ALLOCATION_CREATE_DONT_BIND_BIT </td><td class="fielddoc"><p >Create both buffer/image and allocation, but don't bind them together. It is useful when you want to bind yourself to do some more advanced binding, e.g. using some extensions. The flag is meaningful only with functions that bind by default: <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. Otherwise it is ignored. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d" name="ad9889c10c798b040d59c92f257cae597ab8b1764f3e9022368e440c057783b92d"></a>VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT </td><td class="fielddoc"><p >Create allocation only if additional device memory required for it, if any, won't exceed memory budget. Otherwise return <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6" name="ad9889c10c798b040d59c92f257cae597afb0ee060cd733aaa5e249704ff589ad6"></a>VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT </td><td class="fielddoc"><p >Set this flag if the allocated memory will have aliasing resources. </p>
-<p >Usage of this flag prevents supplying <code>VkMemoryDedicatedAllocateInfoKHR</code> when VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified. Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d" name="ad9889c10c798b040d59c92f257cae597a839826775c62319466441f86496f036d"></a>VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses smallest possible free range for the allocation. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62" name="ad9889c10c798b040d59c92f257cae597ad242a04f802e25fef0b880afe8bb0a62"></a>VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses biggest possible free range for the allocation. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777" name="ad9889c10c798b040d59c92f257cae597a33eb2052674f3ad92386c714a65fb777"></a>VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT </td><td class="fielddoc"><p >Allocation strategy that chooses first suitable free range for the allocation.</p>
-<p >"First" doesn't necessarily means the one with smallest offset in memory, but rather the one that is easiest and fastest to find. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d" name="ad9889c10c798b040d59c92f257cae597a8af1210cf591784afa026d94998f735d"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory usage. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d" name="ad9889c10c798b040d59c92f257cae597a0729e932b7ea170e3a128cad96c5cf6d"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize allocation time. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706" name="ad9889c10c798b040d59c92f257cae597a621b704103eb3360230c860acf36e706"></a>VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory fragmentation. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e" name="ad9889c10c798b040d59c92f257cae597a8e16845d81ae3d27c47106d4770d5c7e"></a>VMA_ALLOCATION_CREATE_STRATEGY_MASK </td><td class="fielddoc"><p >A bit mask to extract only <code>STRATEGY</code> bits from entire set of flags. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882" name="ad9889c10c798b040d59c92f257cae597ae5633ec569f4899cf8f29e7385b2f882"></a>VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="a4f87c9100d154a65a4ad495f7763cf7c" name="a4f87c9100d154a65a4ad495f7763cf7c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4f87c9100d154a65a4ad495f7763cf7c">◆ </a></span>VmaAllocatorCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7c">VmaAllocatorCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags for created <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d" name="a4f87c9100d154a65a4ad495f7763cf7ca4816ddaed324ba110172ca608a20f29d"></a>VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT </td><td class="fielddoc"><p >Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you. </p>
-<p >Using this flag may increase performance because internal mutexes are not used. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" name="a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"></a>VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT </td><td class="fielddoc"><p >Enables usage of VK_KHR_dedicated_allocation extension. </p>
-<p >The flag works only if <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>== VK_API_VERSION_1_0</code>. When it is <code>VK_API_VERSION_1_1</code>, the flag is ignored because the extension has been promoted to Vulkan 1.1.</p>
-<p >Using this extension will automatically allocate dedicated blocks of memory for some buffers and images instead of suballocating place for them out of bigger memory blocks (as if you explicitly used <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> flag) when it is recommended by the driver. It may improve performance on some GPUs.</p>
-<p >You may set this flag only if you found out that following device extensions are supported, you enabled them while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want them to be used internally by this library:</p>
-<ul>
-<li>VK_KHR_get_memory_requirements2 (device extension)</li>
-<li>VK_KHR_dedicated_allocation (device extension)</li>
-</ul>
-<p >When this flag is set, you can experience following warnings reported by Vulkan validation layer. You can ignore them.</p>
-<blockquote class="doxtable">
-<p >vkBindBufferMemory(): Binding memory to buffer 0x2d but vkGetBufferMemoryRequirements() has not been called on that buffer. </p>
-</blockquote>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee" name="a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee"></a>VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT </td><td class="fielddoc"><p >Enables usage of VK_KHR_bind_memory2 extension.</p>
-<p >The flag works only if <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>== VK_API_VERSION_1_0</code>. When it is <code>VK_API_VERSION_1_1</code>, the flag is ignored because the extension has been promoted to Vulkan 1.1.</p>
-<p >You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want it to be used internally by this library.</p>
-<p >The extension provides functions <code>vkBindBufferMemory2KHR</code> and <code>vkBindImageMemory2KHR</code>, which allow to pass a chain of <code>pNext</code> structures while binding. This flag is required if you use <code>pNext</code> parameter in <a class="el" href="vk__mem__alloc_8h.html#a927c944f45e0f2941182abb6f608e64a" title="Binds buffer to allocation with additional parameters.">vmaBindBufferMemory2()</a> or <a class="el" href="vk__mem__alloc_8h.html#aa8251ee81b0045a443e35b8e8aa021bc" title="Binds image to allocation with additional parameters.">vmaBindImageMemory2()</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0" name="a4f87c9100d154a65a4ad495f7763cf7ca4d4687863f7bd4b418c6006dc04400b0"></a>VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT </td><td class="fielddoc"><p >Enables usage of VK_EXT_memory_budget extension.</p>
-<p >You may set this flag only if you found out that this device extension is supported, you enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>, and you want it to be used internally by this library, along with another instance extension VK_KHR_get_physical_device_properties2, which is required by it (or Vulkan 1.1, where this extension is promoted).</p>
-<p >The extension provides query for current memory usage and budget, which will probably be more accurate than an estimation used by the library otherwise. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f" name="a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f"></a>VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT </td><td class="fielddoc"><p >Enables usage of VK_AMD_device_coherent_memory extension.</p>
-<p >You may set this flag only if you:</p>
-<ul>
-<li>found out that this device extension is supported and enabled it while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>,</li>
-<li>checked that <code>VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory</code> is true and set it while creating the Vulkan device,</li>
-<li>want it to be used internally by this library.</li>
-</ul>
-<p >The extension and accompanying device feature provide access to memory types with <code>VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD</code> and <code>VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD</code> flags. They are useful mostly for writing breadcrumb markers - a common method for debugging GPU crash/hang/TDR.</p>
-<p >When the extension is not enabled, such memory types are still enumerated, but their usage is illegal. To protect from this error, if you don't create the allocator with this flag, it will refuse to allocate any memory or create a custom pool in such memory type, returning <code>VK_ERROR_FEATURE_NOT_PRESENT</code>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089" name="a4f87c9100d154a65a4ad495f7763cf7ca5f1b28b0414319d1687e1f2b30ab0089"></a>VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT </td><td class="fielddoc"><p >Enables usage of "buffer device address" feature, which allows you to use function <code>vkGetBufferDeviceAddress*</code> to get raw GPU pointer to a buffer and pass it for usage inside a shader.</p>
-<p >You may set this flag only if you:</p>
-<ol type="1">
-<li>(For Vulkan version < 1.2) Found as available and enabled device extension VK_KHR_buffer_device_address. This extension is promoted to core Vulkan 1.2.</li>
-<li>Found as available and enabled device feature <code>VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress</code>.</li>
-</ol>
-<p >When this flag is set, you can create buffers with <code>VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT</code> using VMA. The library automatically adds <code>VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT</code> to allocated memory blocks wherever it might be needed.</p>
-<p >For more information, see documentation chapter <a class="el" href="enabling_buffer_device_address.html">Enabling buffer device address</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a" name="a4f87c9100d154a65a4ad495f7763cf7caffdd7a5169be3dbd7cbf6b3619e4f78a"></a>VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT </td><td class="fielddoc"><p >Enables usage of VK_EXT_memory_priority extension in the library.</p>
-<p >You may set this flag only if you found available and enabled this device extension, along with <code>VkPhysicalDeviceMemoryPriorityFeaturesEXT::memoryPriority == VK_TRUE</code>, while creating Vulkan device passed as <a class="el" href="struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" title="Vulkan device.">VmaAllocatorCreateInfo::device</a>.</p>
-<p >When this flag is used, <a class="el" href="struct_vma_allocation_create_info.html#a983d39e1a2e63649d78a960aa2fdd0f7" title="A floating-point value between 0 and 1, indicating the priority of the allocation relative to other m...">VmaAllocationCreateInfo::priority</a> and <a class="el" href="struct_vma_pool_create_info.html#a16e686c688f6725f119ebf6e24ab5274" title="A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relat...">VmaPoolCreateInfo::priority</a> are used to set priorities of allocated Vulkan memory. Without it, these variables are ignored.</p>
-<p >A priority must be a floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations. Larger values are higher priority. The granularity of the priorities is implementation-dependent. It is automatically passed to every call to <code>vkAllocateMemory</code> done by the library using structure <code>VkMemoryPriorityAllocateInfoEXT</code>. The value to be used for default priority is 0.5. For more details, see the documentation of the VK_EXT_memory_priority extension. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c" name="a4f87c9100d154a65a4ad495f7763cf7cae4d5ad929caba5f23eb502b13bd5286c"></a>VMA_ALLOCATOR_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="a6552a65b71d16f378c6994b3ceaef50c" name="a6552a65b71d16f378c6994b3ceaef50c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6552a65b71d16f378c6994b3ceaef50c">◆ </a></span>VmaDefragmentationFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#a6552a65b71d16f378c6994b3ceaef50c">VmaDefragmentationFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be used in <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. None at the moment. Reserved for future use. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33" name="a6552a65b71d16f378c6994b3ceaef50ca31af49446af2459284a568ce2f3fdd33"></a>VMA_DEFRAGMENTATION_FLAG_INCREMENTAL </td><td class="fielddoc"></td></tr>
-<tr><td class="fieldname"><a id="a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97" name="a6552a65b71d16f378c6994b3ceaef50cab87ec33154803bfeb5ac2b379f1d6a97"></a>VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="aa5846affa1e9da3800e3e78fae2305cc" name="aa5846affa1e9da3800e3e78fae2305cc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa5846affa1e9da3800e3e78fae2305cc">◆ </a></span>VmaMemoryUsage</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305cc">VmaMemoryUsage</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd" name="aa5846affa1e9da3800e3e78fae2305ccaf50d27e34e0925cf3a63db8c839121dd"></a>VMA_MEMORY_USAGE_UNKNOWN </td><td class="fielddoc"><p >No intended memory usage specified. Use other members of <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> to specify your requirements. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7" name="aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7"></a>VMA_MEMORY_USAGE_GPU_ONLY </td><td class="fielddoc"><p >Memory will be used on device only, so fast access from the device is preferred. It usually means device-local GPU (video) memory. No need to be mappable on host. It is roughly equivalent of <code>D3D12_HEAP_TYPE_DEFAULT</code>.</p>
-<p >Usage:</p>
-<ul>
-<li>Resources written and read by device, e.g. images used as attachments.</li>
-<li>Resources transferred from host once (immutable) or infrequently and read by device multiple times, e.g. textures to be sampled, vertex buffers, uniform (constant) buffers, and majority of other types of resources used on GPU.</li>
-</ul>
-<p >Allocation may still end up in <code>HOST_VISIBLE</code> memory on some implementations. In such case, you are free to map it. You can use <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> with this usage type. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5" name="aa5846affa1e9da3800e3e78fae2305cca40bdf4cddeffeb12f43d45ca1286e0a5"></a>VMA_MEMORY_USAGE_CPU_ONLY </td><td class="fielddoc"><p >Memory will be mappable on host. It usually means CPU (system) memory. Guarantees to be <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. CPU access is typically uncached. Writes may be write-combined. Resources created in this pool may still be accessible to the device, but access to them can be slow. It is roughly equivalent of <code>D3D12_HEAP_TYPE_UPLOAD</code>.</p>
-<p >Usage: Staging copy of resources used as transfer source. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67" name="aa5846affa1e9da3800e3e78fae2305cca9066b52c5a7079bb74a69aaf8b92ff67"></a>VMA_MEMORY_USAGE_CPU_TO_GPU </td><td class="fielddoc"><p >Memory that is both mappable on host (guarantees to be <code>HOST_VISIBLE</code>) and preferably fast to access by GPU. CPU access is typically uncached. Writes may be write-combined.</p>
-<p >Usage: Resources written frequently by host (dynamic), read by device. E.g. textures (with LINEAR layout), vertex buffers, uniform buffers updated every frame or every draw call. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27" name="aa5846affa1e9da3800e3e78fae2305cca7b586d2fdaf82a463b58f581ed72be27"></a>VMA_MEMORY_USAGE_GPU_TO_CPU </td><td class="fielddoc"><p >Memory mappable on host (guarantees to be <code>HOST_VISIBLE</code>) and cached. It is roughly equivalent of <code>D3D12_HEAP_TYPE_READBACK</code>.</p>
-<p >Usage:</p>
-<ul>
-<li>Resources written by device, read by host - results of some computations, e.g. screen capture, average scene luminance for HDR tone mapping.</li>
-<li>Any resources read or accessed randomly on host, e.g. CPU-side copy of vertex buffer used as source of transfer, but also used for collision detection. </li>
-</ul>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500" name="aa5846affa1e9da3800e3e78fae2305cca416a444d4d0fc20067c3f76f32ff2500"></a>VMA_MEMORY_USAGE_CPU_COPY </td><td class="fielddoc"><p >CPU memory - memory that is preferably not <code>DEVICE_LOCAL</code>, but also not guaranteed to be <code>HOST_VISIBLE</code>.</p>
-<p >Usage: Staging copy of resources moved from GPU memory to CPU memory as part of custom paging/residency mechanism, to be moved back to GPU memory when needed. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d" name="aa5846affa1e9da3800e3e78fae2305cca835333d9072db63a653818030e17614d"></a>VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED </td><td class="fielddoc"><p >Lazily allocated GPU memory having <code>VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT</code>. Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.</p>
-<p >Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with <code>VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT</code>.</p>
-<p >Allocations with this usage are always created as dedicated - it implies <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e" name="aa5846affa1e9da3800e3e78fae2305cca091e69437ef693e8d0d287f1c719ba6e"></a>VMA_MEMORY_USAGE_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="a9a7c45f9c863695d98c83fa5ac940fe7" name="a9a7c45f9c863695d98c83fa5ac940fe7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9a7c45f9c863695d98c83fa5ac940fe7">◆ </a></span>VmaPoolCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7">VmaPoolCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_pool_create_info.html#a8405139f63d078340ae74513a59f5446" title="Use combination of VmaPoolCreateFlagBits.">VmaPoolCreateInfo::flags</a>. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2" name="a9a7c45f9c863695d98c83fa5ac940fe7a9f1a499508a8edb4e8ba40aa0290a3d2"></a>VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT </td><td class="fielddoc"><p >Use this flag if you always allocate only buffers and linear images or only optimal images out of this pool and so Buffer-Image Granularity can be ignored. </p>
-<p >This is an optional optimization flag.</p>
-<p >If you always allocate using <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>, <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, then you don't need to use it because allocator knows exact type of your allocations so it can handle Buffer-Image Granularity in the optimal way.</p>
-<p >If you also allocate using <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a> or <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, exact type of such allocations is not known, so allocator must be conservative in handling Buffer-Image Granularity, which can lead to suboptimal allocation (wasted memory). In that case, if you can make sure you always allocate only buffers and linear images or only optimal images out of this pool, use this flag to make allocator disregard Buffer-Image Granularity and so make allocations faster and more optimal. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" name="a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726"></a>VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, linear allocation algorithm in this pool. </p>
-<p >Specify this flag to enable linear allocation algorithm, which always creates new allocations after last one and doesn't reuse space from allocations freed in between. It trades memory consumption for simplified algorithm and data structure, which has better performance and uses less memory for metadata.</p>
-<p >By using this flag, you can achieve behavior of free-at-once, stack, ring buffer, and double stack. For details, see documentation chapter <a class="el" href="custom_memory_pools.html#linear_algorithm">Linear allocation algorithm</a>.</p>
-<p >When using this flag, you must specify <a class="el" href="struct_vma_pool_create_info.html#ae41142f2834fcdc82baa4883c187b75c" title="Maximum number of blocks that can be allocated in this pool. Optional.">VmaPoolCreateInfo::maxBlockCount</a> == 1 (or 0 for default). </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" name="a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e"></a>VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, buddy allocation algorithm in this pool. </p>
-<p >It operates on a tree of blocks, each having size that is a power of two and a half of its parent's size. Comparing to default algorithm, this one provides faster allocation and deallocation and decreased external fragmentation, at the expense of more memory wasted (internal fragmentation). For details, see documentation chapter <a class="el" href="custom_memory_pools.html#buddy_algorithm">Buddy allocation algorithm</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c" name="a9a7c45f9c863695d98c83fa5ac940fe7af4d270f8f42517a0f70037ceb6ac1d9c"></a>VMA_POOL_CREATE_ALGORITHM_MASK </td><td class="fielddoc"><p >Bit mask to extract only <code>ALGORITHM</code> bits from entire set of flags. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec" name="a9a7c45f9c863695d98c83fa5ac940fe7a1c7312bea9ea246846b9054fd6bd6aec"></a>VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="a2e9c64d405b14156fea7e10c4ad06cb6" name="a2e9c64d405b14156fea7e10c4ad06cb6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2e9c64d405b14156fea7e10c4ad06cb6">◆ </a></span>VmaVirtualAllocationCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#a2e9c64d405b14156fea7e10c4ad06cb6">VmaVirtualAllocationCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_allocation_create_info.html#ab10e16956cc4bf20ced9de77d1129ea4" title="Use combination of VmaVirtualAllocationCreateFlagBits.">VmaVirtualAllocationCreateInfo::flags</a>. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e" name="a2e9c64d405b14156fea7e10c4ad06cb6a9524a329a55b5ec390d57d90b67ad78e"></a>VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT </td><td class="fielddoc"><p >Allocation will be created from upper stack in a double stack pool. </p>
-<p >This flag is only allowed for virtual blocks created with <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" title="Enables alternative, linear allocation algorithm in this virtual block.">VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT</a> flag. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf" name="a2e9c64d405b14156fea7e10c4ad06cb6ae2a9591a62b5e3b1bdcbc81c6188a1bf"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory usage. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b" name="a2e9c64d405b14156fea7e10c4ad06cb6a562d10a46012719d33167d3dc5dbbf9b"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize allocation time. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a" name="a2e9c64d405b14156fea7e10c4ad06cb6a9aa0c32667ba2deaa9cdeac6149ec47a"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT </td><td class="fielddoc"><p >Allocation strategy that tries to minimize memory fragmentation. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3" name="a2e9c64d405b14156fea7e10c4ad06cb6ac5b5e45c335368d18df59c9f27df17e3"></a>VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK </td><td class="fielddoc"><p >A bit mask to extract only <code>STRATEGY</code> bits from entire set of flags. </p>
-<p >These strategy flags are binary compatible with equivalent flags in <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597" title="Flags to be passed as VmaAllocationCreateInfo::flags.">VmaAllocationCreateFlagBits</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9" name="a2e9c64d405b14156fea7e10c4ad06cb6ac1163c03ea837fa663462dc286d6a1a9"></a>VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<a id="a88bcf8c1cd3bb1610ff7343811c65bca" name="a88bcf8c1cd3bb1610ff7343811c65bca"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a88bcf8c1cd3bb1610ff7343811c65bca">◆ </a></span>VmaVirtualBlockCreateFlagBits</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">enum <a class="el" href="vk__mem__alloc_8h.html#a88bcf8c1cd3bb1610ff7343811c65bca">VmaVirtualBlockCreateFlagBits</a></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flags to be passed as <a class="el" href="struct_vma_virtual_block_create_info.html#a5838b15c053a0370420e4e1d82d09c09" title="Use combination of VmaVirtualBlockCreateFlagBits.">VmaVirtualBlockCreateInfo::flags</a>. </p>
-<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96" name="a88bcf8c1cd3bb1610ff7343811c65bcaae6423e2fa2f3c9211b21c819e3f10f96"></a>VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, linear allocation algorithm in this virtual block. </p>
-<p >Specify this flag to enable linear allocation algorithm, which always creates new allocations after last one and doesn't reuse space from allocations freed in between. It trades memory consumption for simplified algorithm and data structure, which has better performance and uses less memory for metadata.</p>
-<p >By using this flag, you can achieve behavior of free-at-once, stack, ring buffer, and double stack. For details, see documentation chapter <a class="el" href="custom_memory_pools.html#linear_algorithm">Linear allocation algorithm</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63" name="a88bcf8c1cd3bb1610ff7343811c65bcaa923116612509e26bf84982b9baf25c63"></a>VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT </td><td class="fielddoc"><p >Enables alternative, buddy allocation algorithm in this virtual block. </p>
-<p >It operates on a tree of blocks, each having size that is a power of two and a half of its parent's size. Comparing to default algorithm, this one provides faster allocation and deallocation and decreased external fragmentation, at the expense of more memory wasted (internal fragmentation). For details, see documentation chapter <a class="el" href="custom_memory_pools.html#buddy_algorithm">Buddy allocation algorithm</a>. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844" name="a88bcf8c1cd3bb1610ff7343811c65bcaaf9487467136e1a9e371894dc3a7c4844"></a>VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK </td><td class="fielddoc"><p >Bit mask to extract only <code>ALGORITHM</code> bits from entire set of flags. </p>
-</td></tr>
-<tr><td class="fieldname"><a id="a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87" name="a88bcf8c1cd3bb1610ff7343811c65bcaa5fc0d333c3d5687a8bbf57df9b377a87"></a>VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM </td><td class="fielddoc"></td></tr>
-</table>
-
-</div>
-</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a id="abf28077dbf82d0908b8acbe8ee8dd9b8" name="abf28077dbf82d0908b8acbe8ee8dd9b8"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abf28077dbf82d0908b8acbe8ee8dd9b8">◆ </a></span>vmaAllocateMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaAllocateMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkMemoryRequirements * </td>
- <td class="paramname"><em>pVkMemoryRequirements</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>General purpose memory allocation. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pVkMemoryRequirements</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td></td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Handle to allocated memory. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
- </table>
- </dd>
-</dl>
-<p>You should free the memory using <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e" title="Frees memory and destroys multiple allocations.">vmaFreeMemoryPages()</a>.</p>
-<p >It is recommended to use <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>, <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> instead whenever possible. </p>
-
-</div>
-</div>
-<a id="a7fdf64415b6c3d83c454f28d2c53df7b" name="a7fdf64415b6c3d83c454f28d2c53df7b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7fdf64415b6c3d83c454f28d2c53df7b">◆ </a></span>vmaAllocateMemoryForBuffer()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaAllocateMemoryForBuffer </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer </td>
- <td class="paramname"><em>buffer</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">buffer</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td></td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Handle to allocated memory. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
- </table>
- </dd>
-</dl>
-<p>You should free the memory using <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a>. </p>
-
-</div>
-</div>
-<a id="a0faa3f9e5fb233d29d1e00390650febb" name="a0faa3f9e5fb233d29d1e00390650febb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0faa3f9e5fb233d29d1e00390650febb">◆ </a></span>vmaAllocateMemoryForImage()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaAllocateMemoryForImage </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkImage </td>
- <td class="paramname"><em>image</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Function similar to <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>. </p>
-
-</div>
-</div>
-<a id="ad37e82e492b3de38fc3f4cffd9ad0ae1" name="ad37e82e492b3de38fc3f4cffd9ad0ae1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad37e82e492b3de38fc3f4cffd9ad0ae1">◆ </a></span>vmaAllocateMemoryPages()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaAllocateMemoryPages </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkMemoryRequirements * </td>
- <td class="paramname"><em>pVkMemoryRequirements</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t </td>
- <td class="paramname"><em>allocationCount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocations</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>General purpose memory allocation for multiple allocation objects at once. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pVkMemoryRequirements</td><td>Memory requirements for each allocation. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Creation parameters for each allocation. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">allocationCount</td><td>Number of allocations to make. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocations</td><td>Pointer to array that will be filled with handles to created allocations. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Pointer to array that will be filled with parameters of created allocations.</td></tr>
- </table>
- </dd>
-</dl>
-<p>You should free the memory using <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> or <a class="el" href="vk__mem__alloc_8h.html#a834b1e4aef395c0a1d56a28e69a4a17e" title="Frees memory and destroys multiple allocations.">vmaFreeMemoryPages()</a>.</p>
-<p >Word "pages" is just a suggestion to use this function to allocate pieces of memory needed for sparse binding. It is just a general purpose allocation function able to make multiple allocations at once. It may be internally optimized to be more efficient than calling <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a> <code>allocationCount</code> times.</p>
-<p >All allocations are made using same parameters. All of them are created out of the same memory pool and type. If any allocation fails, all allocations already made within this function call are also freed, so that when returned result is not <code>VK_SUCCESS</code>, <code>pAllocation</code> array is always entirely filled with <code>VK_NULL_HANDLE</code>. </p>
-
-</div>
-</div>
-<a id="ac0f01545b6262f7d4d128fc8f8e5c77b" name="ac0f01545b6262f7d4d128fc8f8e5c77b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac0f01545b6262f7d4d128fc8f8e5c77b">◆ </a></span>vmaBeginDefragmentationPass()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaBeginDefragmentationPass </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
- <td class="paramname"><em>context</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_pass_info.html">VmaDefragmentationPassInfo</a> * </td>
- <td class="paramname"><em>pInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a6b0929b914b60cf2d45cac4bf3547470" name="a6b0929b914b60cf2d45cac4bf3547470"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6b0929b914b60cf2d45cac4bf3547470">◆ </a></span>vmaBindBufferMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaBindBufferMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer </td>
- <td class="paramname"><em>buffer</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Binds buffer to allocation. </p>
-<p >Binds specified buffer to region of memory represented by specified allocation. Gets <code>VkDeviceMemory</code> handle and offset from the allocation. If you want to create a buffer, allocate memory for it and bind them together separately, you should use this function for binding instead of standard <code>vkBindBufferMemory()</code>, because it ensures proper synchronization so that when a <code>VkDeviceMemory</code> object is used by multiple allocations, calls to <code>vkBind*Memory()</code> or <code>vkMapMemory()</code> won't happen from multiple threads simultaneously (which is illegal in Vulkan).</p>
-<p >It is recommended to use function <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> instead of this one. </p>
-
-</div>
-</div>
-<a id="a927c944f45e0f2941182abb6f608e64a" name="a927c944f45e0f2941182abb6f608e64a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a927c944f45e0f2941182abb6f608e64a">◆ </a></span>vmaBindBufferMemory2()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaBindBufferMemory2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>allocationLocalOffset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer </td>
- <td class="paramname"><em>buffer</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>pNext</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Binds buffer to allocation with additional parameters. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramname">allocation</td><td></td></tr>
- <tr><td class="paramname">allocationLocalOffset</td><td>Additional offset to be added while binding, relative to the beginning of the <code>allocation</code>. Normally it should be 0. </td></tr>
- <tr><td class="paramname">buffer</td><td></td></tr>
- <tr><td class="paramname">pNext</td><td>A chain of structures to be attached to <code>VkBindBufferMemoryInfoKHR</code> structure used internally. Normally it should be null.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function is similar to <a class="el" href="vk__mem__alloc_8h.html#a6b0929b914b60cf2d45cac4bf3547470" title="Binds buffer to allocation.">vmaBindBufferMemory()</a>, but it provides additional parameters.</p>
-<p >If <code>pNext</code> is not null, <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must have been created with <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> flag or with <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>>= VK_API_VERSION_1_1</code>. Otherwise the call fails. </p>
-
-</div>
-</div>
-<a id="a3d3ca45799923aa5d138e9e5f9eb2da5" name="a3d3ca45799923aa5d138e9e5f9eb2da5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3d3ca45799923aa5d138e9e5f9eb2da5">◆ </a></span>vmaBindImageMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaBindImageMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkImage </td>
- <td class="paramname"><em>image</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Binds image to allocation. </p>
-<p >Binds specified image to region of memory represented by specified allocation. Gets <code>VkDeviceMemory</code> handle and offset from the allocation. If you want to create an image, allocate memory for it and bind them together separately, you should use this function for binding instead of standard <code>vkBindImageMemory()</code>, because it ensures proper synchronization so that when a <code>VkDeviceMemory</code> object is used by multiple allocations, calls to <code>vkBind*Memory()</code> or <code>vkMapMemory()</code> won't happen from multiple threads simultaneously (which is illegal in Vulkan).</p>
-<p >It is recommended to use function <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a> instead of this one. </p>
-
-</div>
-</div>
-<a id="aa8251ee81b0045a443e35b8e8aa021bc" name="aa8251ee81b0045a443e35b8e8aa021bc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa8251ee81b0045a443e35b8e8aa021bc">◆ </a></span>vmaBindImageMemory2()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaBindImageMemory2 </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>allocationLocalOffset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkImage </td>
- <td class="paramname"><em>image</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const void * </td>
- <td class="paramname"><em>pNext</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Binds image to allocation with additional parameters. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramname">allocation</td><td></td></tr>
- <tr><td class="paramname">allocationLocalOffset</td><td>Additional offset to be added while binding, relative to the beginning of the <code>allocation</code>. Normally it should be 0. </td></tr>
- <tr><td class="paramname">image</td><td></td></tr>
- <tr><td class="paramname">pNext</td><td>A chain of structures to be attached to <code>VkBindImageMemoryInfoKHR</code> structure used internally. Normally it should be null.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function is similar to <a class="el" href="vk__mem__alloc_8h.html#a3d3ca45799923aa5d138e9e5f9eb2da5" title="Binds image to allocation.">vmaBindImageMemory()</a>, but it provides additional parameters.</p>
-<p >If <code>pNext</code> is not null, <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object must have been created with <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca8fb75bf07cd184ab903596295e863dee">VMA_ALLOCATOR_CREATE_KHR_BIND_MEMORY2_BIT</a> flag or with <a class="el" href="struct_vma_allocator_create_info.html#ae0ffc55139b54520a6bb704b29ffc285" title="Optional. The highest version of Vulkan that the application is designed to use.">VmaAllocatorCreateInfo::vulkanApiVersion</a> <code>>= VK_API_VERSION_1_1</code>. Otherwise the call fails. </p>
-
-</div>
-</div>
-<a id="aa4fee7eb5253377599ef4fd38c93c2a0" name="aa4fee7eb5253377599ef4fd38c93c2a0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa4fee7eb5253377599ef4fd38c93c2a0">◆ </a></span>vmaBuildStatsString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaBuildStatsString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char ** </td>
- <td class="paramname"><em>ppStatsString</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBool32 </td>
- <td class="paramname"><em>detailedMap</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Builds and returns statistics as a null-terminated string in JSON format. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ppStatsString</td><td>Must be freed using <a class="el" href="vk__mem__alloc_8h.html#a3104eb30d8122c84dd8541063f145288">vmaFreeStatsString()</a> function. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">detailedMap</td><td></td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a52d810e1222c592e5d80556ad005f1e6" name="a52d810e1222c592e5d80556ad005f1e6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a52d810e1222c592e5d80556ad005f1e6">◆ </a></span>vmaBuildVirtualBlockStatsString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaBuildVirtualBlockStatsString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char ** </td>
- <td class="paramname"><em>ppStatsString</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBool32 </td>
- <td class="paramname"><em>detailedMap</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Builds and returns a null-terminated string in JSON format with information about given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">virtualBlock</td><td>Virtual block. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ppStatsString</td><td>Returned string. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">detailedMap</td><td>Pass <code>VK_FALSE</code> to only obtain statistics as returned by <a class="el" href="vk__mem__alloc_8h.html#a95169b4730e94757897470086ec2768a" title="Calculates and returns statistics about virtual allocations and memory usage in given VmaVirtualBlock...">vmaCalculateVirtualBlockStats()</a>. Pass <code>VK_TRUE</code> to also obtain full list of allocations and free spaces.</td></tr>
- </table>
- </dd>
-</dl>
-<p>Returned string must be freed using <a class="el" href="vk__mem__alloc_8h.html#a47fb8d8aa69df4a7c23a9719b4080623" title="Frees a string returned by vmaBuildVirtualBlockStatsString().">vmaFreeVirtualBlockStatsString()</a>. </p>
-
-</div>
-</div>
-<a id="a333b61c1788cb23559177531e6a93ca3" name="a333b61c1788cb23559177531e6a93ca3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a333b61c1788cb23559177531e6a93ca3">◆ </a></span>vmaCalculateStats()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaCalculateStats </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_stats.html">VmaStats</a> * </td>
- <td class="paramname"><em>pStats</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieves statistics from current state of the Allocator. </p>
-<p >This function is called "calculate" not "get" because it has to traverse all internal data structures, so it may be quite slow. For faster but more brief statistics suitable to be called every frame or every allocation, use <a class="el" href="vk__mem__alloc_8h.html#a9f88db9d46a432c0ad7278cecbc5eaa7" title="Retrieves information about current memory budget for all memory heaps.">vmaGetHeapBudgets()</a>.</p>
-<p >Note that when using allocator from multiple threads, returned information may immediately become outdated. </p>
-
-</div>
-</div>
-<a id="a95169b4730e94757897470086ec2768a" name="a95169b4730e94757897470086ec2768a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a95169b4730e94757897470086ec2768a">◆ </a></span>vmaCalculateVirtualBlockStats()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaCalculateVirtualBlockStats </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_stat_info.html">VmaStatInfo</a> * </td>
- <td class="paramname"><em>pStatInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Calculates and returns statistics about virtual allocations and memory usage in given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
-
-</div>
-</div>
-<a id="a49329a7f030dafcf82f7b73334c22e98" name="a49329a7f030dafcf82f7b73334c22e98"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a49329a7f030dafcf82f7b73334c22e98">◆ </a></span>vmaCheckCorruption()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCheckCorruption </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>memoryTypeBits</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramname">memoryTypeBits</td><td>Bit mask, where each bit set means that a memory type with that index should be checked.</td></tr>
- </table>
- </dd>
-</dl>
-<p>Corruption detection is enabled only when <code>VMA_DEBUG_DETECT_CORRUPTION</code> macro is defined to nonzero, <code>VMA_DEBUG_MARGIN</code> is defined to nonzero and only for memory types that are <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. For more information, see <a class="el" href="debugging_memory_usage.html#debugging_memory_usage_corruption_detection">Corruption detection</a>.</p>
-<p >Possible return values:</p>
-<ul>
-<li><code>VK_ERROR_FEATURE_NOT_PRESENT</code> - corruption detection is not enabled for any of specified memory types.</li>
-<li><code>VK_SUCCESS</code> - corruption detection has been performed and succeeded.</li>
-<li><code>VK_ERROR_UNKNOWN</code> - corruption detection has been performed and found memory corruptions around one of the allocations. <code>VMA_ASSERT</code> is also fired in that case.</li>
-<li>Other value: Error returned by Vulkan, e.g. memory mapping failure. </li>
-</ul>
-
-</div>
-</div>
-<a id="ad535935619c7a549bf837e1bb0068f89" name="ad535935619c7a549bf837e1bb0068f89"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad535935619c7a549bf837e1bb0068f89">◆ </a></span>vmaCheckPoolCorruption()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCheckPoolCorruption </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
- <td class="paramname"><em>pool</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Checks magic number in margins around all allocations in given memory pool in search for corruptions. </p>
-<p >Corruption detection is enabled only when <code>VMA_DEBUG_DETECT_CORRUPTION</code> macro is defined to nonzero, <code>VMA_DEBUG_MARGIN</code> is defined to nonzero and the pool is created in memory type that is <code>HOST_VISIBLE</code> and <code>HOST_COHERENT</code>. For more information, see <a class="el" href="debugging_memory_usage.html#debugging_memory_usage_corruption_detection">Corruption detection</a>.</p>
-<p >Possible return values:</p>
-<ul>
-<li><code>VK_ERROR_FEATURE_NOT_PRESENT</code> - corruption detection is not enabled for specified pool.</li>
-<li><code>VK_SUCCESS</code> - corruption detection has been performed and succeeded.</li>
-<li><code>VK_ERROR_UNKNOWN</code> - corruption detection has been performed and found memory corruptions around one of the allocations. <code>VMA_ASSERT</code> is also fired in that case.</li>
-<li>Other value: Error returned by Vulkan, e.g. memory mapping failure. </li>
-</ul>
-
-</div>
-</div>
-<a id="a5eda6f55919fb05bd2f56a112590c571" name="a5eda6f55919fb05bd2f56a112590c571"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5eda6f55919fb05bd2f56a112590c571">◆ </a></span>vmaClearVirtualBlock()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaClearVirtualBlock </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees all virtual allocations inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
-<p >You must either call this function or free each virtual allocation individually with <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> before destroying a virtual block. Otherwise, an assert is called.</p>
-<p >If you keep pointer to some additional metadata associated with your virtual allocation in its <code>pUserData</code>, don't forget to free it as well. </p>
-
-</div>
-</div>
-<a id="a200692051ddb34240248234f5f4c17bb" name="a200692051ddb34240248234f5f4c17bb"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a200692051ddb34240248234f5f4c17bb">◆ </a></span>vmaCreateAllocator()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreateAllocator </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocator_create_info.html">VmaAllocatorCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> * </td>
- <td class="paramname"><em>pAllocator</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Creates Allocator object. </p>
-
-</div>
-</div>
-<a id="ac72ee55598617e8eecca384e746bab51" name="ac72ee55598617e8eecca384e746bab51"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac72ee55598617e8eecca384e746bab51">◆ </a></span>vmaCreateBuffer()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreateBuffer </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkBufferCreateInfo * </td>
- <td class="paramname"><em>pBufferCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer * </td>
- <td class="paramname"><em>pBuffer</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pBufferCreateInfo</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pAllocationCreateInfo</td><td></td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pBuffer</td><td>Buffer that was created. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocation</td><td>Allocation that was created. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationInfo</td><td>Optional. Information about allocated memory. It can be later fetched using function <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function automatically:</p>
-<ol type="1">
-<li>Creates buffer.</li>
-<li>Allocates appropriate memory for it.</li>
-<li>Binds the buffer with the memory.</li>
-</ol>
-<p >If any of these operations fail, buffer and allocation are not created, returned value is negative error code, *pBuffer and *pAllocation are null.</p>
-<p >If the function succeeded, you must destroy both buffer and allocation when you no longer need them using either convenience function <a class="el" href="vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77" title="Destroys Vulkan buffer and frees allocated memory.">vmaDestroyBuffer()</a> or separately, using <code>vkDestroyBuffer()</code> and <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a>.</p>
-<p >If <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" title="Enables usage of VK_KHR_dedicated_allocation extension.">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> flag was used, VK_KHR_dedicated_allocation extension is used internally to query driver whether it requires or prefers the new buffer to have dedicated allocation. If yes, and if dedicated allocation is possible (<a class="el" href="struct_vma_allocation_create_info.html#a6272c0555cfd1fe28bff1afeb6190150" title="Pool that this allocation should be created in.">VmaAllocationCreateInfo::pool</a> is null and <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a89759603401014eb325eb22a3839f2ff" title="Set this flag to only try to allocate from existing VkDeviceMemory blocks and never create new such b...">VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT</a> is not used), it creates dedicated allocation for this buffer, just like when using <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function creates a new <code>VkBuffer</code>. Sub-allocation of parts of one large buffer, although recommended as a good practice, is out of scope of this library and could be implemented by the user as a higher-level logic on top of VMA. </dd></dl>
-
-</div>
-</div>
-<a id="aa06a690013a0d01e60894ac378083834" name="aa06a690013a0d01e60894ac378083834"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa06a690013a0d01e60894ac378083834">◆ </a></span>vmaCreateBufferWithAlignment()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreateBufferWithAlignment </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkBufferCreateInfo * </td>
- <td class="paramname"><em>pBufferCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>minAlignment</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer * </td>
- <td class="paramname"><em>pBuffer</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Creates a buffer with additional minimum alignment. </p>
-<p >Similar to <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> but provides additional parameter <code>minAlignment</code> which allows to specify custom, minimum alignment to be used when placing the buffer inside a larger memory block, which may be needed e.g. for interop with OpenGL. </p>
-
-</div>
-</div>
-<a id="a02a94f25679275851a53e82eacbcfc73" name="a02a94f25679275851a53e82eacbcfc73"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a02a94f25679275851a53e82eacbcfc73">◆ </a></span>vmaCreateImage()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreateImage </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkImageCreateInfo * </td>
- <td class="paramname"><em>pImageCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkImage * </td>
- <td class="paramname"><em>pImage</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Function similar to <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>. </p>
-
-</div>
-</div>
-<a id="a5c8770ded7c59c8caac6de0c2cb00b50" name="a5c8770ded7c59c8caac6de0c2cb00b50"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5c8770ded7c59c8caac6de0c2cb00b50">◆ </a></span>vmaCreatePool()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreatePool </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_pool_create_info.html">VmaPoolCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> * </td>
- <td class="paramname"><em>pPool</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Allocates Vulkan device memory and creates <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Parameters of pool to create. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pPool</td><td>Handle to created pool. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ab585754076877265fdae33e5c40ef13b" name="ab585754076877265fdae33e5c40ef13b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab585754076877265fdae33e5c40ef13b">◆ </a></span>vmaCreateVirtualBlock()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaCreateVirtualBlock </td>
- <td>(</td>
- <td class="paramtype">const <a class="el" href="struct_vma_virtual_block_create_info.html">VmaVirtualBlockCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> * </td>
- <td class="paramname"><em>pVirtualBlock</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Creates new <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">pCreateInfo</td><td>Parameters for creation. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pVirtualBlock</td><td>Returned virtual block object or <code>VMA_NULL</code> if creation failed. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="a9f0f8f56db5f7f57fe4454f465142dac" name="a9f0f8f56db5f7f57fe4454f465142dac"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9f0f8f56db5f7f57fe4454f465142dac">◆ </a></span>vmaDefragment()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaDefragment </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocations</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t </td>
- <td class="paramname"><em>allocationCount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBool32 * </td>
- <td class="paramname"><em>pAllocationsChanged</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_defragmentation_info.html">VmaDefragmentationInfo</a> * </td>
- <td class="paramname"><em>pDefragmentationInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> * </td>
- <td class="paramname"><em>pDefragmentationStats</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deprecated. Compacts memory by moving allocations. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pAllocations</td><td>Array of allocations that can be moved during this compation. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">allocationCount</td><td>Number of elements in pAllocations and pAllocationsChanged arrays. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pAllocationsChanged</td><td>Array of boolean values that will indicate whether matching allocation in pAllocations array has been moved. This parameter is optional. Pass null if you don't need this information. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pDefragmentationInfo</td><td>Configuration parameters. Optional - pass null to use default values. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pDefragmentationStats</td><td>Statistics returned by the function. Optional - pass null if you don't need this information. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><code>VK_SUCCESS</code> if completed, negative error code in case of error.</dd></dl>
-<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>This is a part of the old interface. It is recommended to use structure <a class="el" href="struct_vma_defragmentation_info2.html" title="Parameters for defragmentation.">VmaDefragmentationInfo2</a> and function <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> instead.</dd></dl>
-<p >This function works by moving allocations to different places (different <code>VkDeviceMemory</code> objects and/or different offsets) in order to optimize memory usage. Only allocations that are in <code>pAllocations</code> array can be moved. All other allocations are considered nonmovable in this call. Basic rules:</p>
-<ul>
-<li>Only allocations made in memory types that have <code>VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT</code> and <code>VK_MEMORY_PROPERTY_HOST_COHERENT_BIT</code> flags can be compacted. You may pass other allocations but it makes no sense - these will never be moved.</li>
-<li>Custom pools created with <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a13c8a444197c67866be9cb05599fc726" title="Enables alternative, linear allocation algorithm in this pool.">VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT</a> or <a class="el" href="vk__mem__alloc_8h.html#a9a7c45f9c863695d98c83fa5ac940fe7a97a0dc38e5161b780594d998d313d35e" title="Enables alternative, buddy allocation algorithm in this pool.">VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT</a> flag are not defragmented. Allocations passed to this function that come from such pools are ignored.</li>
-<li>Allocations created with <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a3fc311d855c2ff53f1090ef5c722b38f" title="Set this flag if the allocation should have its own memory block.">VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT</a> or created as dedicated allocations for any other reason are also ignored.</li>
-<li>Both allocations made with or without <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag can be compacted. If not persistently mapped, memory will be mapped temporarily inside this function if needed.</li>
-<li>You must not pass same <a class="el" href="struct_vma_allocation.html" title="Represents single memory allocation.">VmaAllocation</a> object multiple times in <code>pAllocations</code> array.</li>
-</ul>
-<p >The function also frees empty <code>VkDeviceMemory</code> blocks.</p>
-<p >Warning: This function may be time-consuming, so you shouldn't call it too often (like after every resource creation/destruction). You can call it on special occasions (like when reloading a game level or when you just destroyed a lot of objects). Calling it every frame may be OK, but you should measure that on your platform.</p>
-<p >For more information, see <a class="el" href="defragmentation.html">Defragmentation</a> chapter. </p>
-
-</div>
-</div>
-<a id="a36ba776fd7fd5cb1e9359fdc0d8e6e8a" name="a36ba776fd7fd5cb1e9359fdc0d8e6e8a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a36ba776fd7fd5cb1e9359fdc0d8e6e8a">◆ </a></span>vmaDefragmentationBegin()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaDefragmentationBegin </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_defragmentation_info2.html">VmaDefragmentationInfo2</a> * </td>
- <td class="paramname"><em>pInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_stats.html">VmaDefragmentationStats</a> * </td>
- <td class="paramname"><em>pStats</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> * </td>
- <td class="paramname"><em>pContext</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Begins defragmentation process. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pInfo</td><td>Structure filled with parameters of defragmentation. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pStats</td><td>Optional. Statistics of defragmentation. You can pass null if you are not interested in this information. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pContext</td><td>Context object that must be passed to <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to finish defragmentation. </td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><code>VK_SUCCESS</code> and <code>*pContext == null</code> if defragmentation finished within this function call. <code>VK_NOT_READY</code> and <code>*pContext != null</code> if defragmentation has been started and you need to call <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a> to finish it. Negative value in case of error.</dd></dl>
-<p>Use this function instead of old, deprecated <a class="el" href="vk__mem__alloc_8h.html#a9f0f8f56db5f7f57fe4454f465142dac" title="Deprecated. Compacts memory by moving allocations.">vmaDefragment()</a>.</p>
-<p >Warning! Between the call to <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a> and <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>:</p>
-<ul>
-<li>You should not use any of allocations passed as <code>pInfo->pAllocations</code> or any allocations that belong to pools passed as <code>pInfo->pPools</code>, including calling <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a>, or access their data.</li>
-<li>Some mutexes protecting internal data structures may be locked, so trying to make or free any allocations, bind buffers or images, map memory, or launch another simultaneous defragmentation in between may cause stall (when done on another thread) or deadlock (when done on the same thread), unless you are 100% sure that defragmented allocations are in different pools.</li>
-<li>Information returned via <code>pStats</code> and <code>pInfo->pAllocationsChanged</code> are undefined. They become valid after call to <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</li>
-<li>If <code>pInfo->commandBuffer</code> is not null, you must submit that command buffer and make sure it finished execution before calling <a class="el" href="vk__mem__alloc_8h.html#a8774e20e91e245aae959ba63efa15dd2" title="Ends defragmentation process.">vmaDefragmentationEnd()</a>.</li>
-</ul>
-<p >For more information and important limitations regarding defragmentation, see documentation chapter: <a class="el" href="defragmentation.html">Defragmentation</a>. </p>
-
-</div>
-</div>
-<a id="a8774e20e91e245aae959ba63efa15dd2" name="a8774e20e91e245aae959ba63efa15dd2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8774e20e91e245aae959ba63efa15dd2">◆ </a></span>vmaDefragmentationEnd()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaDefragmentationEnd </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
- <td class="paramname"><em>context</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Ends defragmentation process. </p>
-<p >Use this function to finish defragmentation started by <a class="el" href="vk__mem__alloc_8h.html#a36ba776fd7fd5cb1e9359fdc0d8e6e8a" title="Begins defragmentation process.">vmaDefragmentationBegin()</a>. It is safe to pass <code>context == null</code>. The function then does nothing. </p>
-
-</div>
-</div>
-<a id="aa8d164061c88f22fb1fd3c8f3534bc1d" name="aa8d164061c88f22fb1fd3c8f3534bc1d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa8d164061c88f22fb1fd3c8f3534bc1d">◆ </a></span>vmaDestroyAllocator()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaDestroyAllocator </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destroys allocator object. </p>
-
-</div>
-</div>
-<a id="a0d9f4e4ba5bf9aab1f1c746387753d77" name="a0d9f4e4ba5bf9aab1f1c746387753d77"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0d9f4e4ba5bf9aab1f1c746387753d77">◆ </a></span>vmaDestroyBuffer()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaDestroyBuffer </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkBuffer </td>
- <td class="paramname"><em>buffer</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destroys Vulkan buffer and frees allocated memory. </p>
-<p >This is just a convenience function equivalent to:</p>
-<div class="fragment"><div class="line">vkDestroyBuffer(device, buffer, allocationCallbacks);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, allocation);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a5fea5518972ae9094b1526cbcb19b05f"><div class="ttname"><a href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a></div><div class="ttdeci">void vmaFreeMemory(VmaAllocator allocator, const VmaAllocation allocation)</div><div class="ttdoc">Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...</div></div>
-</div><!-- fragment --><p >It it safe to pass null as buffer and/or allocation. </p>
-
-</div>
-</div>
-<a id="ae50d2cb3b4a3bfd4dd40987234e50e7e" name="ae50d2cb3b4a3bfd4dd40987234e50e7e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae50d2cb3b4a3bfd4dd40987234e50e7e">◆ </a></span>vmaDestroyImage()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaDestroyImage </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkImage </td>
- <td class="paramname"><em>image</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destroys Vulkan image and frees allocated memory. </p>
-<p >This is just a convenience function equivalent to:</p>
-<div class="fragment"><div class="line">vkDestroyImage(device, image, allocationCallbacks);</div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f">vmaFreeMemory</a>(allocator, allocation);</div>
-</div><!-- fragment --><p >It it safe to pass null as image and/or allocation. </p>
-
-</div>
-</div>
-<a id="a5485779c8f1948238fc4e92232fa65e1" name="a5485779c8f1948238fc4e92232fa65e1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5485779c8f1948238fc4e92232fa65e1">◆ </a></span>vmaDestroyPool()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaDestroyPool </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
- <td class="paramname"><em>pool</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destroys <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object and frees Vulkan device memory. </p>
-
-</div>
-</div>
-<a id="a3795f7783ae2c182cede067d656f66a5" name="a3795f7783ae2c182cede067d656f66a5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3795f7783ae2c182cede067d656f66a5">◆ </a></span>vmaDestroyVirtualBlock()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaDestroyVirtualBlock </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Destroys <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> object. </p>
-<p >Please note that you should consciously handle virtual allocations that could remain unfreed in the block. You should either free them individually using <a class="el" href="vk__mem__alloc_8h.html#a13f01c44b3c1a06e695f1f5d24b80639" title="Frees virtual allocation inside given VmaVirtualBlock.">vmaVirtualFree()</a> or call <a class="el" href="vk__mem__alloc_8h.html#a5eda6f55919fb05bd2f56a112590c571" title="Frees all virtual allocations inside given VmaVirtualBlock.">vmaClearVirtualBlock()</a> if you are sure this is what you want. If you do neither, an assert is called.</p>
-<p >If you keep pointers to some additional metadata associated with your virtual allocations in their <code>pUserData</code>, don't forget to free them. </p>
-
-</div>
-</div>
-<a id="a1b9ffa538bed905af55c747cc48963bd" name="a1b9ffa538bed905af55c747cc48963bd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1b9ffa538bed905af55c747cc48963bd">◆ </a></span>vmaEndDefragmentationPass()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaEndDefragmentationPass </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_defragmentation_context.html">VmaDefragmentationContext</a> </td>
- <td class="paramname"><em>context</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="aef15a94b58fbcb0fe706d5720e84a74a" name="aef15a94b58fbcb0fe706d5720e84a74a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aef15a94b58fbcb0fe706d5720e84a74a">◆ </a></span>vmaFindMemoryTypeIndex()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaFindMemoryTypeIndex </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>memoryTypeBits</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t * </td>
- <td class="paramname"><em>pMemoryTypeIndex</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Helps to find memoryTypeIndex, given memoryTypeBits and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
-<p >This algorithm tries to find a memory type that:</p>
-<ul>
-<li>Is allowed by memoryTypeBits.</li>
-<li>Contains all the flags from pAllocationCreateInfo->requiredFlags.</li>
-<li>Matches intended usage.</li>
-<li>Has as many flags from pAllocationCreateInfo->preferredFlags as possible.</li>
-</ul>
-<dl class="section return"><dt>Returns</dt><dd>Returns VK_ERROR_FEATURE_NOT_PRESENT if not found. Receiving such result from this function or any other allocating function probably means that your device doesn't support any memory type with requested features for the specific type of resource you want to use it for. Please check parameters of your resource, like image layout (OPTIMAL versus LINEAR) or mip level count. </dd></dl>
-
-</div>
-</div>
-<a id="ae790ab9ffaf7667fb8f62523e6897888" name="ae790ab9ffaf7667fb8f62523e6897888"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae790ab9ffaf7667fb8f62523e6897888">◆ </a></span>vmaFindMemoryTypeIndexForBufferInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaFindMemoryTypeIndexForBufferInfo </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkBufferCreateInfo * </td>
- <td class="paramname"><em>pBufferCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t * </td>
- <td class="paramname"><em>pMemoryTypeIndex</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Helps to find memoryTypeIndex, given VkBufferCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
-<p >It can be useful e.g. to determine value to be used as <a class="el" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319" title="Vulkan memory type index to allocate this pool from.">VmaPoolCreateInfo::memoryTypeIndex</a>. It internally creates a temporary, dummy buffer that never has memory bound. It is just a convenience function, equivalent to calling:</p>
-<ul>
-<li><code>vkCreateBuffer</code></li>
-<li><code>vkGetBufferMemoryRequirements</code></li>
-<li><code>vmaFindMemoryTypeIndex</code></li>
-<li><code>vkDestroyBuffer</code> </li>
-</ul>
-
-</div>
-</div>
-<a id="a088da83d8eaf3ce9056d9ea0b981d472" name="a088da83d8eaf3ce9056d9ea0b981d472"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a088da83d8eaf3ce9056d9ea0b981d472">◆ </a></span>vmaFindMemoryTypeIndexForImageInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaFindMemoryTypeIndexForImageInfo </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkImageCreateInfo * </td>
- <td class="paramname"><em>pImageCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pAllocationCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t * </td>
- <td class="paramname"><em>pMemoryTypeIndex</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Helps to find memoryTypeIndex, given VkImageCreateInfo and <a class="el" href="struct_vma_allocation_create_info.html">VmaAllocationCreateInfo</a>. </p>
-<p >It can be useful e.g. to determine value to be used as <a class="el" href="struct_vma_pool_create_info.html#a596fa76b685d3f1f688f84a709a5b319" title="Vulkan memory type index to allocate this pool from.">VmaPoolCreateInfo::memoryTypeIndex</a>. It internally creates a temporary, dummy image that never has memory bound. It is just a convenience function, equivalent to calling:</p>
-<ul>
-<li><code>vkCreateImage</code></li>
-<li><code>vkGetImageMemoryRequirements</code></li>
-<li><code>vmaFindMemoryTypeIndex</code></li>
-<li><code>vkDestroyImage</code> </li>
-</ul>
-
-</div>
-</div>
-<a id="a30c37c1eec6025f397be41644f48490f" name="a30c37c1eec6025f397be41644f48490f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a30c37c1eec6025f397be41644f48490f">◆ </a></span>vmaFlushAllocation()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaFlushAllocation </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>offset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>size</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flushes memory of given allocation. </p>
-<p >Calls <code>vkFlushMappedMemoryRanges()</code> for memory associated with given range of given allocation. It needs to be called after writing to a mapped memory for memory types that are not <code>HOST_COHERENT</code>. Unmap operation doesn't do that automatically.</p>
-<ul>
-<li><code>offset</code> must be relative to the beginning of allocation.</li>
-<li><code>size</code> can be <code>VK_WHOLE_SIZE</code>. It means all memory from <code>offset</code> the the end of given allocation.</li>
-<li><code>offset</code> and <code>size</code> don't have to be aligned. They are internally rounded down/up to multiply of <code>nonCoherentAtomSize</code>.</li>
-<li>If <code>size</code> is 0, this call is ignored.</li>
-<li>If memory type that the <code>allocation</code> belongs to is not <code>HOST_VISIBLE</code> or it is <code>HOST_COHERENT</code>, this call is ignored.</li>
-</ul>
-<p >Warning! <code>offset</code> and <code>size</code> are relative to the contents of given <code>allocation</code>. If you mean whole allocation, you can pass 0 and <code>VK_WHOLE_SIZE</code>, respectively. Do not pass allocation's offset as <code>offset</code>!!!</p>
-<p >This function returns the <code>VkResult</code> from <code>vkFlushMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
-
-</div>
-</div>
-<a id="ac3dd00da721875ed99fa8a881922bdfc" name="ac3dd00da721875ed99fa8a881922bdfc"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac3dd00da721875ed99fa8a881922bdfc">◆ </a></span>vmaFlushAllocations()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaFlushAllocations </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>allocationCount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>allocations</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkDeviceSize * </td>
- <td class="paramname"><em>offsets</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkDeviceSize * </td>
- <td class="paramname"><em>sizes</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Flushes memory of given set of allocations. </p>
-<p >Calls <code>vkFlushMappedMemoryRanges()</code> for memory associated with given ranges of given allocations. For more information, see documentation of <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramname">allocationCount</td><td></td></tr>
- <tr><td class="paramname">allocations</td><td></td></tr>
- <tr><td class="paramname">offsets</td><td>If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. </td></tr>
- <tr><td class="paramname">sizes</td><td>If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means <code>VK_WHOLE_SIZE</code> for all allocations.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function returns the <code>VkResult</code> from <code>vkFlushMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
-
-</div>
-</div>
-<a id="a5fea5518972ae9094b1526cbcb19b05f" name="a5fea5518972ae9094b1526cbcb19b05f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5fea5518972ae9094b1526cbcb19b05f">◆ </a></span>vmaFreeMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaFreeMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees memory previously allocated using <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#a7fdf64415b6c3d83c454f28d2c53df7b">vmaAllocateMemoryForBuffer()</a>, or <a class="el" href="vk__mem__alloc_8h.html#a0faa3f9e5fb233d29d1e00390650febb" title="Function similar to vmaAllocateMemoryForBuffer().">vmaAllocateMemoryForImage()</a>. </p>
-<p >Passing <code>VK_NULL_HANDLE</code> as <code>allocation</code> is valid. Such function call is just skipped. </p>
-
-</div>
-</div>
-<a id="a834b1e4aef395c0a1d56a28e69a4a17e" name="a834b1e4aef395c0a1d56a28e69a4a17e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a834b1e4aef395c0a1d56a28e69a4a17e">◆ </a></span>vmaFreeMemoryPages()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaFreeMemoryPages </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t </td>
- <td class="paramname"><em>allocationCount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>pAllocations</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees memory and destroys multiple allocations. </p>
-<p >Word "pages" is just a suggestion to use this function to free pieces of memory used for sparse binding. It is just a general purpose function to free memory and destroy allocations made using e.g. <a class="el" href="vk__mem__alloc_8h.html#abf28077dbf82d0908b8acbe8ee8dd9b8" title="General purpose memory allocation.">vmaAllocateMemory()</a>, <a class="el" href="vk__mem__alloc_8h.html#ad37e82e492b3de38fc3f4cffd9ad0ae1" title="General purpose memory allocation for multiple allocation objects at once.">vmaAllocateMemoryPages()</a> and other functions. It may be internally optimized to be more efficient than calling <a class="el" href="vk__mem__alloc_8h.html#a5fea5518972ae9094b1526cbcb19b05f" title="Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(),...">vmaFreeMemory()</a> <code>allocationCount</code> times.</p>
-<p >Allocations in <code>pAllocations</code> array can come from any memory pools and types. Passing <code>VK_NULL_HANDLE</code> as elements of <code>pAllocations</code> array is valid. Such entries are just skipped. </p>
-
-</div>
-</div>
-<a id="a3104eb30d8122c84dd8541063f145288" name="a3104eb30d8122c84dd8541063f145288"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3104eb30d8122c84dd8541063f145288">◆ </a></span>vmaFreeStatsString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaFreeStatsString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char * </td>
- <td class="paramname"><em>pStatsString</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-</div>
-</div>
-<a id="a47fb8d8aa69df4a7c23a9719b4080623" name="a47fb8d8aa69df4a7c23a9719b4080623"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a47fb8d8aa69df4a7c23a9719b4080623">◆ </a></span>vmaFreeVirtualBlockStatsString()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaFreeVirtualBlockStatsString </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">char * </td>
- <td class="paramname"><em>pStatsString</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees a string returned by <a class="el" href="vk__mem__alloc_8h.html#a52d810e1222c592e5d80556ad005f1e6" title="Builds and returns a null-terminated string in JSON format with information about given VmaVirtualBlo...">vmaBuildVirtualBlockStatsString()</a>. </p>
-
-</div>
-</div>
-<a id="a86dd08aba8633bfa4ad0df2e76481d8b" name="a86dd08aba8633bfa4ad0df2e76481d8b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a86dd08aba8633bfa4ad0df2e76481d8b">◆ </a></span>vmaGetAllocationInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetAllocationInfo </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation_info.html">VmaAllocationInfo</a> * </td>
- <td class="paramname"><em>pAllocationInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns current information about specified allocation. </p>
-<p >Current paramteres of given allocation are returned in <code>pAllocationInfo</code>.</p>
-<p >Although this function doesn't lock any mutex, so it should be quite efficient, you should avoid calling it too often. You can retrieve same <a class="el" href="struct_vma_allocation_info.html" title="Parameters of VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().">VmaAllocationInfo</a> structure while creating your resource, from function <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a>, <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>. You can remember it if you are sure parameters don't change (e.g. due to defragmentation). </p>
-
-</div>
-</div>
-<a id="a571e87dd38e552249b56b1b0b982fad1" name="a571e87dd38e552249b56b1b0b982fad1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a571e87dd38e552249b56b1b0b982fad1">◆ </a></span>vmaGetAllocationMemoryProperties()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetAllocationMemoryProperties </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkMemoryPropertyFlags * </td>
- <td class="paramname"><em>pFlags</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Given an allocation, returns Property Flags of its memory type. </p>
-<p >This is just a convenience function. Same information can be obtained using <a class="el" href="vk__mem__alloc_8h.html#a86dd08aba8633bfa4ad0df2e76481d8b" title="Returns current information about specified allocation.">vmaGetAllocationInfo()</a> + <a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>. </p>
-
-</div>
-</div>
-<a id="afa02231a791b37255720d566a52683e7" name="afa02231a791b37255720d566a52683e7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#afa02231a791b37255720d566a52683e7">◆ </a></span>vmaGetAllocatorInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetAllocatorInfo </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator_info.html">VmaAllocatorInfo</a> * </td>
- <td class="paramname"><em>pAllocatorInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns information about existing <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> object - handle to Vulkan device etc. </p>
-<p >It might be useful if you want to keep just the <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> handle and fetch other required handles to <code>VkPhysicalDevice</code>, <code>VkDevice</code> etc. every time using this function. </p>
-
-</div>
-</div>
-<a id="a9f88db9d46a432c0ad7278cecbc5eaa7" name="a9f88db9d46a432c0ad7278cecbc5eaa7"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9f88db9d46a432c0ad7278cecbc5eaa7">◆ </a></span>vmaGetHeapBudgets()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetHeapBudgets </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_budget.html">VmaBudget</a> * </td>
- <td class="paramname"><em>pBudgets</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieves information about current memory budget for all memory heaps. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pBudgets</td><td>Must point to array with number of elements at least equal to number of memory heaps in physical device used.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function is called "get" not "calculate" because it is very fast, suitable to be called every frame or every allocation. For more detailed statistics use <a class="el" href="vk__mem__alloc_8h.html#a333b61c1788cb23559177531e6a93ca3" title="Retrieves statistics from current state of the Allocator.">vmaCalculateStats()</a>.</p>
-<p >Note that when using allocator from multiple threads, returned information may immediately become outdated. </p>
-
-</div>
-</div>
-<a id="ab88db292a17974f911182543fda52d19" name="ab88db292a17974f911182543fda52d19"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab88db292a17974f911182543fda52d19">◆ </a></span>vmaGetMemoryProperties()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetMemoryProperties </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkPhysicalDeviceMemoryProperties ** </td>
- <td class="paramname"><em>ppPhysicalDeviceMemoryProperties</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<p >PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own. </p>
-
-</div>
-</div>
-<a id="a8701444752eb5de4464adb5a2b514bca" name="a8701444752eb5de4464adb5a2b514bca"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8701444752eb5de4464adb5a2b514bca">◆ </a></span>vmaGetMemoryTypeProperties()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetMemoryTypeProperties </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>memoryTypeIndex</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkMemoryPropertyFlags * </td>
- <td class="paramname"><em>pFlags</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Given Memory Type Index, returns Property Flags of this memory type. </p>
-<p >This is just a convenience function. Same information can be obtained using <a class="el" href="vk__mem__alloc_8h.html#ab88db292a17974f911182543fda52d19">vmaGetMemoryProperties()</a>. </p>
-
-</div>
-</div>
-<a id="aecabf7b6e91ea87d0316fa0a9e014fe0" name="aecabf7b6e91ea87d0316fa0a9e014fe0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aecabf7b6e91ea87d0316fa0a9e014fe0">◆ </a></span>vmaGetPhysicalDeviceProperties()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetPhysicalDeviceProperties </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkPhysicalDeviceProperties ** </td>
- <td class="paramname"><em>ppPhysicalDeviceProperties</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<p >PhysicalDeviceProperties are fetched from physicalDevice by the allocator. You can access it here, without fetching it again on your own. </p>
-
-</div>
-</div>
-<a id="af09b4e4eafdbee812e8d73ddf960f030" name="af09b4e4eafdbee812e8d73ddf960f030"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af09b4e4eafdbee812e8d73ddf960f030">◆ </a></span>vmaGetPoolName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetPoolName </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
- <td class="paramname"><em>pool</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char ** </td>
- <td class="paramname"><em>ppName</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieves name of a custom pool. </p>
-<p >After the call <code>ppName</code> is either null or points to an internally-owned null-terminated string containing name of the pool that was previously set. The pointer becomes invalid when the pool is destroyed or its name is changed using <a class="el" href="vk__mem__alloc_8h.html#adbae3a0b4ab078024462fc85c37f3b58" title="Sets name of a custom pool.">vmaSetPoolName()</a>. </p>
-
-</div>
-</div>
-<a id="ae8bf76997b234ef68aad922616df4153" name="ae8bf76997b234ef68aad922616df4153"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae8bf76997b234ef68aad922616df4153">◆ </a></span>vmaGetPoolStats()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetPoolStats </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
- <td class="paramname"><em>pool</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool_stats.html">VmaPoolStats</a> * </td>
- <td class="paramname"><em>pPoolStats</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Retrieves statistics of existing <a class="el" href="struct_vma_pool.html" title="Represents custom memory pool.">VmaPool</a> object. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir"></td><td class="paramname">allocator</td><td>Allocator object. </td></tr>
- <tr><td class="paramdir"></td><td class="paramname">pool</td><td>Pool object. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pPoolStats</td><td>Statistics of specified pool. </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a id="ab5fcb961ffea69023e7e0ea100bdad8e" name="ab5fcb961ffea69023e7e0ea100bdad8e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab5fcb961ffea69023e7e0ea100bdad8e">◆ </a></span>vmaGetVirtualAllocationInfo()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaGetVirtualAllocationInfo </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>offset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_allocation_info.html">VmaVirtualAllocationInfo</a> * </td>
- <td class="paramname"><em>pVirtualAllocInfo</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns information about a specific virtual allocation within a virtual block, like its size and <code>pUserData</code> pointer. </p>
-
-</div>
-</div>
-<a id="aaa8412919139ef413a4215ac6a290fae" name="aaa8412919139ef413a4215ac6a290fae"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaa8412919139ef413a4215ac6a290fae">◆ </a></span>vmaInvalidateAllocation()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaInvalidateAllocation </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>offset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>size</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Invalidates memory of given allocation. </p>
-<p >Calls <code>vkInvalidateMappedMemoryRanges()</code> for memory associated with given range of given allocation. It needs to be called before reading from a mapped memory for memory types that are not <code>HOST_COHERENT</code>. Map operation doesn't do that automatically.</p>
-<ul>
-<li><code>offset</code> must be relative to the beginning of allocation.</li>
-<li><code>size</code> can be <code>VK_WHOLE_SIZE</code>. It means all memory from <code>offset</code> the the end of given allocation.</li>
-<li><code>offset</code> and <code>size</code> don't have to be aligned. They are internally rounded down/up to multiply of <code>nonCoherentAtomSize</code>.</li>
-<li>If <code>size</code> is 0, this call is ignored.</li>
-<li>If memory type that the <code>allocation</code> belongs to is not <code>HOST_VISIBLE</code> or it is <code>HOST_COHERENT</code>, this call is ignored.</li>
-</ul>
-<p >Warning! <code>offset</code> and <code>size</code> are relative to the contents of given <code>allocation</code>. If you mean whole allocation, you can pass 0 and <code>VK_WHOLE_SIZE</code>, respectively. Do not pass allocation's offset as <code>offset</code>!!!</p>
-<p >This function returns the <code>VkResult</code> from <code>vkInvalidateMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
-
-</div>
-</div>
-<a id="ab25b558d75f7378ec944a1522fdcc3c5" name="ab25b558d75f7378ec944a1522fdcc3c5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab25b558d75f7378ec944a1522fdcc3c5">◆ </a></span>vmaInvalidateAllocations()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaInvalidateAllocations </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>allocationCount</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_allocation.html">VmaAllocation</a> * </td>
- <td class="paramname"><em>allocations</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkDeviceSize * </td>
- <td class="paramname"><em>offsets</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const VkDeviceSize * </td>
- <td class="paramname"><em>sizes</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Invalidates memory of given set of allocations. </p>
-<p >Calls <code>vkInvalidateMappedMemoryRanges()</code> for memory associated with given ranges of given allocations. For more information, see documentation of <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a>.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramname">allocator</td><td></td></tr>
- <tr><td class="paramname">allocationCount</td><td></td></tr>
- <tr><td class="paramname">allocations</td><td></td></tr>
- <tr><td class="paramname">offsets</td><td>If not null, it must point to an array of offsets of regions to flush, relative to the beginning of respective allocations. Null means all ofsets are zero. </td></tr>
- <tr><td class="paramname">sizes</td><td>If not null, it must point to an array of sizes of regions to flush in respective allocations. Null means <code>VK_WHOLE_SIZE</code> for all allocations.</td></tr>
- </table>
- </dd>
-</dl>
-<p>This function returns the <code>VkResult</code> from <code>vkInvalidateMappedMemoryRanges</code> if it is called, otherwise <code>VK_SUCCESS</code>. </p>
-
-</div>
-</div>
-<a id="acd53b5b1d23f8fcbad692ccfdc1811f1" name="acd53b5b1d23f8fcbad692ccfdc1811f1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acd53b5b1d23f8fcbad692ccfdc1811f1">◆ </a></span>vmaIsVirtualBlockEmpty()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkBool32 vmaIsVirtualBlockEmpty </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Returns true of the <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a> is empty - contains 0 virtual allocations and has all its space available for new allocations. </p>
-
-</div>
-</div>
-<a id="ad5bd1243512d099706de88168992f069" name="ad5bd1243512d099706de88168992f069"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad5bd1243512d099706de88168992f069">◆ </a></span>vmaMapMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaMapMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void ** </td>
- <td class="paramname"><em>ppData</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Maps memory represented by given allocation and returns pointer to it. </p>
-<p >Maps memory represented by given allocation to make it accessible to CPU code. When succeeded, <code>*ppData</code> contains pointer to first byte of this memory.</p>
-<dl class="section warning"><dt>Warning</dt><dd>If the allocation is part of a bigger <code>VkDeviceMemory</code> block, returned pointer is correctly offsetted to the beginning of region assigned to this particular allocation. Unlike the result of <code>vkMapMemory</code>, it points to the allocation, not to the beginning of the whole block. You should not add <a class="el" href="struct_vma_allocation_info.html#a4a3c732388dbdc7a23f9365b00825268" title="Offset in VkDeviceMemory object to the beginning of this allocation, in bytes. (deviceMemory,...">VmaAllocationInfo::offset</a> to it!</dd></dl>
-<p>Mapping is internally reference-counted and synchronized, so despite raw Vulkan function <code>vkMapMemory()</code> cannot be used to map same block of <code>VkDeviceMemory</code> multiple times simultaneously, it is safe to call this function on allocations assigned to the same memory block. Actual Vulkan memory will be mapped on first mapping and unmapped on last unmapping.</p>
-<p >If the function succeeded, you must call <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> to unmap the allocation when mapping is no longer needed or before freeing the allocation, at the latest.</p>
-<p >It also safe to call this function multiple times on the same allocation. You must call <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> same number of times as you called <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>.</p>
-<p >It is also safe to call this function on allocation created with <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag. Its memory stays mapped all the time. You must still call <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> same number of times as you called <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. You must not call <a class="el" href="vk__mem__alloc_8h.html#a9bc268595cb33f6ec4d519cfce81ff45" title="Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().">vmaUnmapMemory()</a> additional time to free the "0-th" mapping made automatically due to <a class="el" href="vk__mem__alloc_8h.html#ad9889c10c798b040d59c92f257cae597a11da372cc3a82931c5e5d6146cd9dd1f" title="Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.">VMA_ALLOCATION_CREATE_MAPPED_BIT</a> flag.</p>
-<p >This function fails when used on allocation made in memory type that is not <code>HOST_VISIBLE</code>.</p>
-<p >This function doesn't automatically flush or invalidate caches. If the allocation is made from a memory types that is not <code>HOST_COHERENT</code>, you also need to use <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a> / <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, as required by Vulkan specification. </p>
-
-</div>
-</div>
-<a id="af9147d31ffc11d62fc187bde283ed14f" name="af9147d31ffc11d62fc187bde283ed14f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af9147d31ffc11d62fc187bde283ed14f">◆ </a></span>vmaSetAllocationUserData()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaSetAllocationUserData </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void * </td>
- <td class="paramname"><em>pUserData</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Sets pUserData in given allocation to new value. </p>
-<p >If the allocation was created with VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT, pUserData must be either null, or pointer to a null-terminated string. The function makes local copy of the string and sets it as allocation's <code>pUserData</code>. String passed as pUserData doesn't need to be valid for whole lifetime of the allocation - you can free it after this call. String previously pointed by allocation's pUserData is freed from memory.</p>
-<p >If the flag was not used, the value of pointer <code>pUserData</code> is just copied to allocation's <code>pUserData</code>. It is opaque, so you can use it however you want - e.g. as a pointer, ordinal number or some handle to you own data. </p>
-
-</div>
-</div>
-<a id="ade56bf8dc9f5a5eaddf5f119ed525236" name="ade56bf8dc9f5a5eaddf5f119ed525236"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ade56bf8dc9f5a5eaddf5f119ed525236">◆ </a></span>vmaSetCurrentFrameIndex()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaSetCurrentFrameIndex </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">uint32_t </td>
- <td class="paramname"><em>frameIndex</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Sets index of the current frame. </p>
-
-</div>
-</div>
-<a id="adbae3a0b4ab078024462fc85c37f3b58" name="adbae3a0b4ab078024462fc85c37f3b58"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#adbae3a0b4ab078024462fc85c37f3b58">◆ </a></span>vmaSetPoolName()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaSetPoolName </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_pool.html">VmaPool</a> </td>
- <td class="paramname"><em>pool</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const char * </td>
- <td class="paramname"><em>pName</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Sets name of a custom pool. </p>
-<p ><code>pName</code> can be either null or pointer to a null-terminated string with new name for the pool. Function makes internal copy of the string, so it can be changed or freed immediately after this call. </p>
-
-</div>
-</div>
-<a id="a4b96f835d38686df937e097a0c7db5e9" name="a4b96f835d38686df937e097a0c7db5e9"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4b96f835d38686df937e097a0c7db5e9">◆ </a></span>vmaSetVirtualAllocationUserData()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaSetVirtualAllocationUserData </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>offset</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void * </td>
- <td class="paramname"><em>pUserData</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Changes custom pointer associated with given virtual allocation. </p>
-
-</div>
-</div>
-<a id="a9bc268595cb33f6ec4d519cfce81ff45" name="a9bc268595cb33f6ec4d519cfce81ff45"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9bc268595cb33f6ec4d519cfce81ff45">◆ </a></span>vmaUnmapMemory()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaUnmapMemory </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_allocator.html">VmaAllocator</a> </td>
- <td class="paramname"><em>allocator</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_vma_allocation.html">VmaAllocation</a> </td>
- <td class="paramname"><em>allocation</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Unmaps memory represented by given allocation, mapped previously using <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>. </p>
-<p >For details, see description of <a class="el" href="vk__mem__alloc_8h.html#ad5bd1243512d099706de88168992f069" title="Maps memory represented by given allocation and returns pointer to it.">vmaMapMemory()</a>.</p>
-<p >This function doesn't automatically flush or invalidate caches. If the allocation is made from a memory types that is not <code>HOST_COHERENT</code>, you also need to use <a class="el" href="vk__mem__alloc_8h.html#aaa8412919139ef413a4215ac6a290fae" title="Invalidates memory of given allocation.">vmaInvalidateAllocation()</a> / <a class="el" href="vk__mem__alloc_8h.html#a30c37c1eec6025f397be41644f48490f" title="Flushes memory of given allocation.">vmaFlushAllocation()</a>, as required by Vulkan specification. </p>
-
-</div>
-</div>
-<a id="a1c15925e6745dacee0cfc877fffecec2" name="a1c15925e6745dacee0cfc877fffecec2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1c15925e6745dacee0cfc877fffecec2">◆ </a></span>vmaVirtualAllocate()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">VkResult vmaVirtualAllocate </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">const <a class="el" href="struct_vma_virtual_allocation_create_info.html">VmaVirtualAllocationCreateInfo</a> * </td>
- <td class="paramname"><em>pCreateInfo</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize * </td>
- <td class="paramname"><em>pOffset</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Allocates new virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
-<p >There is no handle type for a virtual allocation. Virtual allocations within a specific virtual block are uniquely identified by their offsets.</p>
-<p >If the allocation fails due to not enough free space available, <code>VK_ERROR_OUT_OF_DEVICE_MEMORY</code> is returned (despite the function doesn't ever allocate actual GPU memory). </p>
-
-</div>
-</div>
-<a id="a13f01c44b3c1a06e695f1f5d24b80639" name="a13f01c44b3c1a06e695f1f5d24b80639"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a13f01c44b3c1a06e695f1f5d24b80639">◆ </a></span>vmaVirtualFree()</h2>
-
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void vmaVirtualFree </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_vma_virtual_block.html">VmaVirtualBlock</a> </td>
- <td class="paramname"><em>virtualBlock</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">VkDeviceSize </td>
- <td class="paramname"><em>offset</em> </td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees virtual allocation inside given <a class="el" href="struct_vma_virtual_block.html" title="Handle to a virtual block object that allows to use core allocation algorithm without allocating any ...">VmaVirtualBlock</a>. </p>
-
-</div>
-</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
diff --git a/docs/html/vk_amd_device_coherent_memory.html b/docs/html/vk_amd_device_coherent_memory.html
index ac8f0a7..64105dd 100644
--- a/docs/html/vk_amd_device_coherent_memory.html
+++ b/docs/html/vk_amd_device_coherent_memory.html
@@ -78,7 +78,7 @@
<p >2) Call <code>vkGetPhysicalDeviceFeatures2</code> for the physical device instead of old <code>vkGetPhysicalDeviceFeatures</code>. Attach additional structure <code>VkPhysicalDeviceCoherentMemoryFeaturesAMD</code> to <code>VkPhysicalDeviceFeatures2::pNext</code> to be returned. Check if the device feature is really supported - check if <code>VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory</code> is true.</p>
<p >3) While creating device with <code>vkCreateDevice</code>, enable this extension - add "VK_AMD_device_coherent_memory" to the list passed as <code>VkDeviceCreateInfo::ppEnabledExtensionNames</code>.</p>
<p >4) While creating the device, also don't set <code>VkDeviceCreateInfo::pEnabledFeatures</code>. Fill in <code>VkPhysicalDeviceFeatures2</code> structure instead and pass it as <code>VkDeviceCreateInfo::pNext</code>. Enable this device feature - attach additional structure <code>VkPhysicalDeviceCoherentMemoryFeaturesAMD</code> to <code>VkPhysicalDeviceFeatures2::pNext</code> and set its member <code>deviceCoherentMemory</code> to <code>VK_TRUE</code>.</p>
-<p >5) While creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> with <a class="el" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" title="Creates Allocator object.">vmaCreateAllocator()</a> inform VMA that you have enabled this extension and feature - add <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> to <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a>.</p>
+<p >5) While creating <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a> with <a class="el" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb" title="Creates VmaAllocator object.">vmaCreateAllocator()</a> inform VMA that you have enabled this extension and feature - add <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7ca2acce4886d8078552efa38878413970f">VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT</a> to <a class="el" href="struct_vma_allocator_create_info.html#a392ea2ecbaff93f91a7c49f735ad4346" title="Flags for created allocator. Use VmaAllocatorCreateFlagBits enum.">VmaAllocatorCreateInfo::flags</a>.</p>
<h1><a class="anchor" id="vk_amd_device_coherent_memory_usage"></a>
Usage</h1>
<p >After following steps described above, you can create VMA allocations and custom pools out of the special <code>DEVICE_COHERENT</code> and <code>DEVICE_UNCACHED</code> memory types on eligible devices. There are multiple ways to do it, for example:</p>
diff --git a/docs/html/vk_khr_dedicated_allocation.html b/docs/html/vk_khr_dedicated_allocation.html
index 83a04e9..68fea64 100644
--- a/docs/html/vk_khr_dedicated_allocation.html
+++ b/docs/html/vk_khr_dedicated_allocation.html
@@ -77,13 +77,13 @@
<li>VK_KHR_dedicated_allocation</li>
</ul>
<p >If you enabled these extensions:</p>
-<p >2 . Use <a class="el" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" title="Enables usage of VK_KHR_dedicated_allocation extension.">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> flag when creating your <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>`to inform the library that you enabled required extensions and you want the library to use them.</p>
-<div class="fragment"><div class="line">allocatorInfo.flags |= <a class="code hl_enumvalue" href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>;</div>
+<p >2 . Use <a class="el" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878" title="Enables usage of VK_KHR_dedicated_allocation extension.">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a> flag when creating your <a class="el" href="struct_vma_allocator.html" title="Represents main object of this library initialized.">VmaAllocator</a>`to inform the library that you enabled required extensions and you want the library to use them.</p>
+<div class="fragment"><div class="line">allocatorInfo.flags |= <a class="code hl_enumvalue" href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a>;</div>
<div class="line"> </div>
-<div class="line"><a class="code hl_function" href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&allocatorInfo, &allocator);</div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates Allocator object.</div></div>
-<div class="ttc" id="avk__mem__alloc_8h_html_a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="vk__mem__alloc_8h.html#a4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:326</div></div>
-</div><!-- fragment --><p >That is all. The extension will be automatically used whenever you create a buffer using <a class="el" href="vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> or image using <a class="el" href="vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>.</p>
+<div class="line"><a class="code hl_function" href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a>(&allocatorInfo, &allocator);</div>
+<div class="ttc" id="agroup__group__init_html_ga200692051ddb34240248234f5f4c17bb"><div class="ttname"><a href="group__group__init.html#ga200692051ddb34240248234f5f4c17bb">vmaCreateAllocator</a></div><div class="ttdeci">VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)</div><div class="ttdoc">Creates VmaAllocator object.</div></div>
+<div class="ttc" id="agroup__group__init_html_gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878"><div class="ttname"><a href="group__group__init.html#gga4f87c9100d154a65a4ad495f7763cf7cace7da7cc6e71a625dfa763c55a597878">VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</a></div><div class="ttdeci">@ VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT</div><div class="ttdoc">Enables usage of VK_KHR_dedicated_allocation extension.</div><div class="ttdef"><b>Definition:</b> vk_mem_alloc.h:350</div></div>
+</div><!-- fragment --><p >That is all. The extension will be automatically used whenever you create a buffer using <a class="el" href="group__group__alloc.html#gac72ee55598617e8eecca384e746bab51">vmaCreateBuffer()</a> or image using <a class="el" href="group__group__alloc.html#ga02a94f25679275851a53e82eacbcfc73" title="Function similar to vmaCreateBuffer().">vmaCreateImage()</a>.</p>
<p >When using the extension together with Vulkan Validation Layer, you will receive warnings like this: </p><pre class="fragment">vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer.
</pre><p> It is OK, you should just ignore it. It happens because you use function <code>vkGetBufferMemoryRequirements2KHR()</code> instead of standard <code>vkGetBufferMemoryRequirements()</code>, while the validation layer seems to be unaware of it.</p>
<p >To learn more about this extension, see:</p>
diff --git a/include/vk_mem_alloc.h b/include/vk_mem_alloc.h
index ac1701a..3d6e42d 100644
--- a/include/vk_mem_alloc.h
+++ b/include/vk_mem_alloc.h
@@ -30,7 +30,7 @@
Copyright (c) 2017-2021 Advanced Micro Devices, Inc. All rights reserved. \n
License: MIT
-Documentation of all members: vk_mem_alloc.h
+<b>API documentation divided into groups:</b> [Modules](modules.html)
\section main_table_of_contents Table of contents
@@ -101,8 +101,27 @@
- [Product page on GPUOpen](https://gpuopen.com/gaming-product/vulkan-memory-allocator/)
- [Source repository on GitHub](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
+
+\defgroup group_init Library initialization
+
+\brief API elements related to the initialization and management of the entire library, especially #VmaAllocator object.
+
+\defgroup group_alloc Memory allocation
+
+\brief API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images.
+Most basic ones being: vmaCreateBuffer(), vmaCreateImage().
+
+\defgroup group_virtual Virtual allocator
+
+\brief API elements related to the mechanism of \ref virtual_allocator - using the core allocation algorithm
+for user-defined purpose without allocating any real GPU memory.
+
+\defgroup group_stats Statistics
+
+\brief API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format.
*/
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -291,6 +310,11 @@
// Sections for managing code placement in file, only for development purposes e.g. for convenient folding inside an IDE.
#ifndef _VMA_ENUM_DECLARATIONS
+/**
+\addtogroup group_init
+@{
+*/
+
/// Flags for created #VmaAllocator.
typedef enum VmaAllocatorCreateFlagBits
{
@@ -409,6 +433,14 @@
} VmaAllocatorCreateFlagBits;
typedef VkFlags VmaAllocatorCreateFlags;
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
+/// \brief Intended usage of the allocated memory.
typedef enum VmaMemoryUsage
{
/** No intended memory usage specified.
@@ -622,11 +654,24 @@
*/
VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT = 0x00000008,
+ /** \brief Enables alternative, Two-Level Segregated Fit (TLSF) allocation algorithm in this pool.
+
+ This algorithm is based on 2-level lists dividing address space into smaller
+ chunks. The first level is aligned to power of two which serves as buckets for requested
+ memory to fall into, and the second level is lineary subdivided into lists of free memory.
+ This algorithm aims to achieve bounded response time even in the worst case scenario.
+ Allocation time can be sometimes slightly longer than compared to other algorithms
+ but in return the application can avoid stalls in case of fragmentation, giving
+ predictable results, suitable for real-time use cases.
+ */
+ VMA_POOL_CREATE_TLSF_ALGORITHM_BIT = 0x00000010,
+
/** Bit mask to extract only `ALGORITHM` bits from entire set of flags.
*/
VMA_POOL_CREATE_ALGORITHM_MASK =
VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT |
- VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT,
+ VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT |
+ VMA_POOL_CREATE_TLSF_ALGORITHM_BIT,
VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaPoolCreateFlagBits;
@@ -641,6 +686,13 @@
} VmaDefragmentationFlagBits;
typedef VkFlags VmaDefragmentationFlags;
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
/// Flags to be passed as VmaVirtualBlockCreateInfo::flags.
typedef enum VmaVirtualBlockCreateFlagBits
{
@@ -667,11 +719,24 @@
*/
VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT = 0x00000002,
+ /** \brief Enables alternative, TLSF allocation algorithm in virtual block.
+
+ This algorithm is based on 2-level lists dividing address space into smaller
+ chunks. The first level is aligned to power of two which serves as buckets for requested
+ memory to fall into, and the second level is lineary subdivided into lists of free memory.
+ This algorithm aims to achieve bounded response time even in the worst case scenario.
+ Allocation time can be sometimes slightly longer than compared to other algorithms
+ but in return the application can avoid stalls in case of fragmentation, giving
+ predictable results, suitable for real-time use cases.
+ */
+ VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT = 0x00000004,
+
/** \brief Bit mask to extract only `ALGORITHM` bits from entire set of flags.
*/
VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK =
VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT |
- VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT,
+ VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT |
+ VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT,
VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VmaVirtualBlockCreateFlagBits;
@@ -706,10 +771,16 @@
/// Flags to be passed as VmaVirtualAllocationCreateInfo::flags. See #VmaVirtualAllocationCreateFlagBits.
typedef VkFlags VmaVirtualAllocationCreateFlags;
+/** @} */
+
#endif // _VMA_ENUM_DECLARATIONS
#ifndef _VMA_DATA_TYPES_DECLARATIONS
+/**
+\addtogroup group_init
+@{ */
+
/** \struct VmaAllocator
\brief Represents main object of this library initialized.
@@ -721,6 +792,13 @@
*/
VK_DEFINE_HANDLE(VmaAllocator)
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
/** \struct VmaPool
\brief Represents custom memory pool
@@ -762,6 +840,27 @@
*/
VK_DEFINE_HANDLE(VmaDefragmentationContext)
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/** \struct VmaVirtualAllocation
+\brief Represents single memory allocation done inside VmaVirtualBlock.
+
+Use it as a unique identifier to virtual allocation within the single block.
+*/
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaVirtualAllocation);
+
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
/** \struct VmaVirtualBlock
\brief Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory.
@@ -772,6 +871,13 @@
*/
VK_DEFINE_HANDLE(VmaVirtualBlock)
+/** @} */
+
+/**
+\addtogroup group_init
+@{
+*/
+
/// Callback function called after successful vkAllocateMemory.
typedef void (VKAPI_PTR* PFN_vmaAllocateDeviceMemoryFunction)(
VmaAllocator VMA_NOT_NULL allocator,
@@ -948,6 +1054,13 @@
VkDevice VMA_NOT_NULL device;
} VmaAllocatorInfo;
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/// Calculated statistics of memory usage in entire allocator.
typedef struct VmaStatInfo
{
@@ -1010,6 +1123,13 @@
VkDeviceSize budget;
} VmaBudget;
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
typedef struct VmaAllocationCreateInfo
{
/// Use #VmaAllocationCreateFlagBits enum.
@@ -1117,6 +1237,13 @@
void* VMA_NULLABLE pMemoryAllocateNext;
} VmaPoolCreateInfo;
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/// Describes parameter of existing #VmaPool.
typedef struct VmaPoolStats
{
@@ -1137,6 +1264,13 @@
size_t blockCount;
} VmaPoolStats;
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
/// Parameters of #VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().
typedef struct VmaAllocationInfo
{
@@ -1313,6 +1447,13 @@
uint32_t deviceMemoryBlocksFreed;
} VmaDefragmentationStats;
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
/// Parameters of created #VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().
typedef struct VmaVirtualBlockCreateInfo
{
@@ -1360,6 +1501,11 @@
/// Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().
typedef struct VmaVirtualAllocationInfo
{
+ /** \brief Offset of the allocation.
+
+ Offset at which the allocation was made.
+ */
+ VkDeviceSize offset;
/** \brief Size of the allocation.
Same value as passed in VmaVirtualAllocationCreateInfo::size.
@@ -1372,11 +1518,18 @@
void* VMA_NULLABLE pUserData;
} VmaVirtualAllocationInfo;
+/** @} */
+
#endif // _VMA_DATA_TYPES_DECLARATIONS
#ifndef _VMA_FUNCTION_HEADERS
-/// Creates Allocator object.
+/**
+\addtogroup group_init
+@{
+*/
+
+/// Creates #VmaAllocator object.
VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator(
const VmaAllocatorCreateInfo* VMA_NOT_NULL pCreateInfo,
VmaAllocator VMA_NULLABLE* VMA_NOT_NULL pAllocator);
@@ -1427,6 +1580,13 @@
VmaAllocator VMA_NOT_NULL allocator,
uint32_t frameIndex);
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/** \brief Retrieves statistics from current state of the Allocator.
This function is called "calculate" not "get" because it has to traverse all
@@ -1455,6 +1615,13 @@
VmaAllocator VMA_NOT_NULL allocator,
VmaBudget* VMA_NOT_NULL pBudgets);
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
/**
\brief Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo.
@@ -1530,6 +1697,13 @@
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NULLABLE pool);
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/** \brief Retrieves statistics of existing #VmaPool object.
\param allocator Allocator object.
@@ -1541,6 +1715,13 @@
VmaPool VMA_NOT_NULL pool,
VmaPoolStats* VMA_NOT_NULL pPoolStats);
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
/** \brief Checks magic number in margins around all allocations in given memory pool in search for corruptions.
Corruption detection is enabled only when `VMA_DEBUG_DETECT_CORRUPTION` macro is defined to nonzero,
@@ -2162,6 +2343,13 @@
VkImage VMA_NULLABLE_NON_DISPATCHABLE image,
VmaAllocation VMA_NULLABLE allocation);
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
/** \brief Creates new #VmaVirtualBlock object.
\param pCreateInfo Parameters for creation.
@@ -2192,7 +2380,7 @@
*/
VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VkDeviceSize offset, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
+ VmaVirtualAllocation VMA_NOT_NULL allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
/** \brief Allocates new virtual allocation inside given #VmaVirtualBlock.
@@ -2201,17 +2389,23 @@
If the allocation fails due to not enough free space available, `VK_ERROR_OUT_OF_DEVICE_MEMORY` is returned
(despite the function doesn't ever allocate actual GPU memory).
+
+\param virtualBlock Virtual block
+\param pCreateInfo Parameters for the allocation
+\param[out] pAllocation Returned handle of the new allocation
+\param[out] pOffset Returned offset of the new allocation. Optional, can be null.
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
- VkDeviceSize* VMA_NOT_NULL pOffset);
+ VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
+ VkDeviceSize* VMA_NULLABLE pOffset);
/** \brief Frees virtual allocation inside given #VmaVirtualBlock.
*/
VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VkDeviceSize offset);
+ VmaVirtualAllocation VMA_NULLABLE allocation);
/** \brief Frees all virtual allocations inside given #VmaVirtualBlock.
@@ -2228,7 +2422,7 @@
*/
VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VkDeviceSize offset,
+ VmaVirtualAllocation VMA_NOT_NULL allocation,
void* VMA_NULLABLE pUserData);
/** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
@@ -2237,6 +2431,13 @@
VmaVirtualBlock VMA_NOT_NULL virtualBlock,
VmaStatInfo* VMA_NOT_NULL pStatInfo);
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/** \brief Builds and returns a null-terminated string in JSON format with information about given #VmaVirtualBlock.
\param virtualBlock Virtual block.
\param[out] ppStatsString Returned string.
@@ -2270,6 +2471,8 @@
char* VMA_NULLABLE pStatsString);
#endif // VMA_STATS_STRING_ENABLED
+/** @} */
+
#endif // _VMA_FUNCTION_HEADERS
#ifdef __cplusplus
@@ -2469,6 +2672,16 @@
#endif
#endif
+#ifndef VMA_BITSCAN_LSB
+ // Scans integer for index of first nonzero value from the Least Significant Bit (LSB). If mask is 0 then returns UINT8_MAX
+ #define VMA_BITSCAN_LSB(mask) VmaBitScanLSB(mask)
+#endif
+
+#ifndef VMA_BITSCAN_MSB
+ // Scans integer for index of first nonzero value from the Most Significant Bit (MSB). If mask is 0 then returns UINT8_MAX
+ #define VMA_BITSCAN_MSB(mask) VmaBitScanMSB(mask)
+#endif
+
#ifndef VMA_MIN
#define VMA_MIN(v1, v2) ((std::min)((v1), (v2)))
#endif
@@ -2740,6 +2953,7 @@
enum class VmaAllocationRequestType
{
Normal,
+ TLSF,
// Used by "Linear" algorithm.
UpperAddress,
EndOf1st,
@@ -2749,6 +2963,9 @@
#endif // _VMA_ENUM_DECLARATIONS
#ifndef _VMA_FORWARD_DECLARATIONS
+// Opaque handle used by allocation algorithms to identify single allocation in any conforming way.
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaAllocHandle);
+
struct VmaMutexLock;
struct VmaMutexLockRead;
struct VmaMutexLockWrite;
@@ -2814,6 +3031,7 @@
class VmaBlockMetadata_Generic;
class VmaBlockMetadata_Linear;
class VmaBlockMetadata_Buddy;
+class VmaBlockMetadata_TLSF;
class VmaBlockVector;
@@ -2846,6 +3064,74 @@
return c;
}
+static inline uint8_t VmaBitScanLSB(uint64_t mask)
+{
+#ifdef _MSC_VER
+ DWORD pos;
+ if (_BitScanForward64(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#else
+ uint8_t pos = 0;
+ do
+ {
+ if (mask & (1ULL << pos))
+ return pos;
+ } while (pos++ < 63);
+#endif
+ return UINT8_MAX;
+}
+
+static inline uint8_t VmaBitScanLSB(uint32_t mask)
+{
+#ifdef _MSC_VER
+ DWORD pos;
+ if (_BitScanForward(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#else
+ uint8_t pos = 0;
+ do
+ {
+ if (mask & (1UL << pos))
+ return pos;
+ } while (pos++ < 31);
+#endif
+ return UINT8_MAX;
+}
+
+static inline uint8_t VmaBitScanMSB(uint64_t mask)
+{
+#ifdef _MSC_VER
+ DWORD pos;
+ if (_BitScanReverse64(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#else
+ uint8_t pos = 63;
+ do
+ {
+ if (mask & (1ULL << pos))
+ return pos;
+ } while (pos-- > 0);
+#endif
+ return UINT8_MAX;
+}
+
+static inline uint8_t VmaBitScanMSB(uint32_t mask)
+{
+#ifdef _MSC_VER
+ DWORD pos;
+ if (_BitScanReverse(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#else
+ uint8_t pos = 31;
+ do
+ {
+ if (mask & (1UL << pos))
+ return pos;
+ } while (pos-- > 0);
+#endif
+ return UINT8_MAX;
+}
+
/*
Returns true if given number is a power of two.
T must be unsigned integer number or signed integer but always nonnegative.
@@ -2882,6 +3168,13 @@
return (x + (y / (T)2)) / y;
}
+// Divide by 'y' and round up to nearest integer.
+template <typename T>
+static inline T VmaDivideRoundingUp(T x, T y)
+{
+ return (x + y - (T)1) / y;
+}
+
// Returns smallest power of 2 greater or equal to v.
static inline uint32_t VmaNextPow2(uint32_t v)
{
@@ -2946,6 +3239,8 @@
return "Linear";
case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
return "Buddy";
+ case VMA_POOL_CREATE_TLSF_ALGORITHM_BIT:
+ return "TLSF";
case 0:
return "Default";
default:
@@ -5249,7 +5544,8 @@
VkDeviceMemory newMemory,
VkDeviceSize newSize,
uint32_t id,
- uint32_t algorithm);
+ uint32_t algorithm,
+ VkDeviceSize bufferImageGranularity);
// Always call before destruction.
void Destroy(VmaAllocator allocator);
@@ -5323,7 +5619,7 @@
void InitBlockAllocation(
VmaDeviceMemoryBlock* block,
- VkDeviceSize offset,
+ VmaAllocHandle allocHandle,
VkDeviceSize alignment,
VkDeviceSize size,
uint32_t memoryTypeIndex,
@@ -5350,8 +5646,9 @@
bool IsPersistentMap() const { return (m_MapCount & MAP_COUNT_FLAG_PERSISTENT_MAP) != 0; }
void SetUserData(VmaAllocator hAllocator, void* pUserData);
- void ChangeBlockAllocation(VmaAllocator hAllocator, VmaDeviceMemoryBlock* block, VkDeviceSize offset);
- void ChangeOffset(VkDeviceSize newOffset);
+ void ChangeBlockAllocation(VmaAllocator hAllocator, VmaDeviceMemoryBlock* block, VmaAllocHandle allocHandle);
+ void ChangeAllocHandle(VmaAllocHandle newAllocHandle);
+ VmaAllocHandle GetAllocHandle() const;
VkDeviceSize GetOffset() const;
VmaPool GetParentPool() const;
VkDeviceMemory GetMemory() const;
@@ -5376,7 +5673,7 @@
struct BlockAllocation
{
VmaDeviceMemoryBlock* m_Block;
- VkDeviceSize m_Offset;
+ VmaAllocHandle m_AllocHandle;
};
// Allocation for an object that has its own private VkDeviceMemory.
struct DedicatedAllocation
@@ -5618,10 +5915,11 @@
*/
struct VmaAllocationRequest
{
- VkDeviceSize offset;
+ VmaAllocHandle allocHandle;
VkDeviceSize size;
VmaSuballocationList::iterator item;
void* customData;
+ uint64_t algorithmData;
VmaAllocationRequestType type;
};
#endif // _VMA_ALLOCATION_REQUEST
@@ -5635,7 +5933,8 @@
{
public:
// pAllocationCallbacks, if not null, must be owned externally - alive and unchanged for the whole lifetime of this object.
- VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual);
+ VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
virtual ~VmaBlockMetadata() = default;
virtual void Init(VkDeviceSize size) { m_Size = size; }
@@ -5648,7 +5947,8 @@
virtual VkDeviceSize GetSumFreeSize() const = 0;
// Returns true if this block is empty - contains only single free suballocation.
virtual bool IsEmpty() const = 0;
- virtual void GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo) = 0;
+ virtual void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) = 0;
+ virtual VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const = 0;
// Must set blockCount to 1.
virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const = 0;
@@ -5663,7 +5963,6 @@
// If succeeded, fills pAllocationRequest and returns true.
// If failed, returns false.
virtual bool CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
@@ -5681,16 +5980,17 @@
void* userData) = 0;
// Frees suballocation assigned to given memory region.
- virtual void FreeAtOffset(VkDeviceSize offset) = 0;
+ virtual void Free(VmaAllocHandle allocHandle) = 0;
// Frees all allocations.
// Careful! Don't call it if there are VmaAllocation objects owned by userData of cleared allocations!
virtual void Clear() = 0;
- virtual void SetAllocationUserData(VkDeviceSize offset, void* userData) = 0;
+ virtual void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) = 0;
protected:
const VkAllocationCallbacks* GetAllocationCallbacks() const { return m_pAllocationCallbacks; }
+ VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; }
VkDeviceSize GetDebugMargin() const { return IsVirtual() ? 0 : VMA_DEBUG_MARGIN; }
#if VMA_STATS_STRING_ENABLED
@@ -5709,13 +6009,16 @@
private:
VkDeviceSize m_Size;
const VkAllocationCallbacks* m_pAllocationCallbacks;
+ const VkDeviceSize m_BufferImageGranularity;
const bool m_IsVirtual;
};
#ifndef _VMA_BLOCK_METADATA_FUNCTIONS
-VmaBlockMetadata::VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual)
+VmaBlockMetadata::VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
: m_Size(0),
m_pAllocationCallbacks(pAllocationCallbacks),
+ m_BufferImageGranularity(bufferImageGranularity),
m_IsVirtual(isVirtual) {}
#if VMA_STATS_STRING_ENABLED
@@ -5798,6 +6101,241 @@
#endif // _VMA_BLOCK_METADATA_FUNCTIONS
#endif // _VMA_BLOCK_METADATA
+#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY
+// Before deleting object of this class remember to call 'Destroy()'
+class VmaBlockBufferImageGranularity final
+{
+public:
+ struct ValidationContext
+ {
+ const VkAllocationCallbacks* allocCallbacks;
+ uint16_t* pageAllocs;
+ };
+
+ VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity);
+ ~VmaBlockBufferImageGranularity();
+
+ bool IsEnabled() const { return m_BufferImageGranularity > MAX_LOW_IMAGE_BUFFER_GRANULARITY; }
+
+ void Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size);
+ // Before destroying object you must call free it's memory
+ void Destroy(const VkAllocationCallbacks* pAllocationCallbacks);
+
+ void RoundupAllocRequest(VmaSuballocationType allocType,
+ VkDeviceSize& inOutAllocSize,
+ VkDeviceSize& inOutAllocAlignment) const;
+
+ bool IsConflict(VkDeviceSize allocSize,
+ VkDeviceSize allocOffset,
+ VkDeviceSize blockSize,
+ VkDeviceSize blockOffset,
+ VmaSuballocationType allocType) const;
+
+ void AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size);
+ void FreePages(VkDeviceSize offset, VkDeviceSize size);
+ void Clear();
+
+ ValidationContext StartValidation(const VkAllocationCallbacks* pAllocationCallbacks,
+ bool isVirutal) const;
+ bool Validate(ValidationContext& ctx, VkDeviceSize offset, VkDeviceSize size) const;
+ bool FinishValidation(ValidationContext& ctx) const;
+
+private:
+ static const uint16_t MAX_LOW_IMAGE_BUFFER_GRANULARITY = 256;
+
+ struct RegionInfo
+ {
+ uint8_t allocType;
+ uint16_t allocCount;
+ };
+
+ VkDeviceSize m_BufferImageGranularity;
+ uint32_t m_RegionCount;
+ RegionInfo* m_RegionInfo;
+
+ uint32_t GetStartPage(VkDeviceSize offset) const { return PageToIndex(offset & ~(m_BufferImageGranularity - 1)); }
+ uint32_t GetEndPage(VkDeviceSize offset, VkDeviceSize size) const { return PageToIndex((offset + size - 1) & ~(m_BufferImageGranularity - 1)); }
+
+ uint32_t PageToIndex(VkDeviceSize offset) const;
+ void AllocPage(RegionInfo& page, uint8_t allocType);
+};
+
+#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS
+VmaBlockBufferImageGranularity::VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity)
+ : m_BufferImageGranularity(bufferImageGranularity),
+ m_RegionCount(0),
+ m_RegionInfo(VMA_NULL) {}
+
+VmaBlockBufferImageGranularity::~VmaBlockBufferImageGranularity()
+{
+ VMA_ASSERT(m_RegionInfo == VMA_NULL && "Free not called before destroying object!");
+}
+
+void VmaBlockBufferImageGranularity::Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ m_RegionCount = static_cast<uint32_t>(VmaDivideRoundingUp(size, m_BufferImageGranularity));
+ m_RegionInfo = vma_new_array(pAllocationCallbacks, RegionInfo, m_RegionCount);
+ memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo));
+ }
+}
+
+void VmaBlockBufferImageGranularity::Destroy(const VkAllocationCallbacks* pAllocationCallbacks)
+{
+ if (m_RegionInfo)
+ {
+ vma_delete_array(pAllocationCallbacks, m_RegionInfo, m_RegionCount);
+ m_RegionInfo = VMA_NULL;
+ }
+}
+
+void VmaBlockBufferImageGranularity::RoundupAllocRequest(VmaSuballocationType allocType,
+ VkDeviceSize& inOutAllocSize,
+ VkDeviceSize& inOutAllocAlignment) const
+{
+ if (m_BufferImageGranularity > 1 &&
+ m_BufferImageGranularity <= MAX_LOW_IMAGE_BUFFER_GRANULARITY)
+ {
+ if (allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||
+ allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||
+ allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)
+ {
+ inOutAllocAlignment = VMA_MAX(inOutAllocAlignment, m_BufferImageGranularity);
+ inOutAllocSize = VmaAlignUp(inOutAllocSize, m_BufferImageGranularity);
+ }
+ }
+}
+
+bool VmaBlockBufferImageGranularity::IsConflict(VkDeviceSize allocSize,
+ VkDeviceSize allocOffset,
+ VkDeviceSize blockSize,
+ VkDeviceSize blockOffset,
+ VmaSuballocationType allocType) const
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(allocOffset);
+ if (m_RegionInfo[startPage].allocCount > 0 &&
+ VmaIsBufferImageGranularityConflict(static_cast<VmaSuballocationType>(m_RegionInfo[startPage].allocType), allocType))
+ {
+ allocOffset = VmaAlignUp(allocOffset, m_BufferImageGranularity);
+ if (blockSize < allocSize + allocOffset - blockOffset)
+ return true;
+ ++startPage;
+ }
+ uint32_t endPage = GetEndPage(allocOffset, allocSize);
+ if (endPage != startPage &&
+ m_RegionInfo[endPage].allocCount > 0 &&
+ VmaIsBufferImageGranularityConflict(static_cast<VmaSuballocationType>(m_RegionInfo[endPage].allocType), allocType))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+void VmaBlockBufferImageGranularity::AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(offset);
+ AllocPage(m_RegionInfo[startPage], allocType);
+
+ uint32_t endPage = GetEndPage(offset, size);
+ if (startPage != endPage)
+ AllocPage(m_RegionInfo[endPage], allocType);
+ }
+}
+
+void VmaBlockBufferImageGranularity::FreePages(VkDeviceSize offset, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(offset);
+ --m_RegionInfo[startPage].allocCount;
+ if (m_RegionInfo[startPage].allocCount == 0)
+ m_RegionInfo[startPage].allocType = VMA_SUBALLOCATION_TYPE_FREE;
+ uint32_t endPage = GetEndPage(offset, size);
+ if (startPage != endPage)
+ {
+ --m_RegionInfo[endPage].allocCount;
+ if (m_RegionInfo[endPage].allocCount == 0)
+ m_RegionInfo[endPage].allocType = VMA_SUBALLOCATION_TYPE_FREE;
+ }
+ }
+}
+
+void VmaBlockBufferImageGranularity::Clear()
+{
+ if (m_RegionInfo)
+ memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo));
+}
+
+VmaBlockBufferImageGranularity::ValidationContext VmaBlockBufferImageGranularity::StartValidation(
+ const VkAllocationCallbacks* pAllocationCallbacks, bool isVirutal) const
+{
+ ValidationContext ctx{ pAllocationCallbacks, VMA_NULL };
+ if (!isVirutal && IsEnabled())
+ {
+ ctx.pageAllocs = vma_new_array(pAllocationCallbacks, uint16_t, m_RegionCount);
+ memset(ctx.pageAllocs, 0, m_RegionCount * sizeof(uint16_t));
+ }
+ return ctx;
+}
+
+bool VmaBlockBufferImageGranularity::Validate(ValidationContext& ctx,
+ VkDeviceSize offset, VkDeviceSize size) const
+{
+ if (IsEnabled())
+ {
+ uint32_t start = GetStartPage(offset);
+ ++ctx.pageAllocs[start];
+ VMA_VALIDATE(m_RegionInfo[start].allocCount > 0);
+
+ uint32_t end = GetEndPage(offset, size);
+ if (start != end)
+ {
+ ++ctx.pageAllocs[end];
+ VMA_VALIDATE(m_RegionInfo[end].allocCount > 0);
+ }
+ }
+ return true;
+}
+
+bool VmaBlockBufferImageGranularity::FinishValidation(ValidationContext& ctx) const
+{
+ // Check proper page structure
+ if (IsEnabled())
+ {
+ VMA_ASSERT(ctx.pageAllocs != VMA_NULL && "Validation context not initialized!");
+
+ for (uint32_t page = 0; page < m_RegionCount; ++page)
+ {
+ VMA_VALIDATE(ctx.pageAllocs[page] == m_RegionInfo[page].allocCount);
+ }
+ vma_delete_array(ctx.allocCallbacks, ctx.pageAllocs, m_RegionCount);
+ ctx.pageAllocs = VMA_NULL;
+ }
+ return true;
+}
+
+uint32_t VmaBlockBufferImageGranularity::PageToIndex(VkDeviceSize offset) const
+{
+ return static_cast<uint32_t>(offset >> VMA_BITSCAN_MSB(m_BufferImageGranularity));
+}
+
+void VmaBlockBufferImageGranularity::AllocPage(RegionInfo& page, uint8_t allocType)
+{
+ // When current alloc type is free then it can be overriden by new type
+ if (page.allocCount == 0 || page.allocCount > 0 && page.allocType == VMA_SUBALLOCATION_TYPE_FREE)
+ page.allocType = allocType;
+
+ ++page.allocCount;
+}
+#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS
+#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY
+
#ifndef _VMA_BLOCK_METADATA_GENERIC
class VmaBlockMetadata_Generic : public VmaBlockMetadata
{
@@ -5805,43 +6343,44 @@
friend class VmaDefragmentationAlgorithm_Fast;
VMA_CLASS_NO_COPY(VmaBlockMetadata_Generic)
public:
- VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual);
+ VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
virtual ~VmaBlockMetadata_Generic() = default;
- virtual size_t GetAllocationCount() const { return m_Suballocations.size() - m_FreeCount; }
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize; }
- virtual bool IsEmpty() const { return (m_Suballocations.size() == 1) && (m_FreeCount == 1); }
- virtual void FreeAtOffset(VkDeviceSize offset) { FreeSuballocation(FindAtOffset(offset)); }
+ size_t GetAllocationCount() const override { return m_Suballocations.size() - m_FreeCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; }
+ bool IsEmpty() const override { return (m_Suballocations.size() == 1) && (m_FreeCount == 1); }
+ void Free(VmaAllocHandle allocHandle) override { FreeSuballocation(FindAtOffset((VkDeviceSize)allocHandle)); }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle; };
- virtual void Init(VkDeviceSize size);
- virtual bool Validate() const;
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
+ void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
+ void AddPoolStats(VmaPoolStats& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
+ void PrintDetailedMap(class VmaJsonWriter& json) const override;
#endif
- virtual bool CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
+ bool CreateAllocationRequest(
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
+ VmaAllocationRequest* pAllocationRequest) override;
- virtual VkResult CheckCorruption(const void* pBlockData);
+ VkResult CheckCorruption(const void* pBlockData) override;
- virtual void Alloc(
+ void Alloc(
const VmaAllocationRequest& request,
VmaSuballocationType type,
- void* userData);
+ void* userData) override;
- virtual void GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo);
- virtual void Clear();
- virtual void SetAllocationUserData(VkDeviceSize offset, void* userData);
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
// For defragmentation
bool IsBufferImageGranularityConflictPossible(
@@ -5863,12 +6402,11 @@
// Checks if requested suballocation with given parameters can be placed in given pFreeSuballocItem.
// If yes, fills pOffset and returns true. If no, returns false.
bool CheckAllocation(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
VmaSuballocationList::const_iterator suballocItem,
- VkDeviceSize* pOffset) const;
+ VmaAllocHandle* pAllocHandle) const;
// Given free suballocation, it merges it with following one, which must also be free.
void MergeFreeWithNext(VmaSuballocationList::iterator item);
@@ -5885,8 +6423,9 @@
};
#ifndef _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS
-VmaBlockMetadata_Generic::VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual)
- : VmaBlockMetadata(pAllocationCallbacks, isVirtual),
+VmaBlockMetadata_Generic::VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
m_FreeCount(0),
m_SumFreeSize(0),
m_Suballocations(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
@@ -5954,7 +6493,7 @@
{
if (!IsVirtual())
{
- VMA_VALIDATE(alloc->GetOffset() == subAlloc.offset);
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == subAlloc.offset);
VMA_VALIDATE(alloc->GetSize() == subAlloc.size);
}
@@ -6046,7 +6585,6 @@
#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Generic::CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
@@ -6089,12 +6627,11 @@
for (; index < freeSuballocCount; ++index)
{
if (CheckAllocation(
- bufferImageGranularity,
allocSize,
allocAlignment,
allocType,
m_FreeSuballocationsBySize[index],
- &pAllocationRequest->offset))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = m_FreeSuballocationsBySize[index];
return true;
@@ -6108,12 +6645,11 @@
++it)
{
if (it->type == VMA_SUBALLOCATION_TYPE_FREE && CheckAllocation(
- bufferImageGranularity,
allocSize,
allocAlignment,
allocType,
it,
- &pAllocationRequest->offset))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = it;
return true;
@@ -6126,12 +6662,11 @@
for (size_t index = freeSuballocCount; index--; )
{
if (CheckAllocation(
- bufferImageGranularity,
allocSize,
allocAlignment,
allocType,
m_FreeSuballocationsBySize[index],
- &pAllocationRequest->offset))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = m_FreeSuballocationsBySize[index];
return true;
@@ -6175,9 +6710,10 @@
VmaSuballocation& suballoc = *request.item;
// Given suballocation is a free block.
VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
+
// Given offset is inside this suballocation.
- VMA_ASSERT(request.offset >= suballoc.offset);
- const VkDeviceSize paddingBegin = request.offset - suballoc.offset;
+ VMA_ASSERT((VkDeviceSize)request.allocHandle >= suballoc.offset);
+ const VkDeviceSize paddingBegin = (VkDeviceSize)request.allocHandle - suballoc.offset;
VMA_ASSERT(suballoc.size >= paddingBegin + request.size);
const VkDeviceSize paddingEnd = suballoc.size - paddingBegin - request.size;
@@ -6185,7 +6721,7 @@
// it to become used.
UnregisterFreeSuballocation(request.item);
- suballoc.offset = request.offset;
+ suballoc.offset = (VkDeviceSize)request.allocHandle;
suballoc.size = request.size;
suballoc.type = type;
suballoc.userData = userData;
@@ -6194,7 +6730,7 @@
if (paddingEnd)
{
VmaSuballocation paddingSuballoc = {};
- paddingSuballoc.offset = request.offset + request.size;
+ paddingSuballoc.offset = suballoc.offset + suballoc.size;
paddingSuballoc.size = paddingEnd;
paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
VmaSuballocationList::iterator next = request.item;
@@ -6208,7 +6744,7 @@
if (paddingBegin)
{
VmaSuballocation paddingSuballoc = {};
- paddingSuballoc.offset = request.offset - paddingBegin;
+ paddingSuballoc.offset = suballoc.offset - paddingBegin;
paddingSuballoc.size = paddingBegin;
paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
const VmaSuballocationList::iterator paddingBeginItem =
@@ -6229,9 +6765,10 @@
m_SumFreeSize -= request.size;
}
-void VmaBlockMetadata_Generic::GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo)
+void VmaBlockMetadata_Generic::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
{
- const VmaSuballocation& suballoc = *FindAtOffset(offset);
+ const VmaSuballocation& suballoc = *FindAtOffset((VkDeviceSize)allocHandle);
+ outInfo.offset = (VkDeviceSize)allocHandle;
outInfo.size = suballoc.size;
outInfo.pUserData = suballoc.userData;
}
@@ -6255,9 +6792,9 @@
m_FreeSuballocationsBySize.push_back(m_Suballocations.begin());
}
-void VmaBlockMetadata_Generic::SetAllocationUserData(VkDeviceSize offset, void* userData)
+void VmaBlockMetadata_Generic::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
{
- VmaSuballocation& suballoc = *FindAtOffset(offset);
+ VmaSuballocation& suballoc = *FindAtOffset((VkDeviceSize)allocHandle);
suballoc.userData = userData;
}
@@ -6309,19 +6846,19 @@
}
bool VmaBlockMetadata_Generic::CheckAllocation(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
VmaSuballocationList::const_iterator suballocItem,
- VkDeviceSize* pOffset) const
+ VmaAllocHandle* pAllocHandle) const
{
VMA_ASSERT(allocSize > 0);
VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);
VMA_ASSERT(suballocItem != m_Suballocations.cend());
- VMA_ASSERT(pOffset != VMA_NULL);
+ VMA_ASSERT(pAllocHandle != VMA_NULL);
const VkDeviceSize debugMargin = GetDebugMargin();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
const VmaSuballocation& suballoc = *suballocItem;
VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
@@ -6333,16 +6870,16 @@
}
// Start from offset equal to beginning of this suballocation.
- *pOffset = suballoc.offset;
+ VkDeviceSize offset = suballoc.offset;
// Apply debugMargin at the beginning.
if (debugMargin > 0)
{
- *pOffset += debugMargin;
+ offset += debugMargin;
}
// Apply alignment.
- *pOffset = VmaAlignUp(*pOffset, allocAlignment);
+ offset = VmaAlignUp(offset, allocAlignment);
// Check previous suballocations for BufferImageGranularity conflicts.
// Make bigger alignment if necessary.
@@ -6354,7 +6891,7 @@
{
--prevSuballocItem;
const VmaSuballocation& prevSuballoc = *prevSuballocItem;
- if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, offset, bufferImageGranularity))
{
if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
{
@@ -6368,12 +6905,12 @@
}
if (bufferImageGranularityConflict)
{
- *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);
+ offset = VmaAlignUp(offset, bufferImageGranularity);
}
}
// Calculate padding at the beginning based on current offset.
- const VkDeviceSize paddingBegin = *pOffset - suballoc.offset;
+ const VkDeviceSize paddingBegin = offset - suballoc.offset;
// Calculate required margin at the end.
const VkDeviceSize requiredEndMargin = debugMargin;
@@ -6386,14 +6923,14 @@
// Check next suballocations for BufferImageGranularity conflicts.
// If conflict exists, allocation cannot be made here.
- if (allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)
+ if (allocSize % bufferImageGranularity || offset % bufferImageGranularity)
{
VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;
++nextSuballocItem;
while (nextSuballocItem != m_Suballocations.cend())
{
const VmaSuballocation& nextSuballoc = *nextSuballocItem;
- if (VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(offset, allocSize, nextSuballoc.offset, bufferImageGranularity))
{
if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
{
@@ -6409,7 +6946,8 @@
}
}
- // All tests passed: Success. pOffset is already filled.
+ *pAllocHandle = (VmaAllocHandle)offset;
+ // All tests passed: Success. pAllocHandle is already filled.
return true;
}
@@ -6645,43 +7183,44 @@
{
VMA_CLASS_NO_COPY(VmaBlockMetadata_Linear)
public:
- VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual);
+ VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
virtual ~VmaBlockMetadata_Linear() = default;
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize; }
- virtual bool IsEmpty() const { return GetAllocationCount() == 0; }
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; }
+ bool IsEmpty() const override { return GetAllocationCount() == 0; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle; };
- virtual void Init(VkDeviceSize size);
- virtual bool Validate() const;
- virtual size_t GetAllocationCount() const;
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
+ size_t GetAllocationCount() const override;
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
+ void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
+ void AddPoolStats(VmaPoolStats& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
+ void PrintDetailedMap(class VmaJsonWriter& json) const override;
#endif
- virtual bool CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
+ bool CreateAllocationRequest(
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
+ VmaAllocationRequest* pAllocationRequest) override;
- virtual VkResult CheckCorruption(const void* pBlockData);
+ VkResult CheckCorruption(const void* pBlockData) override;
- virtual void Alloc(
+ void Alloc(
const VmaAllocationRequest& request,
VmaSuballocationType type,
- void* userData);
+ void* userData) override;
- virtual void FreeAtOffset(VkDeviceSize offset);
- virtual void GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo);
- virtual void Clear();
- virtual void SetAllocationUserData(VkDeviceSize offset, void* userData);
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
private:
/*
@@ -6730,14 +7269,12 @@
void CleanupAfterFree();
bool CreateAllocationRequest_LowerAddress(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
uint32_t strategy,
VmaAllocationRequest* pAllocationRequest);
bool CreateAllocationRequest_UpperAddress(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
@@ -6746,8 +7283,9 @@
};
#ifndef _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS
-VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual)
- : VmaBlockMetadata(pAllocationCallbacks, isVirtual),
+VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
m_SumFreeSize(0),
m_Suballocations0(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
m_Suballocations1(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
@@ -6814,7 +7352,7 @@
{
if (!IsVirtual())
{
- VMA_VALIDATE(alloc->GetOffset() == suballoc.offset);
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset);
VMA_VALIDATE(alloc->GetSize() == suballoc.size);
}
sumUsedSize += suballoc.size;
@@ -6856,7 +7394,7 @@
{
if (!IsVirtual())
{
- VMA_VALIDATE(alloc->GetOffset() == suballoc.offset);
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset);
VMA_VALIDATE(alloc->GetSize() == suballoc.size);
}
sumUsedSize += suballoc.size;
@@ -6890,7 +7428,7 @@
{
if (!IsVirtual())
{
- VMA_VALIDATE(alloc->GetOffset() == suballoc.offset);
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset);
VMA_VALIDATE(alloc->GetSize() == suballoc.size);
}
sumUsedSize += suballoc.size;
@@ -7565,7 +8103,6 @@
#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Linear::CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
@@ -7580,10 +8117,8 @@
pAllocationRequest->size = allocSize;
return upperAddress ?
CreateAllocationRequest_UpperAddress(
- bufferImageGranularity,
allocSize, allocAlignment, allocType, strategy, pAllocationRequest) :
CreateAllocationRequest_LowerAddress(
- bufferImageGranularity,
allocSize, allocAlignment, allocType, strategy, pAllocationRequest);
}
@@ -7636,7 +8171,7 @@
VmaSuballocationType type,
void* userData)
{
- const VmaSuballocation newSuballoc = { request.offset, request.size, userData, type };
+ const VmaSuballocation newSuballoc = { (VkDeviceSize)request.allocHandle, request.size, userData, type };
switch (request.type)
{
@@ -7654,9 +8189,9 @@
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
VMA_ASSERT(suballocations1st.empty() ||
- request.offset >= suballocations1st.back().offset + suballocations1st.back().size);
+ (VkDeviceSize)request.allocHandle >= suballocations1st.back().offset + suballocations1st.back().size);
// Check if it fits before the end of the block.
- VMA_ASSERT(request.offset + request.size <= GetSize());
+ VMA_ASSERT((VkDeviceSize)request.allocHandle + request.size <= GetSize());
suballocations1st.push_back(newSuballoc);
}
@@ -7666,7 +8201,7 @@
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
// New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector.
VMA_ASSERT(!suballocations1st.empty() &&
- request.offset + request.size <= suballocations1st[m_1stNullItemsBeginCount].offset);
+ (VkDeviceSize)request.allocHandle + request.size <= suballocations1st[m_1stNullItemsBeginCount].offset);
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
switch (m_2ndVectorMode)
@@ -7697,10 +8232,11 @@
m_SumFreeSize -= newSuballoc.size;
}
-void VmaBlockMetadata_Linear::FreeAtOffset(VkDeviceSize offset)
+void VmaBlockMetadata_Linear::Free(VmaAllocHandle allocHandle)
{
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ VkDeviceSize offset = (VkDeviceSize)allocHandle;
if (!suballocations1st.empty())
{
@@ -7785,9 +8321,10 @@
VMA_ASSERT(0 && "Allocation to free not found in linear allocator!");
}
-void VmaBlockMetadata_Linear::GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo)
+void VmaBlockMetadata_Linear::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
{
- VmaSuballocation& suballoc = FindSuballocation(offset);
+ VmaSuballocation& suballoc = FindSuballocation((VkDeviceSize)allocHandle);
+ outInfo.offset = (VkDeviceSize)allocHandle;
outInfo.size = suballoc.size;
outInfo.pUserData = suballoc.userData;
}
@@ -7804,9 +8341,9 @@
m_2ndNullItemsCount = 0;
}
-void VmaBlockMetadata_Linear::SetAllocationUserData(VkDeviceSize offset, void* userData)
+void VmaBlockMetadata_Linear::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
{
- VmaSuballocation& suballoc = FindSuballocation(offset);
+ VmaSuballocation& suballoc = FindSuballocation((VkDeviceSize)allocHandle);
suballoc.userData = userData;
}
@@ -7961,7 +8498,6 @@
}
bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
@@ -7970,6 +8506,7 @@
{
const VkDeviceSize blockSize = GetSize();
const VkDeviceSize debugMargin = GetDebugMargin();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
@@ -8051,7 +8588,7 @@
}
// All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)resultOffset;
// pAllocationRequest->item, customData unused.
pAllocationRequest->type = VmaAllocationRequestType::EndOf1st;
return true;
@@ -8140,7 +8677,7 @@
}
// All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)resultOffset;
pAllocationRequest->type = VmaAllocationRequestType::EndOf2nd;
// pAllocationRequest->item, customData unused.
return true;
@@ -8151,7 +8688,6 @@
}
bool VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
@@ -8159,6 +8695,7 @@
VmaAllocationRequest* pAllocationRequest)
{
const VkDeviceSize blockSize = GetSize();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
@@ -8257,7 +8794,7 @@
}
// All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)resultOffset;
// pAllocationRequest->item unused.
pAllocationRequest->type = VmaAllocationRequestType::UpperAddress;
return true;
@@ -8284,42 +8821,43 @@
{
VMA_CLASS_NO_COPY(VmaBlockMetadata_Buddy)
public:
- VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual);
+ VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
virtual ~VmaBlockMetadata_Buddy();
- virtual size_t GetAllocationCount() const { return m_AllocationCount; }
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize + GetUnusableSize(); }
- virtual bool IsEmpty() const { return m_Root->type == Node::TYPE_FREE; }
- virtual VkResult CheckCorruption(const void* pBlockData) { return VK_ERROR_FEATURE_NOT_PRESENT; }
+ size_t GetAllocationCount() const override { return m_AllocationCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize + GetUnusableSize(); }
+ bool IsEmpty() const override { return m_Root->type == Node::TYPE_FREE; }
+ VkResult CheckCorruption(const void* pBlockData) override { return VK_ERROR_FEATURE_NOT_PRESENT; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle; };
- virtual void Init(VkDeviceSize size);
- virtual bool Validate() const;
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
+ void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
+ void AddPoolStats(VmaPoolStats& inoutStats) const override;
#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
+ void PrintDetailedMap(class VmaJsonWriter& json) const override;
#endif
- virtual bool CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
+ bool CreateAllocationRequest(
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
+ VmaAllocationRequest* pAllocationRequest) override;
- virtual void Alloc(
+ void Alloc(
const VmaAllocationRequest& request,
VmaSuballocationType type,
- void* userData);
+ void* userData) override;
- virtual void FreeAtOffset(VkDeviceSize offset);
- virtual void GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo);
- virtual void Clear();
- virtual void SetAllocationUserData(VkDeviceSize offset, void* userData);
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
private:
static const size_t MAX_LEVELS = 48;
@@ -8411,8 +8949,9 @@
};
#ifndef _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS
-VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks, bool isVirtual)
- : VmaBlockMetadata(pAllocationCallbacks, isVirtual),
+VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
m_NodeAllocator(pAllocationCallbacks, 32), // firstBlockCapacity
m_Root(VMA_NULL),
m_AllocationCount(0),
@@ -8527,7 +9066,6 @@
}
#if VMA_STATS_STRING_ENABLED
-
void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json) const
{
VmaStatInfo stat;
@@ -8554,7 +9092,6 @@
#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Buddy::CreateAllocationRequest(
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
@@ -8572,8 +9109,8 @@
allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||
allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)
{
- allocAlignment = VMA_MAX(allocAlignment, bufferImageGranularity);
- allocSize = VMA_MAX(allocSize, bufferImageGranularity);
+ allocAlignment = VMA_MAX(allocAlignment, GetBufferImageGranularity());
+ allocSize = VmaAlignUp(allocSize, GetBufferImageGranularity());
}
if (allocSize > m_UsableSize)
@@ -8591,7 +9128,7 @@
if (freeNode->offset % allocAlignment == 0)
{
pAllocationRequest->type = VmaAllocationRequestType::Normal;
- pAllocationRequest->offset = freeNode->offset;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)freeNode->offset;
pAllocationRequest->size = allocSize;
pAllocationRequest->customData = (void*)(uintptr_t)level;
return true;
@@ -8614,7 +9151,7 @@
Node* currNode = m_FreeList[currLevel].front;
VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE);
- while (currNode->offset != request.offset)
+ while (currNode->offset != (VkDeviceSize)request.allocHandle)
{
currNode = currNode->free.next;
VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE);
@@ -8676,10 +9213,11 @@
m_SumFreeSize -= request.size;
}
-void VmaBlockMetadata_Buddy::GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo)
+void VmaBlockMetadata_Buddy::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
{
uint32_t level = 0;
- const Node* const node = FindAllocationNode(offset, level);
+ const Node* const node = FindAllocationNode((VkDeviceSize)allocHandle, level);
+ outInfo.offset = (VkDeviceSize)allocHandle;
outInfo.size = LevelToNodeSize(level);
outInfo.pUserData = node->allocation.userData;
}
@@ -8705,10 +9243,10 @@
m_SumFreeSize = m_UsableSize;
}
-void VmaBlockMetadata_Buddy::SetAllocationUserData(VkDeviceSize offset, void* userData)
+void VmaBlockMetadata_Buddy::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
{
uint32_t level = 0;
- Node* const node = FindAllocationNode(offset, level);
+ Node* const node = FindAllocationNode((VkDeviceSize)allocHandle, level);
node->allocation.userData = userData;
}
@@ -8799,10 +9337,10 @@
return level;
}
-void VmaBlockMetadata_Buddy::FreeAtOffset(VkDeviceSize offset)
+void VmaBlockMetadata_Buddy::Free(VmaAllocHandle allocHandle)
{
uint32_t level = 0;
- Node* node = FindAllocationNode(offset, level);
+ Node* node = FindAllocationNode((VkDeviceSize)allocHandle, level);
++m_FreeCount;
--m_AllocationCount;
@@ -8933,6 +9471,764 @@
#endif // _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS
#endif // _VMA_BLOCK_METADATA_BUDDY
+#ifndef _VMA_BLOCK_METADATA_TLSF
+// To not search current larger region if first allocation won't succeed and skip to smaller range
+// use with VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT as strategy in CreateAllocationRequest()
+class VmaBlockMetadata_TLSF : public VmaBlockMetadata
+{
+ VMA_CLASS_NO_COPY(VmaBlockMetadata_TLSF)
+public:
+ VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata_TLSF();
+
+ size_t GetAllocationCount() const override { return m_AllocCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_BlocksFreeSize + m_NullBlock->size; }
+ bool IsEmpty() const override { return m_NullBlock->offset == 0; }
+ VkResult CheckCorruption(const void* pBlockData) override { return VK_ERROR_FEATURE_NOT_PRESENT; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return ((Block*)allocHandle)->offset; };
+
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
+
+ void CalcAllocationStatInfo(VmaStatInfo& outInfo) const override;
+ void AddPoolStats(VmaPoolStats& inoutStats) const override;
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json) const override;
+#endif
+
+ bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) override;
+
+ void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) override;
+
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
+
+private:
+ // According to original paper it should be preferable 4 or 5:
+ // M. Masmano, I. Ripoll, A. Crespo, and J. Real "TLSF: a New Dynamic Memory Allocator for Real-Time Systems"
+ // http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf
+ static const uint8_t SECOND_LEVEL_INDEX = 5;
+ static const uint16_t SMALL_BUFFER_SIZE = 256;
+ static const uint32_t INITIAL_BLOCK_ALLOC_COUNT = 16;
+ static const uint8_t MEMORY_CLASS_SHIFT = 7;
+
+ struct RegionInfo
+ {
+ uint8_t allocType;
+ uint16_t allocCount;
+ };
+ class Block
+ {
+ public:
+ VkDeviceSize offset;
+ VkDeviceSize size;
+ Block* prevPhysical;
+ Block* nextPhysical;
+
+ void MarkFree() { prevFree = VMA_NULL; }
+ void MarkTaken() { prevFree = this; }
+ bool IsFree() const { return prevFree != this; }
+ void*& UserData() { VMA_HEAVY_ASSERT(!IsFree()); return userData; }
+ Block*& PrevFree() { return prevFree; }
+ Block*& NextFree() { VMA_HEAVY_ASSERT(IsFree()); return nextFree; }
+
+ private:
+ Block* prevFree; // Address of the same block here indicates that block is taken
+ union
+ {
+ Block* nextFree;
+ void* userData;
+ };
+ };
+
+ size_t m_AllocCount;
+ // Total number of free blocks besides null block
+ size_t m_BlocksFreeCount;
+ // Total size of free blocks excluding null block
+ VkDeviceSize m_BlocksFreeSize;
+ uint32_t m_IsFree;
+ uint8_t m_MemoryClasses;
+ uint16_t* m_InnerIsFree;
+ uint32_t m_ListsCount;
+ /*
+ * 0: 0-3 lists for small buffers
+ * 1+: 0-(2^SLI-1) lists for normal buffers
+ */
+ Block** m_FreeList;
+ VmaPoolAllocator<Block> m_BlockAllocator;
+ Block* m_NullBlock;
+ VmaBlockBufferImageGranularity m_GranularityHandler;
+
+ uint8_t SizeToMemoryClass(VkDeviceSize size) const;
+ uint16_t SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const;
+ uint32_t GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const;
+ uint32_t GetListIndex(VkDeviceSize size) const;
+
+ void RemoveFreeBlock(Block* block);
+ void InsertFreeBlock(Block* block);
+ void MergeBlock(Block* block, Block* prev);
+
+ Block* FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const;
+ bool CheckBlock(
+ Block& block,
+ uint32_t listIndex,
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ VmaAllocationRequest* pAllocationRequest);
+};
+
+#ifndef _VMA_BLOCK_METADATA_TLSF_FUNCTIONS
+VmaBlockMetadata_TLSF::VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
+ m_AllocCount(0),
+ m_BlocksFreeCount(0),
+ m_BlocksFreeSize(0),
+ m_IsFree(0),
+ m_MemoryClasses(0),
+ m_InnerIsFree(VMA_NULL),
+ m_ListsCount(0),
+ m_FreeList(VMA_NULL),
+ m_BlockAllocator(pAllocationCallbacks, INITIAL_BLOCK_ALLOC_COUNT * sizeof(Block)),
+ m_NullBlock(VMA_NULL),
+ m_GranularityHandler(bufferImageGranularity) {}
+
+VmaBlockMetadata_TLSF::~VmaBlockMetadata_TLSF()
+{
+ if (m_InnerIsFree)
+ vma_delete_array(GetAllocationCallbacks(), m_InnerIsFree, m_MemoryClasses);
+ if (m_FreeList)
+ vma_delete_array(GetAllocationCallbacks(), m_FreeList, m_ListsCount);
+ m_GranularityHandler.Destroy(GetAllocationCallbacks());
+}
+
+void VmaBlockMetadata_TLSF::Init(VkDeviceSize size)
+{
+ VmaBlockMetadata::Init(size);
+
+ if (!IsVirtual())
+ m_GranularityHandler.Init(GetAllocationCallbacks(), size);
+
+ m_NullBlock = m_BlockAllocator.Alloc();
+ m_NullBlock->size = size;
+ m_NullBlock->offset = 0;
+ m_NullBlock->prevPhysical = VMA_NULL;
+ m_NullBlock->nextPhysical = VMA_NULL;
+ m_NullBlock->MarkFree();
+ m_NullBlock->NextFree() = VMA_NULL;
+ m_NullBlock->PrevFree() = VMA_NULL;
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ uint16_t sli = SizeToSecondIndex(size, memoryClass);
+ m_ListsCount = (memoryClass == 0 ? 0 : (memoryClass - 1) * (1UL << SECOND_LEVEL_INDEX) + sli) + 5;
+
+ m_MemoryClasses = memoryClass + 2;
+ m_InnerIsFree = vma_new_array(GetAllocationCallbacks(), uint16_t, m_MemoryClasses);
+ memset(m_InnerIsFree, 0, m_MemoryClasses * sizeof(uint16_t));
+
+ m_FreeList = vma_new_array(GetAllocationCallbacks(), Block*, m_ListsCount);
+ memset(m_FreeList, 0, m_ListsCount * sizeof(Block*));
+}
+
+bool VmaBlockMetadata_TLSF::Validate() const
+{
+ VMA_VALIDATE(GetSumFreeSize() <= GetSize());
+
+ VkDeviceSize calculatedSize = m_NullBlock->size;
+ VkDeviceSize calculatedFreeSize = m_NullBlock->size;
+ size_t allocCount = 0;
+ size_t freeCount = 0;
+
+ // Check integrity of free lists
+ for (uint32_t list = 0; list < m_ListsCount; ++list)
+ {
+ Block* block = m_FreeList[list];
+ if (block != VMA_NULL)
+ {
+ VMA_VALIDATE(block->IsFree());
+ VMA_VALIDATE(block->PrevFree() == VMA_NULL);
+ while (block->NextFree())
+ {
+ VMA_VALIDATE(block->NextFree()->IsFree());
+ VMA_VALIDATE(block->NextFree()->PrevFree() == block);
+ block = block->NextFree();
+ }
+ }
+ }
+
+ VkDeviceSize nextOffset = m_NullBlock->offset;
+ auto validateCtx = m_GranularityHandler.StartValidation(GetAllocationCallbacks(), IsVirtual());
+
+ VMA_VALIDATE(m_NullBlock->nextPhysical == VMA_NULL);
+ if (m_NullBlock->prevPhysical)
+ {
+ VMA_VALIDATE(m_NullBlock->prevPhysical->nextPhysical == m_NullBlock);
+ }
+ // Check all blocks
+ for (Block* prev = m_NullBlock->prevPhysical; prev != VMA_NULL; prev = prev->prevPhysical)
+ {
+ VMA_VALIDATE(prev->offset + prev->size == nextOffset);
+ nextOffset = prev->offset;
+ calculatedSize += prev->size;
+
+ uint32_t listIndex = GetListIndex(prev->size);
+ if (prev->IsFree())
+ {
+ ++freeCount;
+ // Check if free block belongs to free list
+ Block* freeBlock = m_FreeList[listIndex];
+ VMA_VALIDATE(freeBlock != VMA_NULL);
+
+ bool found = false;
+ do
+ {
+ if (freeBlock == prev)
+ found = true;
+
+ freeBlock = freeBlock->NextFree();
+ } while (!found && freeBlock != VMA_NULL);
+
+ VMA_VALIDATE(found);
+ calculatedFreeSize += prev->size;
+ }
+ else
+ {
+ ++allocCount;
+ // Check if taken block is not on a free list
+ Block* freeBlock = m_FreeList[listIndex];
+ while (freeBlock)
+ {
+ VMA_VALIDATE(freeBlock != prev);
+ freeBlock = freeBlock->NextFree();
+ }
+
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(m_GranularityHandler.Validate(validateCtx, prev->offset, prev->size));
+ }
+ }
+
+ if (prev->prevPhysical)
+ {
+ VMA_VALIDATE(prev->prevPhysical->nextPhysical == prev);
+ }
+ }
+
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(m_GranularityHandler.FinishValidation(validateCtx));
+ }
+
+ VMA_VALIDATE(nextOffset == 0);
+ VMA_VALIDATE(calculatedSize == GetSize());
+ VMA_VALIDATE(calculatedFreeSize == GetSumFreeSize());
+ VMA_VALIDATE(allocCount == m_AllocCount);
+ VMA_VALIDATE(freeCount == m_BlocksFreeCount);
+
+ return true;
+}
+
+void VmaBlockMetadata_TLSF::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+{
+ VmaInitStatInfo(outInfo);
+ outInfo.blockCount = 1;
+ if (m_NullBlock->size > 0)
+ VmaAddStatInfoUnusedRange(outInfo, m_NullBlock->size);
+
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ if (block->IsFree())
+ VmaAddStatInfoUnusedRange(outInfo, block->size);
+ else
+ VmaAddStatInfoAllocation(outInfo, block->size);
+ }
+}
+
+void VmaBlockMetadata_TLSF::AddPoolStats(VmaPoolStats& inoutStats) const
+{
+ inoutStats.size += GetSize();
+ inoutStats.unusedSize += GetSumFreeSize();
+ inoutStats.allocationCount += m_AllocCount;
+ inoutStats.unusedRangeCount += m_BlocksFreeCount;
+ if(m_NullBlock->size > 0)
+ ++inoutStats.unusedRangeCount;
+}
+
+#if VMA_STATS_STRING_ENABLED
+void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json) const
+{
+ size_t blockCount = m_AllocCount + m_BlocksFreeCount;
+ VmaStlAllocator<Block*> allocator(GetAllocationCallbacks());
+ VmaVector<Block*, VmaStlAllocator<Block*>> blockList(blockCount, allocator);
+
+ size_t i = blockCount;
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ blockList[--i] = block;
+ }
+ VMA_ASSERT(i == 0);
+
+ VmaStatInfo stat;
+ CalcAllocationStatInfo(stat);
+
+ PrintDetailedMap_Begin(json,
+ stat.unusedBytes,
+ stat.allocationCount,
+ stat.unusedRangeCount);
+
+ for (; i < blockCount; ++i)
+ {
+ Block* block = blockList[i];
+ if (block->IsFree())
+ PrintDetailedMap_UnusedRange(json, block->offset, block->size);
+ else
+ PrintDetailedMap_Allocation(json, block->offset, block->size, block->PrevFree());
+ }
+ if (m_NullBlock->size > 0)
+ PrintDetailedMap_UnusedRange(json, m_NullBlock->offset, m_NullBlock->size);
+
+ PrintDetailedMap_End(json);
+}
+#endif
+
+bool VmaBlockMetadata_TLSF::CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest)
+{
+ VMA_ASSERT(allocSize > 0 && "Cannot allocate empty block!");
+ VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.");
+
+ // For small granularity round up
+ if (!IsVirtual())
+ m_GranularityHandler.RoundupAllocRequest(allocType, allocSize, allocAlignment);
+
+ // Quick check for too small pool
+ if (allocSize > GetSumFreeSize())
+ return false;
+
+ // If no free blocks in pool then check only null block
+ if (m_BlocksFreeCount == 0)
+ return CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest);
+
+ VkDeviceSize roundedSize = allocSize;
+ if (allocSize >= (1 << SECOND_LEVEL_INDEX))
+ {
+ // Round up to the next block
+ roundedSize += (1ULL << (VMA_BITSCAN_MSB(allocSize) - SECOND_LEVEL_INDEX)) - 1;
+ }
+
+ uint32_t listIndex = 0;
+ Block* block = FindFreeBlock(roundedSize, listIndex);
+ while (block)
+ {
+ if (CheckBlock(*block, listIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ block = block->NextFree();
+ // Region does not meet requirements
+ if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT)
+ break;
+ }
+
+ if ((strategy & VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT) == 0)
+ {
+ // No region in previous bucket, check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ }
+
+ // No other region found, check previous bucket
+ uint32_t prevListIndex = 0;
+ Block* prevListBlock = FindFreeBlock(allocSize, prevListIndex);
+ while (prevListBlock)
+ {
+ if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ prevListBlock = prevListBlock->NextFree();
+ }
+
+ if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT)
+ {
+ // No region in previous bucket, check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ }
+
+ // If all searches failed and first bucket still have some free regions then check it fully
+ while (block)
+ {
+ if (CheckBlock(*block, listIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ block = block->NextFree();
+ }
+
+ // Worst case, if bufferImageGranularity is causing free blocks to become not suitable then full search has to be done
+ if (!IsVirtual() && m_GranularityHandler.IsEnabled())
+ {
+ while (++listIndex < m_ListsCount)
+ {
+ block = m_FreeList[listIndex];
+ while (block)
+ {
+ if (CheckBlock(*block, listIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ block = block->NextFree();
+ }
+ }
+ }
+
+ // No more memory sadly
+ return false;
+}
+
+void VmaBlockMetadata_TLSF::Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData)
+{
+ VMA_ASSERT(request.type == VmaAllocationRequestType::TLSF);
+
+ // Get block and pop it from the free list
+ Block* currentBlock = (Block*)request.allocHandle;
+ VMA_ASSERT(currentBlock != VMA_NULL);
+
+ if (currentBlock != m_NullBlock)
+ RemoveFreeBlock(currentBlock);
+
+ // Append missing alignment to prev block or create new one
+ VMA_ASSERT(currentBlock->offset <= request.algorithmData);
+ VkDeviceSize misssingAlignment = request.algorithmData - currentBlock->offset;
+ if (misssingAlignment)
+ {
+ Block* prevBlock = currentBlock->prevPhysical;
+ VMA_ASSERT(prevBlock != VMA_NULL && "There should be no missing alignment at offset 0!");
+
+ if (prevBlock->IsFree())
+ {
+ uint32_t oldList = GetListIndex(prevBlock->size);
+ prevBlock->size += misssingAlignment;
+ // Check if new size crosses list bucket
+ if (oldList != GetListIndex(prevBlock->size))
+ {
+ prevBlock->size -= misssingAlignment;
+ RemoveFreeBlock(prevBlock);
+ prevBlock->size += misssingAlignment;
+ InsertFreeBlock(prevBlock);
+ }
+ else
+ m_BlocksFreeSize += misssingAlignment;
+ }
+ else
+ {
+ Block* newBlock = m_BlockAllocator.Alloc();
+ currentBlock->prevPhysical = newBlock;
+ prevBlock->nextPhysical = newBlock;
+ newBlock->prevPhysical = prevBlock;
+ newBlock->nextPhysical = currentBlock;
+ newBlock->size = misssingAlignment;
+ newBlock->offset = currentBlock->offset;
+ newBlock->MarkTaken();
+
+ InsertFreeBlock(newBlock);
+ }
+
+ currentBlock->size -= misssingAlignment;
+ currentBlock->offset += misssingAlignment;
+ }
+
+ if (currentBlock->size == request.size)
+ {
+ if (currentBlock == m_NullBlock)
+ {
+ // Setup new null block
+ m_NullBlock = m_BlockAllocator.Alloc();
+ m_NullBlock->size = 0;
+ m_NullBlock->offset = currentBlock->offset + request.size;
+ m_NullBlock->prevPhysical = currentBlock;
+ m_NullBlock->nextPhysical = VMA_NULL;
+ m_NullBlock->MarkFree();
+ m_NullBlock->PrevFree() = VMA_NULL;
+ m_NullBlock->NextFree() = VMA_NULL;
+ currentBlock->nextPhysical = m_NullBlock;
+ currentBlock->MarkTaken();
+ }
+ }
+ else
+ {
+ VMA_ASSERT(currentBlock->size > request.size && "Proper block already found, shouldn't find smaller one!");
+
+ // Create new free block
+ Block* newBlock = m_BlockAllocator.Alloc();
+ newBlock->size = currentBlock->size - request.size;
+ newBlock->offset = currentBlock->offset + request.size;
+ newBlock->prevPhysical = currentBlock;
+ newBlock->nextPhysical = currentBlock->nextPhysical;
+ currentBlock->nextPhysical = newBlock;
+ currentBlock->size = request.size;
+
+ if (currentBlock == m_NullBlock)
+ {
+ m_NullBlock = newBlock;
+ m_NullBlock->MarkFree();
+ m_NullBlock->NextFree() = VMA_NULL;
+ m_NullBlock->PrevFree() = VMA_NULL;
+ currentBlock->MarkTaken();
+ }
+ else
+ {
+ newBlock->nextPhysical->prevPhysical = newBlock;
+ newBlock->MarkTaken();
+ InsertFreeBlock(newBlock);
+ }
+ }
+ currentBlock->UserData() = userData;
+
+ if (!IsVirtual())
+ m_GranularityHandler.AllocPages((uint8_t)(uintptr_t)request.customData,
+ currentBlock->offset, currentBlock->size);
+ ++m_AllocCount;
+}
+
+void VmaBlockMetadata_TLSF::Free(VmaAllocHandle allocHandle)
+{
+ Block* block = (Block*)allocHandle;
+ Block* next = block->nextPhysical;
+ VMA_ASSERT(!block->IsFree() && "Block is already free!");
+
+ if (!IsVirtual())
+ m_GranularityHandler.FreePages(block->offset, block->size);
+ --m_AllocCount;
+
+ // Try merging
+ Block* prev = block->prevPhysical;
+ if (prev != VMA_NULL && prev->IsFree())
+ {
+ RemoveFreeBlock(prev);
+ MergeBlock(block, prev);
+ }
+
+ if (!next->IsFree())
+ InsertFreeBlock(block);
+ else if (next == m_NullBlock)
+ MergeBlock(m_NullBlock, block);
+ else
+ {
+ RemoveFreeBlock(next);
+ MergeBlock(next, block);
+ InsertFreeBlock(next);
+ }
+}
+
+void VmaBlockMetadata_TLSF::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Cannot get allocation info for free block!");
+ outInfo.offset = block->offset;
+ outInfo.size = block->size;
+ outInfo.pUserData = block->UserData();
+}
+
+void VmaBlockMetadata_TLSF::Clear()
+{
+ m_AllocCount = 0;
+ m_BlocksFreeCount = 0;
+ m_BlocksFreeSize = 0;
+ m_IsFree = 0;
+ m_NullBlock->offset = 0;
+ m_NullBlock->size = GetSize();
+ Block* block = m_NullBlock->prevPhysical;
+ m_NullBlock->prevPhysical = VMA_NULL;
+ while (block)
+ {
+ Block* prev = block->prevPhysical;
+ m_BlockAllocator.Free(block);
+ block = prev;
+ }
+ memset(m_FreeList, 0, m_ListsCount * sizeof(Block*));
+ memset(m_InnerIsFree, 0, m_MemoryClasses * sizeof(uint16_t));
+ m_GranularityHandler.Clear();
+}
+
+void VmaBlockMetadata_TLSF::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Trying to set user data for not allocated block!");
+ block->UserData() = userData;
+}
+
+uint8_t VmaBlockMetadata_TLSF::SizeToMemoryClass(VkDeviceSize size) const
+{
+ if (size > SMALL_BUFFER_SIZE)
+ return VMA_BITSCAN_MSB(size) - MEMORY_CLASS_SHIFT;
+ return 0;
+}
+
+uint16_t VmaBlockMetadata_TLSF::SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const
+{
+ if (memoryClass == 0)
+ return static_cast<uint16_t>((size - 1) / 64);
+ return static_cast<uint16_t>((size >> (memoryClass + MEMORY_CLASS_SHIFT - SECOND_LEVEL_INDEX)) ^ (1U << SECOND_LEVEL_INDEX));
+}
+
+uint32_t VmaBlockMetadata_TLSF::GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const
+{
+ if (memoryClass == 0)
+ return secondIndex;
+ return static_cast<uint32_t>(memoryClass - 1) * (1 << SECOND_LEVEL_INDEX) + secondIndex + 4;
+}
+
+uint32_t VmaBlockMetadata_TLSF::GetListIndex(VkDeviceSize size) const
+{
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ return GetListIndex(memoryClass, SizeToSecondIndex(size, memoryClass));
+}
+
+void VmaBlockMetadata_TLSF::RemoveFreeBlock(Block* block)
+{
+ VMA_ASSERT(block != m_NullBlock);
+ VMA_ASSERT(block->IsFree());
+
+ if (block->NextFree() != VMA_NULL)
+ block->NextFree()->PrevFree() = block->PrevFree();
+ if (block->PrevFree() != VMA_NULL)
+ block->PrevFree()->NextFree() = block->NextFree();
+ else
+ {
+ uint8_t memClass = SizeToMemoryClass(block->size);
+ uint16_t secondIndex = SizeToSecondIndex(block->size, memClass);
+ uint32_t index = GetListIndex(memClass, secondIndex);
+ m_FreeList[index] = block->NextFree();
+ if (block->NextFree() == VMA_NULL)
+ {
+ m_InnerIsFree[memClass] &= ~(1U << secondIndex);
+ if (m_InnerIsFree[memClass] == 0)
+ m_IsFree &= ~(1UL << memClass);
+ }
+ }
+ block->MarkTaken();
+ block->UserData() = VMA_NULL;
+ --m_BlocksFreeCount;
+ m_BlocksFreeSize -= block->size;
+}
+
+void VmaBlockMetadata_TLSF::InsertFreeBlock(Block* block)
+{
+ VMA_ASSERT(block != m_NullBlock);
+ VMA_ASSERT(!block->IsFree() && "Cannot insert block twice!");
+
+ uint8_t memClass = SizeToMemoryClass(block->size);
+ uint16_t secondIndex = SizeToSecondIndex(block->size, memClass);
+ uint32_t index = GetListIndex(memClass, secondIndex);
+ block->PrevFree() = VMA_NULL;
+ block->NextFree() = m_FreeList[index];
+ m_FreeList[index] = block;
+ if (block->NextFree() != VMA_NULL)
+ block->NextFree()->PrevFree() = block;
+ else
+ {
+ m_InnerIsFree[memClass] |= 1U << secondIndex;
+ m_IsFree |= 1UL << memClass;
+ }
+ ++m_BlocksFreeCount;
+ m_BlocksFreeSize += block->size;
+}
+
+void VmaBlockMetadata_TLSF::MergeBlock(Block* block, Block* prev)
+{
+ VMA_ASSERT(block->prevPhysical == prev && "Cannot merge seperate physical regions!");
+ VMA_ASSERT(!prev->IsFree() && "Cannot merge block that belongs to free list!");
+
+ block->offset = prev->offset;
+ block->size += prev->size;
+ block->prevPhysical = prev->prevPhysical;
+ if (block->prevPhysical)
+ block->prevPhysical->nextPhysical = block;
+ m_BlockAllocator.Free(prev);
+}
+
+VmaBlockMetadata_TLSF::Block* VmaBlockMetadata_TLSF::FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const
+{
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ uint16_t innerFreeMap = m_InnerIsFree[memoryClass] & (~0U << SizeToSecondIndex(size, memoryClass));
+ if (!innerFreeMap)
+ {
+ // Check higher levels for avaiable blocks
+ uint32_t freeMap = m_IsFree & (~0UL << (memoryClass + 1));
+ if (!freeMap)
+ return VMA_NULL; // No more memory avaible
+
+ // Find lowest free region
+ innerFreeMap = m_InnerIsFree[VMA_BITSCAN_LSB(freeMap)];
+ }
+ // Find lowest free subregion
+ listIndex = GetListIndex(memoryClass, VMA_BITSCAN_LSB(static_cast<uint32_t>(innerFreeMap)));
+ return m_FreeList[listIndex];
+}
+
+bool VmaBlockMetadata_TLSF::CheckBlock(
+ Block& block,
+ uint32_t listIndex,
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ VmaAllocationRequest* pAllocationRequest)
+{
+ VMA_ASSERT(block.IsFree() && "Block is already taken!");
+
+ VkDeviceSize alignedOffset = VmaAlignUp(block.offset, allocAlignment);
+ if (block.size < allocSize + alignedOffset - block.offset)
+ return false;
+
+ // Check for granularity conflicts
+ if (!IsVirtual() &&
+ m_GranularityHandler.IsConflict(allocSize, alignedOffset, block.size, block.offset, allocType))
+ return false;
+
+ // Alloc successful
+ pAllocationRequest->type = VmaAllocationRequestType::TLSF;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)█
+ pAllocationRequest->size = allocSize;
+ pAllocationRequest->customData = (void*)allocType;
+ pAllocationRequest->algorithmData = alignedOffset;
+
+ // Place block at the start of list if it's normal block
+ if (listIndex != m_ListsCount && block.PrevFree())
+ {
+ block.PrevFree()->NextFree() = block.NextFree();
+ if (block.NextFree())
+ block.NextFree()->PrevFree() = block.PrevFree();
+ block.PrevFree() = VMA_NULL;
+ block.NextFree() = m_FreeList[listIndex];
+ m_FreeList[listIndex] = █
+ if (block.NextFree())
+ block.NextFree()->PrevFree() = █
+ }
+
+ return true;
+}
+#endif // _VMA_BLOCK_METADATA_TLSF_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA_TLSF
+
#ifndef _VMA_BLOCK_VECTOR
/*
Sequence of VmaDeviceMemoryBlock. Represents memory blocks allocated for a specific
@@ -9095,6 +10391,7 @@
size_t dstBlockIndex;
VkDeviceSize srcOffset;
VkDeviceSize dstOffset;
+ VmaAllocHandle dstHandle;
VkDeviceSize size;
VmaAllocation hAllocation;
VmaDeviceMemoryBlock* pSrcBlock;
@@ -9264,7 +10561,7 @@
struct FreeSpace
{
- size_t blockInfoIndex; // SIZE_MAX means this structure is invalid.
+ size_t blockInfoIndex; // SIZE_MAX means this structure is invalid.
VkDeviceSize offset;
VkDeviceSize size;
} m_FreeSpaces[MAX_COUNT];
@@ -9538,13 +10835,14 @@
VkResult Init() { return VK_SUCCESS; }
bool IsEmpty() const { return m_Metadata->IsEmpty(); }
- void Free(VkDeviceSize offset) { m_Metadata->FreeAtOffset(offset); }
- void SetAllocationUserData(VkDeviceSize offset, void* userData) { m_Metadata->SetAllocationUserData(offset, userData); }
+ void Free(VmaVirtualAllocation allocation) { m_Metadata->Free((VmaAllocHandle)allocation); }
+ void SetAllocationUserData(VmaVirtualAllocation allocation, void* userData) { m_Metadata->SetAllocationUserData((VmaAllocHandle)allocation, userData); }
void Clear() { m_Metadata->Clear(); }
const VkAllocationCallbacks* GetAllocationCallbacks() const;
- void GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo);
- VkResult Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VkDeviceSize& outOffset);
+ void GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo);
+ VkResult Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation,
+ VkDeviceSize* outOffset);
void CalculateStats(VmaStatInfo& outStatInfo) const;
#if VMA_STATS_STRING_ENABLED
void BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const;
@@ -9563,13 +10861,16 @@
switch (algorithm)
{
case 0:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Generic)(VK_NULL_HANDLE, true);
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Generic)(VK_NULL_HANDLE, 1, true);
break;
case VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Buddy)(VK_NULL_HANDLE, true);
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Buddy)(VK_NULL_HANDLE, 1, true);
break;
case VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT:
- m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Linear)(VK_NULL_HANDLE, true);
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Linear)(VK_NULL_HANDLE, 1, true);
+ break;
+ case VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT:
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_TLSF)(VK_NULL_HANDLE, 1, true);
break;
default:
VMA_ASSERT(0);
@@ -9592,17 +10893,16 @@
return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : VMA_NULL;
}
-void VmaVirtualBlock_T::GetAllocationInfo(VkDeviceSize offset, VmaVirtualAllocationInfo& outInfo)
+void VmaVirtualBlock_T::GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo)
{
- m_Metadata->GetAllocationInfo(offset, outInfo);
+ m_Metadata->GetAllocationInfo((VmaAllocHandle)allocation, outInfo);
}
-VkResult VmaVirtualBlock_T::Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VkDeviceSize& outOffset)
+VkResult VmaVirtualBlock_T::Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation,
+ VkDeviceSize* outOffset)
{
- outOffset = VK_WHOLE_SIZE;
VmaAllocationRequest request = {};
if (m_Metadata->CreateAllocationRequest(
- 1, // bufferImageGranularity
createInfo.size, // allocSize
VMA_MAX(createInfo.alignment, (VkDeviceSize)1), // allocAlignment
(createInfo.flags & VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0, // upperAddress
@@ -9613,9 +10913,12 @@
m_Metadata->Alloc(request,
VMA_SUBALLOCATION_TYPE_UNKNOWN, // type - unimportant
createInfo.pUserData);
- outOffset = request.offset;
+ outAllocation = (VmaVirtualAllocation)request.allocHandle;
+ if(outOffset)
+ *outOffset = m_Metadata->GetAllocationOffset(request.allocHandle);
return VK_SUCCESS;
}
+ outAllocation = (VmaVirtualAllocation)VK_WHOLE_SIZE;
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
@@ -10033,7 +11336,8 @@
VkDeviceMemory newMemory,
VkDeviceSize newSize,
uint32_t id,
- uint32_t algorithm)
+ uint32_t algorithm,
+ VkDeviceSize bufferImageGranularity)
{
VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);
@@ -10046,18 +11350,22 @@
{
case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT:
m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator->GetAllocationCallbacks(),
- false); // isVirtual
+ bufferImageGranularity, false); // isVirtual
break;
case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Buddy)(hAllocator->GetAllocationCallbacks(),
- false); // isVirtual
+ bufferImageGranularity, false); // isVirtual
+ break;
+ case VMA_POOL_CREATE_TLSF_ALGORITHM_BIT:
+ m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_TLSF)(hAllocator->GetAllocationCallbacks(),
+ bufferImageGranularity, false); // isVirtual
break;
default:
VMA_ASSERT(0);
// Fall-through.
case 0:
m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Generic)(hAllocator->GetAllocationCallbacks(),
- false); // isVirtual
+ bufferImageGranularity, false); // isVirtual
}
m_pMetadata->Init(newSize);
}
@@ -10267,7 +11575,7 @@
void VmaAllocation_T::InitBlockAllocation(
VmaDeviceMemoryBlock* block,
- VkDeviceSize offset,
+ VmaAllocHandle allocHandle,
VkDeviceSize alignment,
VkDeviceSize size,
uint32_t memoryTypeIndex,
@@ -10283,7 +11591,7 @@
m_MapCount = mapped ? MAP_COUNT_FLAG_PERSISTENT_MAP : 0;
m_SuballocationType = (uint8_t)suballocationType;
m_BlockAllocation.m_Block = block;
- m_BlockAllocation.m_Offset = offset;
+ m_BlockAllocation.m_AllocHandle = allocHandle;
}
void VmaAllocation_T::InitDedicatedAllocation(
@@ -10331,7 +11639,7 @@
void VmaAllocation_T::ChangeBlockAllocation(
VmaAllocator hAllocator,
VmaDeviceMemoryBlock* block,
- VkDeviceSize offset)
+ VmaAllocHandle allocHandle)
{
VMA_ASSERT(block != VMA_NULL);
VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
@@ -10347,13 +11655,27 @@
}
m_BlockAllocation.m_Block = block;
- m_BlockAllocation.m_Offset = offset;
+ m_BlockAllocation.m_AllocHandle = allocHandle;
}
-void VmaAllocation_T::ChangeOffset(VkDeviceSize newOffset)
+void VmaAllocation_T::ChangeAllocHandle(VmaAllocHandle newAllocHandle)
{
VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
- m_BlockAllocation.m_Offset = newOffset;
+ m_BlockAllocation.m_AllocHandle = newAllocHandle;
+}
+
+VmaAllocHandle VmaAllocation_T::GetAllocHandle() const
+{
+ switch (m_Type)
+ {
+ case ALLOCATION_TYPE_BLOCK:
+ return m_BlockAllocation.m_AllocHandle;
+ case ALLOCATION_TYPE_DEDICATED:
+ return VMA_NULL;
+ default:
+ VMA_ASSERT(0);
+ return VMA_NULL;
+ }
}
VkDeviceSize VmaAllocation_T::GetOffset() const
@@ -10361,7 +11683,7 @@
switch (m_Type)
{
case ALLOCATION_TYPE_BLOCK:
- return m_BlockAllocation.m_Offset;
+ return m_BlockAllocation.m_Block->m_pMetadata->GetAllocationOffset(m_BlockAllocation.m_AllocHandle);
case ALLOCATION_TYPE_DEDICATED:
return 0;
default:
@@ -10407,7 +11729,7 @@
{
void* pBlockData = m_BlockAllocation.m_Block->GetMappedData();
VMA_ASSERT(pBlockData != VMA_NULL);
- return (char*)pBlockData + m_BlockAllocation.m_Offset;
+ return (char*)pBlockData + GetOffset();
}
else
{
@@ -10941,7 +12263,7 @@
pBlock->Unmap(m_hAllocator, 1);
}
- pBlock->m_pMetadata->FreeAtOffset(hAllocation->GetOffset());
+ pBlock->m_pMetadata->Free(hAllocation->GetAllocHandle());
VMA_HEAVY_ASSERT(pBlock->Validate());
VMA_DEBUG_LOG(" Freed from MemoryTypeIndex=%u", m_MemoryTypeIndex);
@@ -11043,7 +12365,6 @@
VmaAllocationRequest currRequest = {};
if (pBlock->m_pMetadata->CreateAllocationRequest(
- m_BufferImageGranularity,
size,
alignment,
isUpperAddress,
@@ -11066,7 +12387,7 @@
UpdateHasEmptyBlock();
(*pAllocation)->InitBlockAllocation(
pBlock,
- currRequest.offset,
+ currRequest.allocHandle,
alignment,
currRequest.size, // Not size, as actual allocation size may be larger than requested!
m_MemoryTypeIndex,
@@ -11081,7 +12402,7 @@
}
if (IsCorruptionDetectionEnabled())
{
- VkResult res = pBlock->WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, currRequest.size);
+ VkResult res = pBlock->WriteMagicValueAroundAllocation(m_hAllocator, (*pAllocation)->GetOffset(), currRequest.size);
VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
}
return VK_SUCCESS;
@@ -11143,7 +12464,8 @@
mem,
allocInfo.allocationSize,
m_NextBlockId++,
- m_Algorithm);
+ m_Algorithm,
+ m_BufferImageGranularity);
m_Blocks.push_back(pBlock);
if (pNewBlockIndex != VMA_NULL)
@@ -11638,8 +12960,8 @@
{
const VmaDefragmentationMove& move = pCtx->defragmentationMoves[i];
- move.pSrcBlock->m_pMetadata->FreeAtOffset(move.srcOffset);
- move.hAllocation->ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstOffset);
+ move.pSrcBlock->m_pMetadata->Free(move.hAllocation->GetAllocHandle());
+ move.hAllocation->ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstHandle);
}
pCtx->defragmentationMovesCommitted = pCtx->defragmentationMovesProcessed;
@@ -11841,9 +13163,9 @@
for (size_t dstBlockIndex = 0; dstBlockIndex <= srcBlockIndex; ++dstBlockIndex)
{
BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];
+ VmaBlockMetadata* pMetadata = pDstBlockInfo->m_pBlock->m_pMetadata;
VmaAllocationRequest dstAllocRequest;
- if (pDstBlockInfo->m_pBlock->m_pMetadata->CreateAllocationRequest(
- m_pBlockVector->GetBufferImageGranularity(),
+ if (pMetadata->CreateAllocationRequest(
size,
alignment,
false, // upperAddress
@@ -11851,7 +13173,7 @@
strategy,
&dstAllocRequest) &&
MoveMakesSense(
- dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))
+ dstBlockIndex, pMetadata->GetAllocationOffset(dstAllocRequest.allocHandle), srcBlockIndex, srcOffset))
{
// Reached limit on number of allocations or bytes to move.
if ((m_AllocationsMoved + 1 > maxAllocationsToMove) ||
@@ -11864,11 +13186,12 @@
move.srcBlockIndex = pSrcBlockInfo->m_OriginalBlockIndex;
move.dstBlockIndex = pDstBlockInfo->m_OriginalBlockIndex;
move.srcOffset = srcOffset;
- move.dstOffset = dstAllocRequest.offset;
+ move.dstOffset = pMetadata->GetAllocationOffset(dstAllocRequest.allocHandle);
move.size = size;
move.hAllocation = allocInfo.m_hAllocation;
move.pSrcBlock = pSrcBlockInfo->m_pBlock;
move.pDstBlock = pDstBlockInfo->m_pBlock;
+ move.dstHandle = dstAllocRequest.allocHandle;
moves.push_back(move);
@@ -11876,8 +13199,8 @@
if (freeOldAllocations)
{
- pSrcBlockInfo->m_pBlock->m_pMetadata->FreeAtOffset(srcOffset);
- allocInfo.m_hAllocation->ChangeBlockAllocation(m_hAllocator, pDstBlockInfo->m_pBlock, dstAllocRequest.offset);
+ pSrcBlockInfo->m_pBlock->m_pMetadata->Free(allocInfo.m_hAllocation->GetAllocHandle());
+ allocInfo.m_hAllocation->ChangeBlockAllocation(m_hAllocator, pDstBlockInfo->m_pBlock, dstAllocRequest.allocHandle);
}
if (allocInfo.m_pChanged != VMA_NULL)
@@ -12081,7 +13404,7 @@
}
VkResult VmaDefragmentationAlgorithm_Fast::Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
+ VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>>& moves,
VkDeviceSize maxBytesToMove,
uint32_t maxAllocationsToMove,
VmaDefragmentationFlags flags)
@@ -12160,7 +13483,7 @@
VmaSuballocation suballoc = *srcSuballocIt;
suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeOffset(dstAllocOffset);
+ ((VmaAllocation)(suballoc.userData))->ChangeAllocHandle((VmaAllocHandle)dstAllocOffset);
m_BytesMoved += srcAllocSize;
++m_AllocationsMoved;
@@ -12175,6 +13498,7 @@
move.dstBlockIndex = freeSpaceOrigBlockIndex;
move.srcOffset = srcAllocOffset;
move.dstOffset = dstAllocOffset;
+ move.dstHandle = (VmaAllocHandle)dstAllocOffset;
move.size = srcAllocSize;
moves.push_back(move);
@@ -12188,7 +13512,7 @@
VmaSuballocation suballoc = *srcSuballocIt;
suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);
+ ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, (VmaAllocHandle)dstAllocOffset);
m_BytesMoved += srcAllocSize;
++m_AllocationsMoved;
@@ -12203,6 +13527,7 @@
move.dstBlockIndex = freeSpaceOrigBlockIndex;
move.srcOffset = srcAllocOffset;
move.dstOffset = dstAllocOffset;
+ move.dstHandle = (VmaAllocHandle)dstAllocOffset;
move.size = srcAllocSize;
moves.push_back(move);
@@ -12254,7 +13579,7 @@
else
{
srcSuballocIt->offset = dstAllocOffset;
- ((VmaAllocation)(srcSuballocIt->userData))->ChangeOffset(dstAllocOffset);
+ ((VmaAllocation)(srcSuballocIt->userData))->ChangeAllocHandle((VmaAllocHandle)dstAllocOffset);
dstOffset = dstAllocOffset + srcAllocSize;
m_BytesMoved += srcAllocSize;
++m_AllocationsMoved;
@@ -12264,6 +13589,7 @@
move.dstBlockIndex = dstOrigBlockIndex;
move.srcOffset = srcAllocOffset;
move.dstOffset = dstAllocOffset;
+ move.dstHandle = (VmaAllocHandle)dstAllocOffset;
move.size = srcAllocSize;
moves.push_back(move);
@@ -12279,7 +13605,7 @@
VmaSuballocation suballoc = *srcSuballocIt;
suballoc.offset = dstAllocOffset;
- ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);
+ ((VmaAllocation)(suballoc.userData))->ChangeBlockAllocation(m_hAllocator, pDstBlock, (VmaAllocHandle)dstAllocOffset);
dstOffset = dstAllocOffset + srcAllocSize;
m_BytesMoved += srcAllocSize;
++m_AllocationsMoved;
@@ -12295,6 +13621,7 @@
move.dstBlockIndex = dstOrigBlockIndex;
move.srcOffset = srcAllocOffset;
move.dstOffset = dstAllocOffset;
+ move.dstHandle = (VmaAllocHandle)dstAllocOffset;
move.size = srcAllocSize;
moves.push_back(move);
@@ -15668,7 +16995,11 @@
allocator->Unmap(allocation);
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation(
+ VmaAllocator allocator,
+ VmaAllocation allocation,
+ VkDeviceSize offset,
+ VkDeviceSize size)
{
VMA_ASSERT(allocator && allocation);
@@ -15681,7 +17012,11 @@
return res;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation(
+ VmaAllocator allocator,
+ VmaAllocation allocation,
+ VkDeviceSize offset,
+ VkDeviceSize size)
{
VMA_ASSERT(allocator && allocation);
@@ -15744,7 +17079,9 @@
return res;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(VmaAllocator allocator, uint32_t memoryTypeBits)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(
+ VmaAllocator allocator,
+ uint32_t memoryTypeBits)
{
VMA_ASSERT(allocator);
@@ -16306,29 +17643,33 @@
}
VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VkDeviceSize offset, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
+ VmaVirtualAllocation VMA_NOT_NULL allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
{
VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pVirtualAllocInfo != VMA_NULL);
VMA_DEBUG_LOG("vmaGetVirtualAllocationInfo");
VMA_DEBUG_GLOBAL_MUTEX_LOCK;
- virtualBlock->GetAllocationInfo(offset, *pVirtualAllocInfo);
+ virtualBlock->GetAllocationInfo(allocation, *pVirtualAllocInfo);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VkDeviceSize* VMA_NOT_NULL pOffset)
+ const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation* VMA_NOT_NULL pAllocation,
+ VkDeviceSize* VMA_NULLABLE pOffset)
{
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pOffset != VMA_NULL);
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pAllocation != VMA_NULL);
VMA_DEBUG_LOG("vmaVirtualAllocate");
VMA_DEBUG_GLOBAL_MUTEX_LOCK;
- return virtualBlock->Allocate(*pCreateInfo, *pOffset);
+ return virtualBlock->Allocate(*pCreateInfo, *pAllocation, pOffset);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VkDeviceSize offset)
+VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation VMA_NULLABLE allocation)
{
- VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
- VMA_DEBUG_LOG("vmaVirtualFree");
- VMA_DEBUG_GLOBAL_MUTEX_LOCK;
- virtualBlock->Free(offset);
+ if(virtualBlock != VMA_NULL)
+ {
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_LOG("vmaVirtualFree");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->Free(allocation);
+ }
}
VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(VmaVirtualBlock VMA_NOT_NULL virtualBlock)
@@ -16340,12 +17681,12 @@
}
VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
- VkDeviceSize offset, void* VMA_NULLABLE pUserData)
+ VmaVirtualAllocation VMA_NOT_NULL allocation, void* VMA_NULLABLE pUserData)
{
VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
VMA_DEBUG_LOG("vmaSetVirtualAllocationUserData");
VMA_DEBUG_GLOBAL_MUTEX_LOCK;
- virtualBlock->SetAllocationUserData(offset, pUserData);
+ virtualBlock->SetAllocationUserData(allocation, pUserData);
}
VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStats(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
@@ -17586,14 +18927,14 @@
#VmaVirtualBlock object contains internal data structure that keeps track of free and occupied regions
using the same code as the main Vulkan memory allocator.
-However, there is no "virtual allocation" object.
-When you request a new allocation, a `VkDeviceSize` number is returned.
-It is an offset inside the block where the allocation has been placed, but it also uniquely identifies the allocation within this block.
+Similarly to #VmaAllocation for standard GPU allocations, there is #VmaVirtualAllocation type
+that represents an opaque handle to an allocation withing the virtual block.
-In order to make an allocation:
+In order to make such allocation:
-# Fill in #VmaVirtualAllocationCreateInfo structure.
--# Call vmaVirtualAllocate(). Get new `VkDeviceSize offset` that identifies the allocation.
+-# Call vmaVirtualAllocate(). Get new #VmaVirtualAllocation object that represents the allocation.
+ You can also receive `VkDeviceSize offset` that was assigned to the allocation.
Example:
@@ -17601,11 +18942,12 @@
VmaVirtualAllocationCreateInfo allocCreateInfo = {};
allocCreateInfo.size = 4096; // 4 KB
-VkDeviceSize allocOffset;
-res = vmaVirtualAllocate(block, &allocCreateInfo, &allocOffset);
+VmaVirtualAllocation alloc;
+VkDeviceSize offset;
+res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, &offset);
if(res == VK_SUCCESS)
{
- // Use the 4 KB of your memory starting at allocOffset.
+ // Use the 4 KB of your memory starting at offset.
}
else
{
@@ -17616,8 +18958,8 @@
\section virtual_allocator_deallocation Deallocation
When no longer needed, an allocation can be freed by calling vmaVirtualFree().
-You can only pass to this function the exact offset that was previously returned by vmaVirtualAllocate()
-and not any other location within the memory.
+You can only pass to this function an allocation that was previously returned by vmaVirtualAllocate()
+called for the same #VmaVirtualBlock.
When whole block is no longer needed, the block object can be released by calling vmaDestroyVirtualBlock().
All allocations must be freed before the block is destroyed, which is checked internally by an assert.
@@ -17625,7 +18967,7 @@
a feature not available in normal Vulkan memory allocator. Example:
\code
-vmaVirtualFree(block, allocOffset);
+vmaVirtualFree(block, alloc);
vmaDestroyVirtualBlock(block);
\endcode
@@ -17643,20 +18985,20 @@
};
CustomAllocData* allocData = new CustomAllocData();
allocData->m_AllocName = "My allocation 1";
-vmaSetVirtualAllocationUserData(block, allocOffset, allocData);
+vmaSetVirtualAllocationUserData(block, alloc, allocData);
\endcode
-The pointer can later be fetched, along with allocation size, by passing the allocation offset to function
+The pointer can later be fetched, along with allocation offset and size, by passing the allocation handle to function
vmaGetVirtualAllocationInfo() and inspecting returned structure #VmaVirtualAllocationInfo.
If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation!
Example:
\code
VmaVirtualAllocationInfo allocInfo;
-vmaGetVirtualAllocationInfo(block, allocOffset, &allocInfo);
+vmaGetVirtualAllocationInfo(block, alloc, &allocInfo);
delete (CustomAllocData*)allocInfo.pUserData;
-vmaVirtualFree(block, allocOffset);
+vmaVirtualFree(block, alloc);
\endcode
\section virtual_allocator_alignment_and_units Alignment and units
@@ -17670,8 +19012,8 @@
allocCreateInfo.size = 4096; // 4 KB
allocCreateInfo.alignment = 4; // Returned offset must be a multiply of 4 B
-VkDeviceSize allocOffset;
-res = vmaVirtualAllocate(block, &allocCreateInfo, &allocOffset);
+VmaVirtualAllocation alloc;
+res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, nullptr);
\endcode
Alignments of different allocations made from one block may vary.
@@ -17681,7 +19023,7 @@
- VmaVirtualBlockCreateInfo::size
- VmaVirtualAllocationCreateInfo::size and VmaVirtualAllocationCreateInfo::alignment
-- Using offset returned by vmaVirtualAllocate()
+- Using offset returned by vmaVirtualAllocate() or in VmaVirtualAllocationInfo::offset
\section virtual_allocator_statistics Statistics
diff --git a/src/Tests.cpp b/src/Tests.cpp
index 1ce4ad4..c937c71 100644
--- a/src/Tests.cpp
+++ b/src/Tests.cpp
@@ -75,6 +75,8 @@
return "Linear";
case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
return "Buddy";
+ case VMA_POOL_CREATE_TLSF_ALGORITHM_BIT:
+ return "TLSF";
case 0:
return "Default";
default:
@@ -2677,6 +2679,7 @@
const VkDeviceSize blockSize = 16 * MEGABYTE;
const VkDeviceSize alignment = 256;
+ VkDeviceSize offset;
// # Create block 16 MB
@@ -2686,50 +2689,55 @@
VmaVirtualBlock block;
TEST(vmaCreateVirtualBlock(&blockCreateInfo, &block) == VK_SUCCESS && block);
- // # Allocate 8 MB
+ // # Allocate 8 MB (also fetch offset from the allocation)
VmaVirtualAllocationCreateInfo allocCreateInfo = {};
allocCreateInfo.alignment = alignment;
allocCreateInfo.pUserData = (void*)(uintptr_t)1;
allocCreateInfo.size = 8 * MEGABYTE;
- VkDeviceSize alloc0Offset;
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &alloc0Offset) == VK_SUCCESS);
- TEST(alloc0Offset < blockSize);
+ VmaVirtualAllocation allocation0;
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation0, &offset) == VK_SUCCESS);
// # Validate the allocation
- VmaVirtualAllocationInfo allocInfo = {};
- vmaGetVirtualAllocationInfo(block, alloc0Offset, &allocInfo);
- TEST(allocInfo.size == allocCreateInfo.size);
- TEST(allocInfo.pUserData = allocCreateInfo.pUserData);
+ VmaVirtualAllocationInfo allocInfo0 = {};
+ vmaGetVirtualAllocationInfo(block, allocation0, &allocInfo0);
+ TEST(allocInfo0.offset < blockSize);
+ TEST(allocInfo0.offset == offset);
+ TEST(allocInfo0.size == allocCreateInfo.size);
+ TEST(allocInfo0.pUserData = allocCreateInfo.pUserData);
// # Check SetUserData
- vmaSetVirtualAllocationUserData(block, alloc0Offset, (void*)(uintptr_t)2);
- vmaGetVirtualAllocationInfo(block, alloc0Offset, &allocInfo);
- TEST(allocInfo.pUserData = (void*)(uintptr_t)2);
+ vmaSetVirtualAllocationUserData(block, allocation0, (void*)(uintptr_t)2);
+ vmaGetVirtualAllocationInfo(block, allocation0, &allocInfo0);
+ TEST(allocInfo0.pUserData = (void*)(uintptr_t)2);
- // # Allocate 4 MB
+ // # Allocate 4 MB (also test passing null as pOffset during allocation)
allocCreateInfo.size = 4 * MEGABYTE;
- UINT64 alloc1Offset;
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &alloc1Offset) == VK_SUCCESS);
- TEST(alloc1Offset < blockSize);
- TEST(alloc1Offset + 4 * MEGABYTE <= alloc0Offset || alloc0Offset + 8 * MEGABYTE <= alloc1Offset); // Check if they don't overlap.
+ VmaVirtualAllocation allocation1;
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation1, nullptr) == VK_SUCCESS);
+ VmaVirtualAllocationInfo allocInfo1 = {};
+ vmaGetVirtualAllocationInfo(block, allocation1, &allocInfo1);
+ TEST(allocInfo1.offset < blockSize);
+ TEST(allocInfo1.offset + 4 * MEGABYTE <= allocInfo0.offset || allocInfo0.offset + 8 * MEGABYTE <= allocInfo1.offset); // Check if they don't overlap.
// # Allocate another 8 MB - it should fail
allocCreateInfo.size = 8 * MEGABYTE;
- UINT64 alloc2Offset;
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &alloc2Offset) < 0);
- TEST(alloc2Offset == VK_WHOLE_SIZE);
+ VmaVirtualAllocation allocation2;
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation2, nullptr) < 0);
+ TEST(allocation2 == (VmaVirtualAllocation)VK_WHOLE_SIZE);
// # Free the 4 MB block. Now allocation of 8 MB should succeed.
- vmaVirtualFree(block, alloc1Offset);
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &alloc2Offset) == VK_SUCCESS);
- TEST(alloc2Offset < blockSize);
- TEST(alloc2Offset + 4 * MEGABYTE <= alloc0Offset || alloc0Offset + 8 * MEGABYTE <= alloc2Offset); // Check if they don't overlap.
+ vmaVirtualFree(block, allocation1);
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation2, nullptr) == VK_SUCCESS);
+ VmaVirtualAllocationInfo allocInfo2 = {};
+ vmaGetVirtualAllocationInfo(block, allocation2, &allocInfo2);
+ TEST(allocInfo2.offset < blockSize);
+ TEST(allocInfo2.offset + 4 * MEGABYTE <= allocInfo0.offset || allocInfo0.offset + 8 * MEGABYTE <= allocInfo2.offset); // Check if they don't overlap.
// # Calculate statistics
@@ -2753,34 +2761,36 @@
// # Free alloc0, leave alloc2 unfreed.
- vmaVirtualFree(block, alloc0Offset);
+ vmaVirtualFree(block, allocation0);
// # Test alignment
{
constexpr size_t allocCount = 10;
- VkDeviceSize allocOffset[allocCount] = {};
+ VmaVirtualAllocation allocations[allocCount] = {};
for(size_t i = 0; i < allocCount; ++i)
{
const bool alignment0 = i == allocCount - 1;
allocCreateInfo.size = i * 3 + 15;
allocCreateInfo.alignment = alignment0 ? 0 : 8;
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocOffset[i]) == VK_SUCCESS);
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocations[i], nullptr) == VK_SUCCESS);
if(!alignment0)
{
- TEST(allocOffset[i] % allocCreateInfo.alignment == 0);
+ VmaVirtualAllocationInfo info;
+ vmaGetVirtualAllocationInfo(block, allocations[i], &info);
+ TEST(info.offset % allocCreateInfo.alignment == 0);
}
}
for(size_t i = allocCount; i--; )
{
- vmaVirtualFree(block, allocOffset[i]);
+ vmaVirtualFree(block, allocations[i]);
}
}
// # Final cleanup
- vmaVirtualFree(block, alloc2Offset);
+ vmaVirtualFree(block, allocation2);
vmaDestroyVirtualBlock(block);
{
@@ -2792,8 +2802,8 @@
for(size_t i = 0; i < 8; ++i)
{
- VkDeviceSize offset = 0;
- TEST(vmaVirtualAllocate(block, &allocCreateInfo, &offset) == VK_SUCCESS);
+ VmaVirtualAllocation allocation;
+ TEST(vmaVirtualAllocate(block, &allocCreateInfo, &allocation, nullptr) == VK_SUCCESS);
}
vmaClearVirtualBlock(block);
@@ -2808,7 +2818,7 @@
RandomNumberGenerator rand{3454335};
auto calcRandomAllocSize = [&rand]() -> VkDeviceSize { return rand.Generate() % 20 + 5; };
- for(size_t algorithmIndex = 0; algorithmIndex < 3; ++algorithmIndex)
+ for(size_t algorithmIndex = 0; algorithmIndex < 4; ++algorithmIndex)
{
// Create the block
VmaVirtualBlockCreateInfo blockCreateInfo = {};
@@ -2818,6 +2828,7 @@
{
case 1: blockCreateInfo.flags = VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT; break;
case 2: blockCreateInfo.flags = VMA_VIRTUAL_BLOCK_CREATE_BUDDY_ALGORITHM_BIT; break;
+ case 3: blockCreateInfo.flags = VMA_VIRTUAL_BLOCK_CREATE_TLSF_ALGORITHM_BIT; break;
}
VmaVirtualBlock block = nullptr;
VkResult res = vmaCreateVirtualBlock(&blockCreateInfo, &block);
@@ -2825,7 +2836,8 @@
struct AllocData
{
- VkDeviceSize offset, requestedSize, allocationSize;
+ VmaVirtualAllocation allocation;
+ VkDeviceSize allocOffset, requestedSize, allocationSize;
};
std::vector<AllocData> allocations;
@@ -2843,12 +2855,13 @@
AllocData alloc = {};
alloc.requestedSize = allocCreateInfo.size;
- res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.offset);
+ res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.allocation, nullptr);
TEST(res == VK_SUCCESS);
VmaVirtualAllocationInfo allocInfo;
- vmaGetVirtualAllocationInfo(block, alloc.offset, &allocInfo);
+ vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
TEST(allocInfo.size >= allocCreateInfo.size);
+ alloc.allocOffset = allocInfo.offset;
alloc.allocationSize = allocInfo.size;
allocations.push_back(alloc);
@@ -2858,7 +2871,7 @@
for(size_t i = 0; i < 5; ++i)
{
const size_t index = rand.Generate() % allocations.size();
- vmaVirtualFree(block, allocations[index].offset);
+ vmaVirtualFree(block, allocations[index].allocation);
allocations.erase(allocations.begin() + index);
}
@@ -2871,12 +2884,13 @@
AllocData alloc = {};
alloc.requestedSize = allocCreateInfo.size;
- res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.offset);
+ res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.allocation, nullptr);
TEST(res == VK_SUCCESS);
VmaVirtualAllocationInfo allocInfo;
- vmaGetVirtualAllocationInfo(block, alloc.offset, &allocInfo);
+ vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
TEST(allocInfo.size >= allocCreateInfo.size);
+ alloc.allocOffset = allocInfo.offset;
alloc.allocationSize = allocInfo.size;
allocations.push_back(alloc);
@@ -2892,13 +2906,14 @@
AllocData alloc = {};
alloc.requestedSize = allocCreateInfo.size;
- res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.offset);
+ res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc.allocation, nullptr);
TEST(res == VK_SUCCESS);
- TEST(alloc.offset % 16 == 0);
VmaVirtualAllocationInfo allocInfo;
- vmaGetVirtualAllocationInfo(block, alloc.offset, &allocInfo);
+ vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
+ TEST(allocInfo.offset % 16 == 0);
TEST(allocInfo.size >= allocCreateInfo.size);
+ alloc.allocOffset = allocInfo.offset;
alloc.allocationSize = allocInfo.size;
allocations.push_back(alloc);
@@ -2906,21 +2921,21 @@
// Check if the allocations don't overlap
std::sort(allocations.begin(), allocations.end(), [](const AllocData& lhs, const AllocData& rhs) {
- return lhs.offset < rhs.offset; });
+ return lhs.allocOffset < rhs.allocOffset; });
for(size_t i = 0; i < allocations.size() - 1; ++i)
{
- TEST(allocations[i+1].offset >= allocations[i].offset + allocations[i].allocationSize);
+ TEST(allocations[i+1].allocOffset >= allocations[i].allocOffset + allocations[i].allocationSize);
}
// Check pUserData
{
const AllocData& alloc = allocations.back();
VmaVirtualAllocationInfo allocInfo = {};
- vmaGetVirtualAllocationInfo(block, alloc.offset, &allocInfo);
+ vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
TEST((uintptr_t)allocInfo.pUserData == alloc.requestedSize * 10);
- vmaSetVirtualAllocationUserData(block, alloc.offset, (void*)(uintptr_t)666);
- vmaGetVirtualAllocationInfo(block, alloc.offset, &allocInfo);
+ vmaSetVirtualAllocationUserData(block, alloc.allocation, (void*)(uintptr_t)666);
+ vmaGetVirtualAllocationInfo(block, alloc.allocation, &allocInfo);
TEST((uintptr_t)allocInfo.pUserData == 666);
}
@@ -4229,7 +4244,7 @@
for(uint32_t emptyIndex = 0; emptyIndex < emptyCount; ++emptyIndex)
{
- for(uint32_t algorithmIndex = 0; algorithmIndex < 3; ++algorithmIndex)
+ for(uint32_t algorithmIndex = 0; algorithmIndex < 4; ++algorithmIndex)
{
uint32_t algorithm = 0;
switch(algorithmIndex)
@@ -4242,6 +4257,9 @@
case 2:
algorithm = VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT;
break;
+ case 3:
+ algorithm = VMA_POOL_CREATE_TLSF_ALGORITHM_BIT;
+ break;
default:
assert(0);
}