Added helper structs: CALLOCATION_DESC, CPOOL_DESC, CVIRTUAL_BLOCK_DESC, CVIRTUAL_ALLOCATION_DESC

Used them throughout the sample app, tests, and some parts of the documentation.
Added documentation section about them.
Other improvements in the documentation.
Also added macros D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS, D3D12MA_RECOMMENDED_HEAP_FLAGS, D3D12MA_RECOMMENDED_POOL_FLAGS.
Rebuilt the documentation.
diff --git a/docs/html/_d3_d12_mem_alloc_8h.html b/docs/html/_d3_d12_mem_alloc_8h.html
index 3ddeda1..0783eca 100644
--- a/docs/html/_d3_d12_mem_alloc_8h.html
+++ b/docs/html/_d3_d12_mem_alloc_8h.html
@@ -166,6 +166,18 @@
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html">D3D12MA::VirtualBlock</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory.  <a href="class_d3_d12_m_a_1_1_virtual_block.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::CVIRTUAL_BLOCK_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
 Namespaces</h2></td></tr>
@@ -174,11 +186,22 @@
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
 Macros</h2></td></tr>
-<tr class="memitem:aa623643886b8481adb32017e5c748b50" id="r_aa623643886b8481adb32017e5c748b50"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa623643886b8481adb32017e5c748b50">D3D12MA_DXGI_1_4</a>&#160;&#160;&#160;0</td></tr>
+<tr class="memitem:aa623643886b8481adb32017e5c748b50" id="r_aa623643886b8481adb32017e5c748b50"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa623643886b8481adb32017e5c748b50">D3D12MA_DXGI_1_4</a>&#160;&#160;&#160;1</td></tr>
+<tr class="memdesc:aa623643886b8481adb32017e5c748b50"><td class="mdescLeft">&#160;</td><td class="mdescRight">Define this macro to 0 to disable usage of DXGI 1.4 (which is used for IDXGIAdapter3 and query for memory budget).  <br /></td></tr>
 <tr class="separator:aa623643886b8481adb32017e5c748b50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6df70df4d9e792713418dd4062b07c3a" id="r_a6df70df4d9e792713418dd4062b07c3a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6df70df4d9e792713418dd4062b07c3a">D3D12MA_CREATE_NOT_ZEROED_AVAILABLE</a>&#160;&#160;&#160;1</td></tr>
+<tr class="separator:a6df70df4d9e792713418dd4062b07c3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ad04069a2e2bbc53b7d65f85a04a2dcbc" id="r_ad04069a2e2bbc53b7d65f85a04a2dcbc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad04069a2e2bbc53b7d65f85a04a2dcbc">D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT</a>&#160;&#160;&#160;1</td></tr>
 <tr class="memdesc:ad04069a2e2bbc53b7d65f85a04a2dcbc"><td class="mdescLeft">&#160;</td><td class="mdescRight">When defined to value other than 0, the library will try to use <code>D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT</code> or <code>D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT</code> for created textures when possible, which can save memory because some small textures may get their alignment 4 KB and their size a multiply of 4 KB instead of 64 KB.  <br /></td></tr>
 <tr class="separator:ad04069a2e2bbc53b7d65f85a04a2dcbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accfbeae642feeacf353ce695e91a5e73" id="r_accfbeae642feeacf353ce695e91a5e73"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#accfbeae642feeacf353ce695e91a5e73">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a>&#160;&#160;&#160;(ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED | ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)</td></tr>
+<tr class="memdesc:accfbeae642feeacf353ce695e91a5e73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of flags recommended for use in <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3" title="Flags for the entire allocator.">D3D12MA::ALLOCATOR_DESC::Flags</a> for optimal performance.  <br /></td></tr>
+<tr class="separator:accfbeae642feeacf353ce695e91a5e73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac3d50f134ad24c58df4a934b87847653" id="r_ac3d50f134ad24c58df4a934b87847653"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a>&#160;&#160;&#160;(D3D12_HEAP_FLAG_NONE)</td></tr>
+<tr class="separator:ac3d50f134ad24c58df4a934b87847653"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2679d8c9f6d900168bb45450bc88998b" id="r_a2679d8c9f6d900168bb45450bc88998b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a>&#160;&#160;&#160;(POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)</td></tr>
+<tr class="memdesc:a2679d8c9f6d900168bb45450bc88998b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set of flags recommended for use in <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags for the heap.">D3D12MA::POOL_DESC::Flags</a> for optimal performance.  <br /></td></tr>
+<tr class="separator:a2679d8c9f6d900168bb45450bc88998b"><td class="memSeparator" colspan="2">&#160;</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>
@@ -278,6 +301,20 @@
 <tr class="separator:ab024647ae85ee63e2fa2c1c4beac6d98"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a6df70df4d9e792713418dd4062b07c3a" name="a6df70df4d9e792713418dd4062b07c3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6df70df4d9e792713418dd4062b07c3a">&#9670;&#160;</a></span>D3D12MA_CREATE_NOT_ZEROED_AVAILABLE</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define D3D12MA_CREATE_NOT_ZEROED_AVAILABLE&#160;&#160;&#160;1</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
 <a id="aa623643886b8481adb32017e5c748b50" name="aa623643886b8481adb32017e5c748b50"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#aa623643886b8481adb32017e5c748b50">&#9670;&#160;</a></span>D3D12MA_DXGI_1_4</h2>
 
@@ -285,11 +322,59 @@
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">#define D3D12MA_DXGI_1_4&#160;&#160;&#160;0</td>
+          <td class="memname">#define D3D12MA_DXGI_1_4&#160;&#160;&#160;1</td>
         </tr>
       </table>
 </div><div class="memdoc">
 
+<p>Define this macro to 0 to disable usage of DXGI 1.4 (which is used for IDXGIAdapter3 and query for memory budget). </p>
+
+</div>
+</div>
+<a id="accfbeae642feeacf353ce695e91a5e73" name="accfbeae642feeacf353ce695e91a5e73"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accfbeae642feeacf353ce695e91a5e73">&#9670;&#160;</a></span>D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS&#160;&#160;&#160;(ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED | ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set of flags recommended for use in <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3" title="Flags for the entire allocator.">D3D12MA::ALLOCATOR_DESC::Flags</a> for optimal performance. </p>
+
+</div>
+</div>
+<a id="ac3d50f134ad24c58df4a934b87847653" name="ac3d50f134ad24c58df4a934b87847653"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac3d50f134ad24c58df4a934b87847653">&#9670;&#160;</a></span>D3D12MA_RECOMMENDED_HEAP_FLAGS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define D3D12MA_RECOMMENDED_HEAP_FLAGS&#160;&#160;&#160;(D3D12_HEAP_FLAG_NONE)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2679d8c9f6d900168bb45450bc88998b" name="a2679d8c9f6d900168bb45450bc88998b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2679d8c9f6d900168bb45450bc88998b">&#9670;&#160;</a></span>D3D12MA_RECOMMENDED_POOL_FLAGS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define D3D12MA_RECOMMENDED_POOL_FLAGS&#160;&#160;&#160;(POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set of flags recommended for use in <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags for the heap.">D3D12MA::POOL_DESC::Flags</a> for optimal performance. </p>
+
 </div>
 </div>
 <a id="ad04069a2e2bbc53b7d65f85a04a2dcbc" name="ad04069a2e2bbc53b7d65f85a04a2dcbc"></a>
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
index 6810191..fc89b6d 100644
--- a/docs/html/annotated.html
+++ b/docs/html/annotated.html
@@ -96,21 +96,25 @@
 <tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_allocator.html" target="_self">Allocator</a></td><td class="desc">Represents main object of this library initialized for particular <code>ID3D12Device</code> </td></tr>
 <tr id="row_0_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html" target="_self">ALLOCATOR_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_allocator.html" title="Represents main object of this library initialized for particular ID3D12Device.">Allocator</a> object. To be used with <a class="el" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0" title="Creates new main D3D12MA::Allocator object and returns it through ppAllocator.">CreateAllocator()</a> </td></tr>
 <tr id="row_0_5_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_budget.html" target="_self">Budget</a></td><td class="desc">Statistics of current memory usage and available budget for a specific memory segment group </td></tr>
-<tr id="row_0_6_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html" target="_self">DEFRAGMENTATION_DESC</a></td><td class="desc">Parameters for defragmentation </td></tr>
-<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html" target="_self">DEFRAGMENTATION_MOVE</a></td><td class="desc">Single move of an allocation to be done for defragmentation </td></tr>
-<tr id="row_0_8_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html" target="_self">DEFRAGMENTATION_PASS_MOVE_INFO</a></td><td class="desc">Parameters for incremental defragmentation steps </td></tr>
-<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html" target="_self">DEFRAGMENTATION_STATS</a></td><td class="desc">Statistics returned for defragmentation process by function <a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1c21c26f47dcbf8f4e562063a3e25f38" title="Returns statistics of the defragmentation performed so far.">DefragmentationContext::GetStats()</a> </td></tr>
-<tr id="row_0_10_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html" target="_self">DefragmentationContext</a></td><td class="desc">Represents defragmentation process in progress </td></tr>
-<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_detailed_statistics.html" target="_self">DetailedStatistics</a></td><td class="desc">More detailed statistics than <a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" title="Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...">D3D12MA::Statistics</a> </td></tr>
-<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_pool.html" target="_self">Pool</a></td><td class="desc">Custom memory pool </td></tr>
-<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" target="_self">POOL_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515" title="Creates custom pool.">D3D12MA::Allocator::CreatePool</a> </td></tr>
-<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" target="_self">Statistics</a></td><td class="desc">Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group, custom pool, or total </td></tr>
-<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_total_statistics.html" target="_self">TotalStatistics</a></td><td class="desc">General statistics from current state of the allocator - total memory usage across all memory heaps and segments </td></tr>
-<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">VIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179" title="Creates new allocation.">VirtualBlock::Allocate()</a> </td></tr>
-<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html" target="_self">VIRTUAL_ALLOCATION_INFO</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ac605dce05ca0d411e46079f0bad765d1" title="Returns information about an allocation - its offset, size and custom pointer.">VirtualBlock::GetAllocationInfo()</a> </td></tr>
-<tr id="row_0_18_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">VIRTUAL_BLOCK_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">D3D12MA::VirtualBlock</a> object to be passed to <a class="el" href="namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98" title="Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.">CreateVirtualBlock()</a> </td></tr>
-<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_virtual_allocation.html" target="_self">VirtualAllocation</a></td><td class="desc">Represents single memory allocation done inside <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">VirtualBlock</a> </td></tr>
-<tr id="row_0_20_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" target="_self">VirtualBlock</a></td><td class="desc">Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory </td></tr>
+<tr id="row_0_6_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">CALLOCATION_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure </td></tr>
+<tr id="row_0_7_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html" target="_self">CPOOL_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure </td></tr>
+<tr id="row_0_8_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">CVIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure </td></tr>
+<tr id="row_0_9_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">CVIRTUAL_BLOCK_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure </td></tr>
+<tr id="row_0_10_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html" target="_self">DEFRAGMENTATION_DESC</a></td><td class="desc">Parameters for defragmentation </td></tr>
+<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html" target="_self">DEFRAGMENTATION_MOVE</a></td><td class="desc">Single move of an allocation to be done for defragmentation </td></tr>
+<tr id="row_0_12_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html" target="_self">DEFRAGMENTATION_PASS_MOVE_INFO</a></td><td class="desc">Parameters for incremental defragmentation steps </td></tr>
+<tr id="row_0_13_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html" target="_self">DEFRAGMENTATION_STATS</a></td><td class="desc">Statistics returned for defragmentation process by function <a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1c21c26f47dcbf8f4e562063a3e25f38" title="Returns statistics of the defragmentation performed so far.">DefragmentationContext::GetStats()</a> </td></tr>
+<tr id="row_0_14_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html" target="_self">DefragmentationContext</a></td><td class="desc">Represents defragmentation process in progress </td></tr>
+<tr id="row_0_15_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_detailed_statistics.html" target="_self">DetailedStatistics</a></td><td class="desc">More detailed statistics than <a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" title="Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...">D3D12MA::Statistics</a> </td></tr>
+<tr id="row_0_16_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_pool.html" target="_self">Pool</a></td><td class="desc">Custom memory pool </td></tr>
+<tr id="row_0_17_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" target="_self">POOL_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515" title="Creates custom pool.">D3D12MA::Allocator::CreatePool</a> </td></tr>
+<tr id="row_0_18_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" target="_self">Statistics</a></td><td class="desc">Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group, custom pool, or total </td></tr>
+<tr id="row_0_19_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_total_statistics.html" target="_self">TotalStatistics</a></td><td class="desc">General statistics from current state of the allocator - total memory usage across all memory heaps and segments </td></tr>
+<tr id="row_0_20_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">VIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179" title="Creates new allocation.">VirtualBlock::Allocate()</a> </td></tr>
+<tr id="row_0_21_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html" target="_self">VIRTUAL_ALLOCATION_INFO</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ac605dce05ca0d411e46079f0bad765d1" title="Returns information about an allocation - its offset, size and custom pointer.">VirtualBlock::GetAllocationInfo()</a> </td></tr>
+<tr id="row_0_22_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">VIRTUAL_BLOCK_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">D3D12MA::VirtualBlock</a> object to be passed to <a class="el" href="namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98" title="Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.">CreateVirtualBlock()</a> </td></tr>
+<tr id="row_0_23_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_virtual_allocation.html" target="_self">VirtualAllocation</a></td><td class="desc">Represents single memory allocation done inside <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">VirtualBlock</a> </td></tr>
+<tr id="row_0_24_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" target="_self">VirtualBlock</a></td><td class="desc">Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory </td></tr>
 </table>
 </div><!-- directory -->
 </div><!-- contents -->
diff --git a/docs/html/classes.html b/docs/html/classes.html
index 5794267..c86eb6b 100644
--- a/docs/html/classes.html
+++ b/docs/html/classes.html
@@ -87,7 +87,7 @@
   <div class="headertitle"><div class="title">Class Index</div></div>
 </div><!--header-->
 <div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
+<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
 <div class="classindex">
 <dl class="classindex even">
 <dt class="alphachar"><a id="letter_A" name="letter_A">A</a></dt>
@@ -96,18 +96,21 @@
 <dt class="alphachar"><a id="letter_B" name="letter_B">B</a></dt>
 <dd><a class="el" href="struct_d3_d12_m_a_1_1_budget.html">Budget</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
 <dl class="classindex even">
+<dt class="alphachar"><a id="letter_C" name="letter_C">C</a></dt>
+<dd><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CALLOCATION_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">CPOOL_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CVIRTUAL_ALLOCATION_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">CVIRTUAL_BLOCK_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
+<dl class="classindex odd">
 <dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
 <dd><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html">DEFRAGMENTATION_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html">DEFRAGMENTATION_MOVE</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html">DEFRAGMENTATION_PASS_MOVE_INFO</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html">DEFRAGMENTATION_STATS</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html">DefragmentationContext</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_detailed_statistics.html">DetailedStatistics</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
-<dl class="classindex odd">
+<dl class="classindex even">
 <dt class="alphachar"><a id="letter_P" name="letter_P">P</a></dt>
 <dd><a class="el" href="class_d3_d12_m_a_1_1_pool.html">Pool</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">POOL_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
-<dl class="classindex even">
+<dl class="classindex odd">
 <dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
 <dd><a class="el" href="struct_d3_d12_m_a_1_1_statistics.html">Statistics</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
-<dl class="classindex odd">
+<dl class="classindex even">
 <dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
 <dd><a class="el" href="struct_d3_d12_m_a_1_1_total_statistics.html">TotalStatistics</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
-<dl class="classindex even">
+<dl class="classindex odd">
 <dt class="alphachar"><a id="letter_V" name="letter_V">V</a></dt>
 <dd><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">VIRTUAL_ALLOCATION_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html">VIRTUAL_ALLOCATION_INFO</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">VIRTUAL_BLOCK_DESC</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="struct_d3_d12_m_a_1_1_virtual_allocation.html">VirtualAllocation</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd><dd><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html">VirtualBlock</a> (<a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a>)</dd></dl>
 </div>
diff --git a/docs/html/configuration.html b/docs/html/configuration.html
index 3c35991..4582e06 100644
--- a/docs/html/configuration.html
+++ b/docs/html/configuration.html
@@ -110,28 +110,29 @@
 <div class="line">    _aligned_free(pMemory);</div>
 <div class="line">}</div>
 <div class="line"> </div>
-<div class="line">(...)</div>
+<div class="line">...</div>
 <div class="line"> </div>
-<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html">D3D12MA::ALLOCATION_CALLBACKS</a> allocationCallbacks = {};</div>
-<div class="line">allocationCallbacks.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af4d6436455728696fefd503869226436">pAllocate</a> = &amp;CustomAllocate;</div>
-<div class="line">allocationCallbacks.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#a114e6c4d63d6b020e01f526a975d6849">pFree</a> = &amp;CustomFree;</div>
+<div class="line">D3D12MA::ALLOCATION_CALLBACKS allocationCallbacks = {};</div>
+<div class="line">allocationCallbacks.pAllocate = &amp;CustomAllocate;</div>
+<div class="line">allocationCallbacks.pFree = &amp;CustomFree;</div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html">D3D12MA::ALLOCATOR_DESC</a> allocatorDesc = {};</div>
 <div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c">pDevice</a> = device;</div>
 <div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b">pAdapter</a> = adapter;</div>
+<div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3">Flags</a> = <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a>;</div>
 <div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a773ecc1945eb47c20e06455c3759e4ef">pAllocationCallbacks</a> = &amp;allocationCallbacks;</div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a>* allocator;</div>
 <div class="line">HRESULT hr = <a class="code hl_function" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0">D3D12MA::CreateAllocator</a>(&amp;allocatorDesc, &amp;allocator);</div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocator_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a></div><div class="ttdoc">Represents main object of this library initialized for particular ID3D12Device.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1118</div></div>
+<div class="line"><span class="comment">// Check hr...</span></div>
+<div class="ttc" id="a_d3_d12_mem_alloc_8h_html_accfbeae642feeacf353ce695e91a5e73"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a></div><div class="ttdeci">#define D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</div><div class="ttdoc">Set of flags recommended for use in D3D12MA::ALLOCATOR_DESC::Flags for optimal performance.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:126</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocator_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a></div><div class="ttdoc">Represents main object of this library initialized for particular ID3D12Device.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1155</div></div>
 <div class="ttc" id="anamespace_d3_d12_m_a_html_ab7a1cd1683986d75ce1488b0920f4cb0"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0">D3D12MA::CreateAllocator</a></div><div class="ttdeci">D3D12MA_API HRESULT CreateAllocator(const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)</div><div class="ttdoc">Creates new main D3D12MA::Allocator object and returns it through ppAllocator.</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html">D3D12MA::ALLOCATION_CALLBACKS</a></div><div class="ttdoc">Custom callbacks to CPU memory allocation functions.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:217</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s_html_a114e6c4d63d6b020e01f526a975d6849"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#a114e6c4d63d6b020e01f526a975d6849">D3D12MA::ALLOCATION_CALLBACKS::pFree</a></div><div class="ttdeci">FREE_FUNC_PTR pFree</div><div class="ttdoc">Dellocation function.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:221</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s_html_af4d6436455728696fefd503869226436"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html#af4d6436455728696fefd503869226436">D3D12MA::ALLOCATION_CALLBACKS::pAllocate</a></div><div class="ttdeci">ALLOCATE_FUNC_PTR pAllocate</div><div class="ttdoc">Allocation function.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:219</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html">D3D12MA::ALLOCATOR_DESC</a></div><div class="ttdoc">Parameters of created Allocator object. To be used with CreateAllocator().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1079</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_a773ecc1945eb47c20e06455c3759e4ef"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a773ecc1945eb47c20e06455c3759e4ef">D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks</a></div><div class="ttdeci">const ALLOCATION_CALLBACKS * pAllocationCallbacks</div><div class="ttdoc">Custom CPU memory allocation callbacks. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1099</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_abf9a9f87f0ffea52816efd363c5fcd7b"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b">D3D12MA::ALLOCATOR_DESC::pAdapter</a></div><div class="ttdeci">IDXGIAdapter * pAdapter</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1105</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_ada1bf21205065b3aa0284b5a9ee1cb3c"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c">D3D12MA::ALLOCATOR_DESC::pDevice</a></div><div class="ttdeci">ID3D12Device * pDevice</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1087</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html">D3D12MA::ALLOCATOR_DESC</a></div><div class="ttdoc">Parameters of created Allocator object. To be used with CreateAllocator().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1113</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_a773ecc1945eb47c20e06455c3759e4ef"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#a773ecc1945eb47c20e06455c3759e4ef">D3D12MA::ALLOCATOR_DESC::pAllocationCallbacks</a></div><div class="ttdeci">const ALLOCATION_CALLBACKS * pAllocationCallbacks</div><div class="ttdoc">Custom CPU memory allocation callbacks. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1136</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_abf9a9f87f0ffea52816efd363c5fcd7b"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b">D3D12MA::ALLOCATOR_DESC::pAdapter</a></div><div class="ttdeci">IDXGIAdapter * pAdapter</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1142</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_ad8abad7c80ea0d8df27c85243ce720f3"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3">D3D12MA::ALLOCATOR_DESC::Flags</a></div><div class="ttdeci">ALLOCATOR_FLAGS Flags</div><div class="ttdoc">Flags for the entire allocator.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1118</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_ada1bf21205065b3aa0284b5a9ee1cb3c"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c">D3D12MA::ALLOCATOR_DESC::pDevice</a></div><div class="ttdeci">ID3D12Device * pDevice</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1124</div></div>
 </div><!-- fragment --><h1><a class="anchor" id="debug_margins"></a>
 Debug margins</h1>
 <p>By default, allocations are laid out in memory blocks next to each other if possible (considering required alignment returned by <code>ID3D12Device::GetResourceAllocationInfo</code>).</p>
diff --git a/docs/html/custom_pools.html b/docs/html/custom_pools.html
index c4e6468..2015488 100644
--- a/docs/html/custom_pools.html
+++ b/docs/html/custom_pools.html
@@ -97,13 +97,13 @@
 <p>To create a custom pool, fill in structure <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> and call function <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515" title="Creates custom pool.">D3D12MA::Allocator::CreatePool</a> to obtain object <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</a>. Example:</p>
 <div class="fragment"><div class="line">POOL_DESC poolDesc = {};</div>
 <div class="line">poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;</div>
-<div class="line"><span class="comment">// These flags are optional but recommended.</span></div>
-<div class="line">poolDesc.Flags = <a class="code hl_enumvalue" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1acc379a89755438c0f76667783b778baa">D3D12MA::POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</a>;</div>
-<div class="line">poolDesc.HeapFlags = D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;</div>
+<div class="line">poolDesc.Flags = <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a>;</div>
+<div class="line">poolDesc.HeapFlags = <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a> | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;</div>
 <div class="line"> </div>
 <div class="line">Pool* pool;</div>
 <div class="line">HRESULT hr = allocator-&gt;CreatePool(&amp;poolDesc, &amp;pool);</div>
-<div class="ttc" id="anamespace_d3_d12_m_a_html_a919d8545365d6b7209a964f2b99936d1acc379a89755438c0f76667783b778baa"><div class="ttname"><a href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1acc379a89755438c0f76667783b778baa">D3D12MA::POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</a></div><div class="ttdeci">@ POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:852</div></div>
+<div class="ttc" id="a_d3_d12_mem_alloc_8h_html_a2679d8c9f6d900168bb45450bc88998b"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a></div><div class="ttdeci">#define D3D12MA_RECOMMENDED_POOL_FLAGS</div><div class="ttdoc">Set of flags recommended for use in D3D12MA::POOL_DESC::Flags for optimal performance.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:140</div></div>
+<div class="ttc" id="a_d3_d12_mem_alloc_8h_html_ac3d50f134ad24c58df4a934b87847653"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a></div><div class="ttdeci">#define D3D12MA_RECOMMENDED_HEAP_FLAGS</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:134</div></div>
 </div><!-- fragment --><p>To allocate resources out of a custom pool, only set member <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934" title="Custom pool to place the new resource in. Optional.">D3D12MA::ALLOCATION_DESC::CustomPool</a>. Example:</p>
 <div class="fragment"><div class="line">ALLOCATION_DESC allocDesc = {};</div>
 <div class="line">allocDesc.CustomPool = pool;</div>
@@ -126,7 +126,7 @@
 <li>To limit maximum amount of memory allocated. To use it, set member <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e" title="Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional.">D3D12MA::POOL_DESC::MaxBlockCount</a>.</li>
 <li>To use extended parameters of the D3D12 memory allocation. While resources created from default pools can only specify <code>D3D12_HEAP_TYPE_DEFAULT</code>, <code>UPLOAD</code>, <code>READBACK</code>, a custom pool may use non-standard <code>D3D12_HEAP_PROPERTIES</code> (member <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a" title="The parameters of memory heap where allocations of this pool should be placed.">D3D12MA::POOL_DESC::HeapProperties</a>) and <code>D3D12_HEAP_FLAGS</code> (<a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc" title="Heap flags to be used when allocating heaps of this pool.">D3D12MA::POOL_DESC::HeapFlags</a>), which is useful e.g. for cross-adapter sharing or UMA (see also <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a9e742884bd45dd7f01193d13fcd05af0" title="Returns true if D3D12_FEATURE_DATA_ARCHITECTURE1::UMA was found to be true.">D3D12MA::Allocator::IsUMA</a>).</li>
 </ul>
-<p>New versions of this library support creating <b>committed allocations in custom pools</b>. It is supported only when <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c" title="Size of a single heap (memory block) to be allocated as part of this pool, in bytes....">D3D12MA::POOL_DESC::BlockSize</a> = 0. To use this feature, set <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934" title="Custom pool to place the new resource in. Optional.">D3D12MA::ALLOCATION_DESC::CustomPool</a> to the pointer to your custom pool and <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags.">D3D12MA::ALLOCATION_DESC::Flags</a> to <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675">D3D12MA::ALLOCATION_FLAG_COMMITTED</a>. Example:</p>
+<p>New versions of this library support creating <b>committed allocations in custom pools</b>. It is supported only when <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c" title="Size of a single heap (memory block) to be allocated as part of this pool, in bytes....">D3D12MA::POOL_DESC::BlockSize</a> = 0. To use this feature, set <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934" title="Custom pool to place the new resource in. Optional.">D3D12MA::ALLOCATION_DESC::CustomPool</a> to the pointer to your custom pool and <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags for the allocation.">D3D12MA::ALLOCATION_DESC::Flags</a> to <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675">D3D12MA::ALLOCATION_FLAG_COMMITTED</a>. Example:</p>
 <div class="fragment"><div class="line">ALLOCATION_DESC allocDesc = {};</div>
 <div class="line">allocDesc.CustomPool = pool;</div>
 <div class="line">allocDesc.Flags = ALLOCATION_FLAG_COMMITTED;</div>
diff --git a/docs/html/defragmentation.html b/docs/html/defragmentation.html
index 28bf51f..5326a94 100644
--- a/docs/html/defragmentation.html
+++ b/docs/html/defragmentation.html
@@ -149,19 +149,19 @@
 <div class="line">defragCtx-&gt;Release();</div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_a414a088c22bae0f29b1038f5f9346d14"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#a414a088c22bae0f29b1038f5f9346d14">D3D12MA::Allocation::SetResource</a></div><div class="ttdeci">void SetResource(ID3D12Resource *pResource)</div><div class="ttdoc">Releases the resource currently pointed by the allocation (if any), sets it to new one,...</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_a47be9557d441797b65de177a3d5cdf60"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#a47be9557d441797b65de177a3d5cdf60">D3D12MA::Allocation::GetOffset</a></div><div class="ttdeci">UINT64 GetOffset() const</div><div class="ttdoc">Returns offset in bytes from the start of memory heap.</div></div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_ad00308118252f82d8f803c623c67bf18"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#ad00308118252f82d8f803c623c67bf18">D3D12MA::Allocation::GetResource</a></div><div class="ttdeci">ID3D12Resource * GetResource() const</div><div class="ttdoc">Returns D3D12 resource associated with this object.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:520</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_ad00308118252f82d8f803c623c67bf18"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#ad00308118252f82d8f803c623c67bf18">D3D12MA::Allocation::GetResource</a></div><div class="ttdeci">ID3D12Resource * GetResource() const</div><div class="ttdoc">Returns D3D12 resource associated with this object.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:550</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_adca8d5a82bed492fe7265fcda6e53da2"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#adca8d5a82bed492fe7265fcda6e53da2">D3D12MA::Allocation::GetHeap</a></div><div class="ttdeci">ID3D12Heap * GetHeap() const</div><div class="ttdoc">Returns memory heap that the resource is created in.</div></div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_defragmentation_context_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_defragmentation_context.html">D3D12MA::DefragmentationContext</a></div><div class="ttdoc">Represents defragmentation process in progress.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:776</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_defragmentation_context_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_defragmentation_context.html">D3D12MA::DefragmentationContext</a></div><div class="ttdoc">Represents defragmentation process in progress.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:806</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_defragmentation_context_html_a1606c015d02edc094bb246986159d592"><div class="ttname"><a href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1606c015d02edc094bb246986159d592">D3D12MA::DefragmentationContext::BeginPass</a></div><div class="ttdeci">HRESULT BeginPass(DEFRAGMENTATION_PASS_MOVE_INFO *pPassInfo)</div><div class="ttdoc">Starts single defragmentation pass.</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_defragmentation_context_html_aad502ba70d6dadaeee37703fd8bf90ae"><div class="ttname"><a href="class_d3_d12_m_a_1_1_defragmentation_context.html#aad502ba70d6dadaeee37703fd8bf90ae">D3D12MA::DefragmentationContext::EndPass</a></div><div class="ttdeci">HRESULT EndPass(DEFRAGMENTATION_PASS_MOVE_INFO *pPassInfo)</div><div class="ttdoc">Ends single defragmentation pass.</div></div>
-<div class="ttc" id="anamespace_d3_d12_m_a_html_ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13">D3D12MA::DEFRAGMENTATION_FLAG_ALGORITHM_FAST</a></div><div class="ttdeci">@ DEFRAGMENTATION_FLAG_ALGORITHM_FAST</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:656</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html">D3D12MA::DEFRAGMENTATION_DESC</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:678</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c_html_aac9a357e679a0afa9ab84cd06057630b"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html#aac9a357e679a0afa9ab84cd06057630b">D3D12MA::DEFRAGMENTATION_DESC::Flags</a></div><div class="ttdeci">DEFRAGMENTATION_FLAGS Flags</div><div class="ttdoc">Flags.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:680</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e_html_a4946b874c958a71c21fac25b515cf5f7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html#a4946b874c958a71c21fac25b515cf5f7">D3D12MA::DEFRAGMENTATION_MOVE::pSrcAllocation</a></div><div class="ttdeci">Allocation * pSrcAllocation</div><div class="ttdoc">Allocation that should be moved.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:714</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e_html_aec0c7f51ccc870c6a88af7c7390d8eda"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html#aec0c7f51ccc870c6a88af7c7390d8eda">D3D12MA::DEFRAGMENTATION_MOVE::pDstTmpAllocation</a></div><div class="ttdeci">Allocation * pDstTmpAllocation</div><div class="ttdoc">Temporary allocation pointing to destination memory that will replace pSrcAllocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:722</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO</a></div><div class="ttdoc">Parameters for incremental defragmentation steps.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:730</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html_a719fbdaae54251759605c41baeb24dc4"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html#a719fbdaae54251759605c41baeb24dc4">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO::pMoves</a></div><div class="ttdeci">DEFRAGMENTATION_MOVE * pMoves</div><div class="ttdoc">Array of moves to be performed by the user in the current defragmentation pass.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:754</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html_a8df22d990c318d82fe9fcc5f04132c04"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html#a8df22d990c318d82fe9fcc5f04132c04">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO::MoveCount</a></div><div class="ttdeci">UINT32 MoveCount</div><div class="ttdoc">Number of elements in the pMoves array.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:732</div></div>
+<div class="ttc" id="anamespace_d3_d12_m_a_html_ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13">D3D12MA::DEFRAGMENTATION_FLAG_ALGORITHM_FAST</a></div><div class="ttdeci">@ DEFRAGMENTATION_FLAG_ALGORITHM_FAST</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:686</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html">D3D12MA::DEFRAGMENTATION_DESC</a></div><div class="ttdoc">Parameters for defragmentation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:708</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c_html_aac9a357e679a0afa9ab84cd06057630b"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html#aac9a357e679a0afa9ab84cd06057630b">D3D12MA::DEFRAGMENTATION_DESC::Flags</a></div><div class="ttdeci">DEFRAGMENTATION_FLAGS Flags</div><div class="ttdoc">Flags.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:710</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e_html_a4946b874c958a71c21fac25b515cf5f7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html#a4946b874c958a71c21fac25b515cf5f7">D3D12MA::DEFRAGMENTATION_MOVE::pSrcAllocation</a></div><div class="ttdeci">Allocation * pSrcAllocation</div><div class="ttdoc">Allocation that should be moved.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:744</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e_html_aec0c7f51ccc870c6a88af7c7390d8eda"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html#aec0c7f51ccc870c6a88af7c7390d8eda">D3D12MA::DEFRAGMENTATION_MOVE::pDstTmpAllocation</a></div><div class="ttdeci">Allocation * pDstTmpAllocation</div><div class="ttdoc">Temporary allocation pointing to destination memory that will replace pSrcAllocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:752</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO</a></div><div class="ttdoc">Parameters for incremental defragmentation steps.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:760</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html_a719fbdaae54251759605c41baeb24dc4"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html#a719fbdaae54251759605c41baeb24dc4">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO::pMoves</a></div><div class="ttdeci">DEFRAGMENTATION_MOVE * pMoves</div><div class="ttdoc">Array of moves to be performed by the user in the current defragmentation pass.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:784</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o_html_a8df22d990c318d82fe9fcc5f04132c04"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html#a8df22d990c318d82fe9fcc5f04132c04">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO::MoveCount</a></div><div class="ttdeci">UINT32 MoveCount</div><div class="ttdoc">Number of elements in the pMoves array.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:762</div></div>
 </div><!-- fragment --><p>Although functions like <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a" title="Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...">D3D12MA::Allocator::CreateResource()</a> create an allocation and a buffer/texture at once, these are just a shortcut for allocating memory and creating a placed resource. Defragmentation works on memory allocations only. You must handle the rest manually. Defragmentation is an iterative process that should repreat "passes" as long as related functions return <code>S_FALSE</code> not <code>S_OK</code>. In each pass:</p>
 <ol type="1">
 <li><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1606c015d02edc094bb246986159d592" title="Starts single defragmentation pass.">D3D12MA::DefragmentationContext::BeginPass()</a> function call:<ul>
diff --git a/docs/html/doxygen_crawl.html b/docs/html/doxygen_crawl.html
index 5407805..3a1c53e 100644
--- a/docs/html/doxygen_crawl.html
+++ b/docs/html/doxygen_crawl.html
@@ -9,7 +9,11 @@
 </head>
 <body>
 <a href="_d3_d12_mem_alloc_8h.html"/>
+<a href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b"/>
+<a href="_d3_d12_mem_alloc_8h.html#a6df70df4d9e792713418dd4062b07c3a"/>
 <a href="_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50"/>
+<a href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653"/>
+<a href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73"/>
 <a href="_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc"/>
 <a href="annotated.html"/>
 <a href="class_d3_d12_m_a_1_1_allocation-members.html"/>
@@ -199,6 +203,7 @@
 <a href="optimal_allocation.html#optimal_allocation_suballocating_buffers"/>
 <a href="quick_start.html"/>
 <a href="quick_start.html#quick_start_creating_resources"/>
+<a href="quick_start.html#quick_start_helper_structures"/>
 <a href="quick_start.html#quick_start_mapping_memory"/>
 <a href="quick_start.html#quick_start_project_setup"/>
 <a href="quick_start.html#quick_start_resource_reference_counting"/>
@@ -230,6 +235,28 @@
 <a href="struct_d3_d12_m_a_1_1_budget.html#a1255508930766db238cfb1312b15f1cf"/>
 <a href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71"/>
 <a href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a5c552f3160fb93b65ed16db4f6412a39"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a8916820e2d709379eb3bcd2fb7e9848f"/>
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ae18d216821f86a1f35ea54bcd41c6e86"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c-members.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a0d1e436a90bb4a07c55a5ecf60618be3"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a5de61391fddfd37d91a0ec5cb7e84c1b"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#ab2310e41ea92aa64dfab4a3366a60cc3"/>
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#abc6429b119b65f7cd3ed5c5bd4d36d85"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af72d9f4003fc6b86f76268aa8529d43a"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a223f6535756a128b7fe86f0aa10de9af"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c"/>
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2984a0b07b432ed8baf387d5230b7112"/>
 <a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c-members.html"/>
 <a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html"/>
 <a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html#a83bfb404f387863eafdd6703483aed89"/>
diff --git a/docs/html/functions.html b/docs/html/functions.html
index 94fb43e..a5084eb 100644
--- a/docs/html/functions.html
+++ b/docs/html/functions.html
@@ -116,7 +116,9 @@
 
 <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>CalculateStatistics()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22">D3D12MA::Allocator</a>, <a class="el" href="class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910">D3D12MA::Pool</a>, <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9">D3D12MA::VirtualBlock</a></li>
+<li>CALLOCATION_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1">D3D12MA::CALLOCATION_DESC</a></li>
 <li>Clear()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189">D3D12MA::VirtualBlock</a></li>
+<li>CPOOL_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2">D3D12MA::CPOOL_DESC</a></li>
 <li>CreateAliasingResource()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717">D3D12MA::Allocator</a></li>
 <li>CreateAliasingResource1()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6">D3D12MA::Allocator</a></li>
 <li>CreateAliasingResource2()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453">D3D12MA::Allocator</a></li>
@@ -127,6 +129,8 @@
 <li>CreateResource3()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747">D3D12MA::Allocator</a></li>
 <li>CreateVirtualBlock&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ae5650809a150e3283abd307c88ee45bb">D3D12MA::VirtualBlock</a></li>
 <li>CustomPool&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">D3D12MA::ALLOCATION_DESC</a></li>
+<li>CVIRTUAL_ALLOCATION_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></li>
+<li>CVIRTUAL_BLOCK_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c">D3D12MA::CVIRTUAL_BLOCK_DESC</a></li>
 </ul>
 
 
diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html
index 14a2018..a4748d4 100644
--- a/docs/html/functions_func.html
+++ b/docs/html/functions_func.html
@@ -101,7 +101,9 @@
 
 <h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
 <li>CalculateStatistics()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22">D3D12MA::Allocator</a>, <a class="el" href="class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910">D3D12MA::Pool</a>, <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9">D3D12MA::VirtualBlock</a></li>
+<li>CALLOCATION_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1">D3D12MA::CALLOCATION_DESC</a></li>
 <li>Clear()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189">D3D12MA::VirtualBlock</a></li>
+<li>CPOOL_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2">D3D12MA::CPOOL_DESC</a></li>
 <li>CreateAliasingResource()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717">D3D12MA::Allocator</a></li>
 <li>CreateAliasingResource1()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6">D3D12MA::Allocator</a></li>
 <li>CreateAliasingResource2()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453">D3D12MA::Allocator</a></li>
@@ -109,6 +111,8 @@
 <li>CreateResource()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a">D3D12MA::Allocator</a></li>
 <li>CreateResource2()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a7a1c79c79a7a573c438aa45c4a531b96">D3D12MA::Allocator</a></li>
 <li>CreateResource3()&#160;:&#160;<a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747">D3D12MA::Allocator</a></li>
+<li>CVIRTUAL_ALLOCATION_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></li>
+<li>CVIRTUAL_BLOCK_DESC()&#160;:&#160;<a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c">D3D12MA::CVIRTUAL_BLOCK_DESC</a></li>
 </ul>
 
 
diff --git a/docs/html/globals.html b/docs/html/globals.html
index 2ebbaba..4572ff2 100644
--- a/docs/html/globals.html
+++ b/docs/html/globals.html
@@ -85,7 +85,11 @@
 
 <div class="contents">
 <div class="textblock">Here is a list of all file members with links to the files they belong to:</div><ul>
+<li>D3D12MA_CREATE_NOT_ZEROED_AVAILABLE&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#a6df70df4d9e792713418dd4062b07c3a">D3D12MemAlloc.h</a></li>
 <li>D3D12MA_DXGI_1_4&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_HEAP_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_POOL_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MemAlloc.h</a></li>
 <li>D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc">D3D12MemAlloc.h</a></li>
 </ul>
 </div><!-- contents -->
diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html
index e09e7de..35d9b01 100644
--- a/docs/html/globals_defs.html
+++ b/docs/html/globals_defs.html
@@ -85,7 +85,11 @@
 
 <div class="contents">
 <div class="textblock">Here is a list of all macros with links to the files they belong to:</div><ul>
+<li>D3D12MA_CREATE_NOT_ZEROED_AVAILABLE&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#a6df70df4d9e792713418dd4062b07c3a">D3D12MemAlloc.h</a></li>
 <li>D3D12MA_DXGI_1_4&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_HEAP_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MemAlloc.h</a></li>
+<li>D3D12MA_RECOMMENDED_POOL_FLAGS&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MemAlloc.h</a></li>
 <li>D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT&#160;:&#160;<a class="el" href="_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc">D3D12MemAlloc.h</a></li>
 </ul>
 </div><!-- contents -->
diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html
index 0f059c3..152d77d 100644
--- a/docs/html/hierarchy.html
+++ b/docs/html/hierarchy.html
@@ -90,26 +90,30 @@
 <div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
 <div class="levels">[detail level <span onclick="javascript:dynsection.toggleLevel(1);">1</span><span onclick="javascript:dynsection.toggleLevel(2);">2</span>]</div><table class="directory">
 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html" target="_self">D3D12MA::ALLOCATION_CALLBACKS</a></td><td class="desc">Custom callbacks to CPU memory allocation functions </td></tr>
-<tr id="row_1_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::ALLOCATION_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_allocation.html" title="Represents single memory allocation.">D3D12MA::Allocation</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a" title="Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...">Allocator::CreateResource</a> </td></tr>
-<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html" target="_self">D3D12MA::ALLOCATOR_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_allocator.html" title="Represents main object of this library initialized for particular ID3D12Device.">Allocator</a> object. To be used with <a class="el" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0" title="Creates new main D3D12MA::Allocator object and returns it through ppAllocator.">CreateAllocator()</a> </td></tr>
-<tr id="row_3_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_budget.html" target="_self">D3D12MA::Budget</a></td><td class="desc">Statistics of current memory usage and available budget for a specific memory segment group </td></tr>
-<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::DEFRAGMENTATION_DESC</a></td><td class="desc">Parameters for defragmentation </td></tr>
-<tr id="row_5_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html" target="_self">D3D12MA::DEFRAGMENTATION_MOVE</a></td><td class="desc">Single move of an allocation to be done for defragmentation </td></tr>
-<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html" target="_self">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO</a></td><td class="desc">Parameters for incremental defragmentation steps </td></tr>
-<tr id="row_7_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html" target="_self">D3D12MA::DEFRAGMENTATION_STATS</a></td><td class="desc">Statistics returned for defragmentation process by function <a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1c21c26f47dcbf8f4e562063a3e25f38" title="Returns statistics of the defragmentation performed so far.">DefragmentationContext::GetStats()</a> </td></tr>
-<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_detailed_statistics.html" target="_self">D3D12MA::DetailedStatistics</a></td><td class="desc">More detailed statistics than <a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" title="Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...">D3D12MA::Statistics</a> </td></tr>
-<tr id="row_9_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="dynsection.toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>IUnknownImpl</b></td><td class="desc"></td></tr>
-<tr id="row_9_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_allocation.html" target="_self">D3D12MA::Allocation</a></td><td class="desc">Represents single memory allocation </td></tr>
-<tr id="row_9_1_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_allocator.html" target="_self">D3D12MA::Allocator</a></td><td class="desc">Represents main object of this library initialized for particular <code>ID3D12Device</code> </td></tr>
-<tr id="row_9_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html" target="_self">D3D12MA::DefragmentationContext</a></td><td class="desc">Represents defragmentation process in progress </td></tr>
-<tr id="row_9_3_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_pool.html" target="_self">D3D12MA::Pool</a></td><td class="desc">Custom memory pool </td></tr>
-<tr id="row_9_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" target="_self">D3D12MA::VirtualBlock</a></td><td class="desc">Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory </td></tr>
-<tr id="row_10_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" target="_self">D3D12MA::POOL_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515" title="Creates custom pool.">D3D12MA::Allocator::CreatePool</a> </td></tr>
+<tr id="row_1_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="dynsection.toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::ALLOCATION_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_allocation.html" title="Represents single memory allocation.">D3D12MA::Allocation</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a" title="Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...">Allocator::CreateResource</a> </td></tr>
+<tr id="row_1_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::CALLOCATION_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure </td></tr>
+<tr id="row_2_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html" target="_self">D3D12MA::ALLOCATOR_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_allocator.html" title="Represents main object of this library initialized for particular ID3D12Device.">Allocator</a> object. To be used with <a class="el" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0" title="Creates new main D3D12MA::Allocator object and returns it through ppAllocator.">CreateAllocator()</a> </td></tr>
+<tr id="row_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_budget.html" target="_self">D3D12MA::Budget</a></td><td class="desc">Statistics of current memory usage and available budget for a specific memory segment group </td></tr>
+<tr id="row_4_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::DEFRAGMENTATION_DESC</a></td><td class="desc">Parameters for defragmentation </td></tr>
+<tr id="row_5_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html" target="_self">D3D12MA::DEFRAGMENTATION_MOVE</a></td><td class="desc">Single move of an allocation to be done for defragmentation </td></tr>
+<tr id="row_6_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html" target="_self">D3D12MA::DEFRAGMENTATION_PASS_MOVE_INFO</a></td><td class="desc">Parameters for incremental defragmentation steps </td></tr>
+<tr id="row_7_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html" target="_self">D3D12MA::DEFRAGMENTATION_STATS</a></td><td class="desc">Statistics returned for defragmentation process by function <a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html#a1c21c26f47dcbf8f4e562063a3e25f38" title="Returns statistics of the defragmentation performed so far.">DefragmentationContext::GetStats()</a> </td></tr>
+<tr id="row_8_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_detailed_statistics.html" target="_self">D3D12MA::DetailedStatistics</a></td><td class="desc">More detailed statistics than <a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" title="Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...">D3D12MA::Statistics</a> </td></tr>
+<tr id="row_9_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="dynsection.toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><b>IUnknownImpl</b></td><td class="desc"></td></tr>
+<tr id="row_9_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_allocation.html" target="_self">D3D12MA::Allocation</a></td><td class="desc">Represents single memory allocation </td></tr>
+<tr id="row_9_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_allocator.html" target="_self">D3D12MA::Allocator</a></td><td class="desc">Represents main object of this library initialized for particular <code>ID3D12Device</code> </td></tr>
+<tr id="row_9_2_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_defragmentation_context.html" target="_self">D3D12MA::DefragmentationContext</a></td><td class="desc">Represents defragmentation process in progress </td></tr>
+<tr id="row_9_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_pool.html" target="_self">D3D12MA::Pool</a></td><td class="desc">Custom memory pool </td></tr>
+<tr id="row_9_4_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" target="_self">D3D12MA::VirtualBlock</a></td><td class="desc">Represents pure allocation algorithm and a data structure with allocations in some memory block, without actually allocating any GPU memory </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_10_" class="arrow" onclick="dynsection.toggleFolder('10_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" target="_self">D3D12MA::POOL_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</a> object. To be used with <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515" title="Creates custom pool.">D3D12MA::Allocator::CreatePool</a> </td></tr>
+<tr id="row_10_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html" target="_self">D3D12MA::CPOOL_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure </td></tr>
 <tr id="row_11_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_statistics.html" target="_self">D3D12MA::Statistics</a></td><td class="desc">Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group, custom pool, or total </td></tr>
 <tr id="row_12_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_total_statistics.html" target="_self">D3D12MA::TotalStatistics</a></td><td class="desc">General statistics from current state of the allocator - total memory usage across all memory heaps and segments </td></tr>
-<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179" title="Creates new allocation.">VirtualBlock::Allocate()</a> </td></tr>
-<tr id="row_14_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html" target="_self">D3D12MA::VIRTUAL_ALLOCATION_INFO</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ac605dce05ca0d411e46079f0bad765d1" title="Returns information about an allocation - its offset, size and custom pointer.">VirtualBlock::GetAllocationInfo()</a> </td></tr>
-<tr id="row_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">D3D12MA::VIRTUAL_BLOCK_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">D3D12MA::VirtualBlock</a> object to be passed to <a class="el" href="namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98" title="Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.">CreateVirtualBlock()</a> </td></tr>
+<tr id="row_13_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_13_" class="arrow" onclick="dynsection.toggleFolder('13_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Parameters of created virtual allocation to be passed to <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179" title="Creates new allocation.">VirtualBlock::Allocate()</a> </td></tr>
+<tr id="row_13_0_" class="odd"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" target="_self">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html" target="_self">D3D12MA::VIRTUAL_ALLOCATION_INFO</a></td><td class="desc">Parameters of an existing virtual allocation, returned by <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#ac605dce05ca0d411e46079f0bad765d1" title="Returns information about an allocation - its offset, size and custom pointer.">VirtualBlock::GetAllocationInfo()</a> </td></tr>
+<tr id="row_15_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_15_" class="arrow" onclick="dynsection.toggleFolder('15_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">D3D12MA::VIRTUAL_BLOCK_DESC</a></td><td class="desc">Parameters of created <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">D3D12MA::VirtualBlock</a> object to be passed to <a class="el" href="namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98" title="Creates new D3D12MA::VirtualBlock object and returns it through ppVirtualBlock.">CreateVirtualBlock()</a> </td></tr>
+<tr id="row_15_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" target="_self">D3D12MA::CVIRTUAL_BLOCK_DESC</a></td><td class="desc">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure </td></tr>
 <tr id="row_16_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_d3_d12_m_a_1_1_virtual_allocation.html" target="_self">D3D12MA::VirtualAllocation</a></td><td class="desc">Represents single memory allocation done inside <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">VirtualBlock</a> </td></tr>
 </table>
 </div><!-- directory -->
diff --git a/docs/html/index.html b/docs/html/index.html
index fcd9bdc..14cd6ca 100644
--- a/docs/html/index.html
+++ b/docs/html/index.html
@@ -99,6 +99,7 @@
 <li><a class="el" href="quick_start.html#quick_start_creating_resources">Creating resources</a></li>
 <li><a class="el" href="quick_start.html#quick_start_resource_reference_counting">Resource reference counting</a></li>
 <li><a class="el" href="quick_start.html#quick_start_mapping_memory">Mapping memory</a></li>
+<li><a class="el" href="quick_start.html#quick_start_helper_structures">Helper structures</a></li>
 </ul>
 </li>
 <li><a class="el" href="custom_pools.html">Custom memory pools</a></li>
diff --git a/docs/html/linear_algorithm.html b/docs/html/linear_algorithm.html
index c5503ff..8f8f82e 100644
--- a/docs/html/linear_algorithm.html
+++ b/docs/html/linear_algorithm.html
@@ -93,7 +93,7 @@
 <div class="contents">
 <div class="textblock"><p>Each D3D12 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="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1aa37a0103f511954ea42a1d0bba286b6a">D3D12MA::POOL_FLAG_ALGORITHM_LINEAR</a> to <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags.">D3D12MA::POOL_DESC::Flags</a> while creating <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</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="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1aa37a0103f511954ea42a1d0bba286b6a">D3D12MA::POOL_FLAG_ALGORITHM_LINEAR</a> to <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags for the heap.">D3D12MA::POOL_DESC::Flags</a> while creating <a class="el" href="class_d3_d12_m_a_1_1_pool.html" title="Custom memory pool.">D3D12MA::Pool</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>
 <h1><a class="anchor" id="linear_algorithm_free_at_once"></a>
@@ -113,7 +113,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="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eafb0e2dacce691336e717550a1df72474">D3D12MA::ALLOCATION_FLAG_UPPER_ADDRESS</a> to <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags.">D3D12MA::ALLOCATION_DESC::Flags</a>.</p>
+<p>To make allocation from the upper stack, add flag <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eafb0e2dacce691336e717550a1df72474">D3D12MA::ALLOCATION_FLAG_UPPER_ADDRESS</a> to <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags for the allocation.">D3D12MA::ALLOCATION_DESC::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_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e" title="Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional.">D3D12MA::POOL_DESC::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>E_OUTOFMEMORY</code> error.</p>
diff --git a/docs/html/namespace_d3_d12_m_a.html b/docs/html/namespace_d3_d12_m_a.html
index 6550c37..2b037ea 100644
--- a/docs/html/namespace_d3_d12_m_a.html
+++ b/docs/html/namespace_d3_d12_m_a.html
@@ -113,6 +113,18 @@
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_budget.html">Budget</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Statistics of current memory usage and available budget for a specific memory segment group.  <a href="struct_d3_d12_m_a_1_1_budget.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CALLOCATION_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">CPOOL_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CVIRTUAL_ALLOCATION_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">CVIRTUAL_BLOCK_DESC</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure.  <a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html">DEFRAGMENTATION_DESC</a></td></tr>
 <tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parameters for defragmentation.  <a href="struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html#details">More...</a><br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -319,7 +331,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags.">ALLOCATION_DESC::Flags</a>. </p>
+<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6" title="Flags for the allocation.">ALLOCATION_DESC::Flags</a>. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e" name="abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e"></a>ALLOCATION_FLAG_NONE&#160;</td><td class="fielddoc"><p>Zero. </p>
 </td></tr>
@@ -370,7 +382,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3" title="Flags.">ALLOCATOR_DESC::Flags</a>. </p>
+<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3" title="Flags for the entire allocator.">ALLOCATOR_DESC::Flags</a>. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ad5ae5a5e42b878f2e18ab5d1fbfb9916a2fb30967b492c27823a80b5de3aea26f" name="ad5ae5a5e42b878f2e18ab5d1fbfb9916a2fb30967b492c27823a80b5de3aea26f"></a>ALLOCATOR_FLAG_NONE&#160;</td><td class="fielddoc"><p>Zero. </p>
 </td></tr>
@@ -458,7 +470,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags.">POOL_DESC::Flags</a>. </p>
+<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4" title="Flags for the heap.">POOL_DESC::Flags</a>. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a919d8545365d6b7209a964f2b99936d1a5d8dc91add3423140809a550c7224d02" name="a919d8545365d6b7209a964f2b99936d1a5d8dc91add3423140809a550c7224d02"></a>POOL_FLAG_NONE&#160;</td><td class="fielddoc"><p>Zero. </p>
 </td></tr>
@@ -490,7 +502,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab848f8ad39b5bf8a7c8c077e113e7fc9" title="Flags.">VIRTUAL_ALLOCATION_DESC::Flags</a>. </p>
+<p>Bit flags to be used with <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab848f8ad39b5bf8a7c8c077e113e7fc9" title="Flags for the virtual allocation.">VIRTUAL_ALLOCATION_DESC::Flags</a>. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a7e4152ccaf661f5398b24a23cbe9ae72a03576295004dec9dc8f99a895d232027" name="a7e4152ccaf661f5398b24a23cbe9ae72a03576295004dec9dc8f99a895d232027"></a>VIRTUAL_ALLOCATION_FLAG_NONE&#160;</td><td class="fielddoc"><p>Zero. </p>
 </td></tr>
diff --git a/docs/html/optimal_allocation.html b/docs/html/optimal_allocation.html
index 688afb0..510aab4 100644
--- a/docs/html/optimal_allocation.html
+++ b/docs/html/optimal_allocation.html
@@ -110,9 +110,9 @@
 <div class="line"> </div>
 <div class="line">UINT64 freeBytes = videoMemBudget.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">BudgetBytes</a> - videoMemBudget.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">UsageBytes</a>;</div>
 <div class="line">gameStreamingSystem-&gt;SetAvailableFreeMemory(freeBytes);</div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html">D3D12MA::Budget</a></div><div class="ttdoc">Statistics of current memory usage and available budget for a specific memory segment group.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:442</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a326515f08d89ee2e31dcfdd5c1e8ac71"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">D3D12MA::Budget::BudgetBytes</a></div><div class="ttdeci">UINT64 BudgetBytes</div><div class="ttdoc">Estimated amount of memory available to the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:465</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a77a8c9e32d6602f95b7d1c285cddd253"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">D3D12MA::Budget::UsageBytes</a></div><div class="ttdeci">UINT64 UsageBytes</div><div class="ttdoc">Estimated current memory usage of the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:454</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html">D3D12MA::Budget</a></div><div class="ttdoc">Statistics of current memory usage and available budget for a specific memory segment group.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:472</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a326515f08d89ee2e31dcfdd5c1e8ac71"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">D3D12MA::Budget::BudgetBytes</a></div><div class="ttdeci">UINT64 BudgetBytes</div><div class="ttdoc">Estimated amount of memory available to the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:495</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a77a8c9e32d6602f95b7d1c285cddd253"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">D3D12MA::Budget::UsageBytes</a></div><div class="ttdeci">UINT64 UsageBytes</div><div class="ttdoc">Estimated current memory usage of the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:484</div></div>
 </div><!-- fragment --><dl class="section user"><dt>Implementation detail</dt><dd>DXGI interface offers function <code>IDXGIAdapter3::QueryVideoMemoryInfo</code> that queries the current memory usage and budget. This library automatically makes use of it when available (when you use recent enough version of the DirectX SDK). If not, it falls back to estimating the usage and budget based on the total amount of the allocated memory and 80% of the full memory capacity, respectively.</dd></dl>
 <dl class="section user"><dt>Implementation detail</dt><dd>Allocating large heaps and creating placed resources in them is one of the main features of this library. However, if allocating new such block would exceed the budget, it will automatically prefer creating the resource as committed to have exactly the right size, which can lower the chance of getting into trouble in case of over-commitment.</dd></dl>
 <p>When creating non-essential resources, you can use <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eab374417c1f22a833ead268a6c21424e6">D3D12MA::ALLOCATION_FLAG_WITHIN_BUDGET</a>. Then, in case the allocation would exceed the budget, the library will return failure from the function without attempting to allocate the actual D3D12 memory.</p>
@@ -143,45 +143,32 @@
 <p>Recent versions of DirectX 12 SDK offer function <code>ID3D12Device1::SetResidencyPriority</code> that sets a hint about the priority of a resource - how important it is to stay resident in the video memory. Setting the priority happens at the level of an entire memory heap. D3D12MA offers an interface to set this priority in form of <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6" title="Residency priority to be set for all allocations made in this pool. Optional.">D3D12MA::POOL_DESC::ResidencyPriority</a> parameter. It affects all allocations made out of the custom pool created with it, both placed inside large heaps and created as committed.</p>
 <p>It is recommended to create a custom pool for the purpose of using high residency priority of all resources that are critical for the performance, especially those that are written by the GPU, like render-target, depth-stencil textures, UAV textures and buffers. It is also worth creating them as committed, so that each one will have its own implicit heap. This can minimize the chance that an entire large heap is demoted to system memory, degrading performance of all the resources placed in it.</p>
 <p>Example:</p>
-<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a> poolDesc = {};</div>
-<div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a">HeapProperties</a>.Type = D3D12_HEAP_TYPE_DEFAULT;</div>
-<div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc">HeapFlags</a> = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS | D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;</div>
+<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a> poolDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a>{</div>
+<div class="line">    D3D12_HEAP_TYPE_DEFAULT,</div>
+<div class="line">    <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a> | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };</div>
 <div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6">ResidencyPriority</a> = D3D12_RESIDENCY_PRIORITY_HIGH; <span class="comment">// !!!</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_pool.html">D3D12MA::Pool</a>* pool;</div>
 <div class="line">HRESULT hr = allocator-&gt;CreatePool(&amp;poolDesc, &amp;pool);</div>
 <div class="line"><span class="comment">// Check hr...</span></div>
 <div class="line"> </div>
-<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a> allocDesc = {};</div>
-<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">CustomPool</a> = pool;</div>
-<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">Flags</a> = ALLOCATION_FLAG_COMMITTED; <span class="comment">// !!!</span></div>
+<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a> allocDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a>{</div>
+<div class="line">    pool,</div>
+<div class="line">    ALLOCATION_FLAG_COMMITTED }; <span class="comment">// !!!</span></div>
 <div class="line"> </div>
-<div class="line">D3D12_RESOURCE_DESC resDesc = {};</div>
-<div class="line">resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;</div>
-<div class="line">resDesc.Alignment = 0;</div>
-<div class="line">resDesc.Width = 1048576; <span class="comment">// Requested buffer size.</span></div>
-<div class="line">resDesc.Height = 1;</div>
-<div class="line">resDesc.DepthOrArraySize = 1;</div>
-<div class="line">resDesc.MipLevels = 1;</div>
-<div class="line">resDesc.Format = DXGI_FORMAT_UNKNOWN;</div>
-<div class="line">resDesc.SampleDesc.Count = 1;</div>
-<div class="line">resDesc.SampleDesc.Quality = 0;</div>
-<div class="line">resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;</div>
-<div class="line">resDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;</div>
+<div class="line">CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(</div>
+<div class="line">    1048576); <span class="comment">// Requested buffer size.</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a>* alloc;</div>
 <div class="line">hr = allocator-&gt;CreateResource(&amp;allocDesc, &amp;resDesc, D3D12_RESOURCE_STATE_COMMON,</div>
 <div class="line">    NULL, &amp;alloc, IID_NULL, NULL);</div>
 <div class="line"><span class="comment">// Check hr...</span></div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:491</div></div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_pool_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_pool.html">D3D12MA::Pool</a></div><div class="ttdoc">Custom memory pool.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:950</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:307</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a92dec49b788a334fc91c55340dfbace6"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">D3D12MA::ALLOCATION_DESC::Flags</a></div><div class="ttdeci">ALLOCATION_FLAGS Flags</div><div class="ttdoc">Flags.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:309</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_ab06b85f3cf3254f855b29264477e3934"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">D3D12MA::ALLOCATION_DESC::CustomPool</a></div><div class="ttdeci">Pool * CustomPool</div><div class="ttdoc">Custom pool to place the new resource in. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:337</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:865</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_a06e06813bcb5206e9f7a8b0564bf1d6a"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a">D3D12MA::POOL_DESC::HeapProperties</a></div><div class="ttdeci">D3D12_HEAP_PROPERTIES HeapProperties</div><div class="ttdoc">The parameters of memory heap where allocations of this pool should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:873</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_a2e6074af8c8ff7b957fe8d4b5036a5e6"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6">D3D12MA::POOL_DESC::ResidencyPriority</a></div><div class="ttdeci">D3D12_RESIDENCY_PRIORITY ResidencyPriority</div><div class="ttdoc">Residency priority to be set for all allocations made in this pool. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:938</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_a3795956e4fbfe7c3a23546e02e5d28dc"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc">D3D12MA::POOL_DESC::HeapFlags</a></div><div class="ttdeci">D3D12_HEAP_FLAGS HeapFlags</div><div class="ttdoc">Heap flags to be used when allocating heaps of this pool.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:884</div></div>
+<div class="ttc" id="a_d3_d12_mem_alloc_8h_html_ac3d50f134ad24c58df4a934b87847653"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a></div><div class="ttdeci">#define D3D12MA_RECOMMENDED_HEAP_FLAGS</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:134</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:521</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_pool_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_pool.html">D3D12MA::Pool</a></div><div class="ttdoc">Custom memory pool.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:984</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></div><div class="ttdoc">Helper structure that helps with complete and conscise initialization of the D3D12MA::ALLOCATION_DESC...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1649</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></div><div class="ttdoc">Helper structure that helps with complete and conscise initialization of the D3D12MA::POOL_DESC struc...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1685</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_a2e6074af8c8ff7b957fe8d4b5036a5e6"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6">D3D12MA::POOL_DESC::ResidencyPriority</a></div><div class="ttdeci">D3D12_RESIDENCY_PRIORITY ResidencyPriority</div><div class="ttdoc">Residency priority to be set for all allocations made in this pool. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:972</div></div>
 </div><!-- fragment --><p>Note this is not the same as explicit eviction controlled using <code>ID3D12Device::Evict</code> and <code>MakeResident</code> functions. Resources evicted explicitly are illegal to access until they are made resident again, while the demotion described here happens automatically and only slows down the execution.</p>
 <h1><a class="anchor" id="optimal_allocation_gpu_upload_heap"></a>
 GPU upload heap</h1>
@@ -213,21 +200,11 @@
 </ul>
 <p>GPU Upload Heap can be used for performance optimization of some resources that need to be written by the CPU and read by the GPU. It can be beneficial especially for resources that need to change frequently (often called "dynamic").</p>
 <p>D3D12MA supports GPU upload heap when recent enough version of DirectX 12 SDK is used and when the current system supports it. The support can be queried using function <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a3f3fd1e88cf2cd02257fe272e08a273c" title="Returns true if GPU Upload Heaps are supported on the current system.">D3D12MA::Allocator::IsGPUUploadHeapSupported()</a>. When it returns <code>TRUE</code>, you can create resources using <code>D3D12_HEAP_TYPE_GPU_UPLOAD</code>. You can also just try creating such resource. Example:</p>
-<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a> allocDesc = {};</div>
-<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a> = D3D12_HEAP_TYPE_GPU_UPLOAD; <span class="comment">// !!!</span></div>
+<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a> allocDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a>{</div>
+<div class="line">    D3D12_HEAP_TYPE_GPU_UPLOAD }; <span class="comment">// !!!</span></div>
 <div class="line"> </div>
-<div class="line">D3D12_RESOURCE_DESC resDesc = {};</div>
-<div class="line">resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;</div>
-<div class="line">resDesc.Alignment = 0;</div>
-<div class="line">resDesc.Width = 1048576; <span class="comment">// Requested buffer size.</span></div>
-<div class="line">resDesc.Height = 1;</div>
-<div class="line">resDesc.DepthOrArraySize = 1;</div>
-<div class="line">resDesc.MipLevels = 1;</div>
-<div class="line">resDesc.Format = DXGI_FORMAT_UNKNOWN;</div>
-<div class="line">resDesc.SampleDesc.Count = 1;</div>
-<div class="line">resDesc.SampleDesc.Quality = 0;</div>
-<div class="line">resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;</div>
-<div class="line">resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;</div>
+<div class="line">CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(</div>
+<div class="line">    1048576); <span class="comment">// Requested buffer size.</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a>* alloc;</div>
 <div class="line">ID3D12Resource* res;</div>
@@ -250,12 +227,13 @@
 <div class="line">{</div>
 <div class="line">    <span class="comment">// GPU Upload Heap not supported in this system.</span></div>
 <div class="line">    <span class="comment">// Fall back to creating a staging buffer in UPLOAD and another copy in DEFAULT.</span></div>
+<div class="line">    </div>
 <div class="line">    allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a> = D3D12_HEAP_TYPE_UPLOAD;</div>
 <div class="line">    <span class="comment">// ...</span></div>
 <div class="line">}</div>
 <div class="line"><span class="keywordflow">else</span></div>
 <div class="line">    <span class="comment">// Some other error code e.g., out of memory...</span></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:316</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:345</div></div>
 </div><!-- fragment --><h1><a class="anchor" id="optimal_allocation_committed_vs_placed"></a>
 Committed versus placed resources</h1>
 <p>When using D3D12 API directly, there are 3 ways of creating resources:</p>
@@ -293,30 +271,19 @@
 </div><!-- fragment --><p><b>You can request a new resource to be created as committed</b> by using <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675">D3D12MA::ALLOCATION_FLAG_COMMITTED</a>. Note that committed resources can also be created out of <a class="el" href="custom_pools.html">Custom memory pools</a>.</p>
 <p>You can also request all resources to be created as committed globally for the entire allocator by using <a class="el" href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916a068863dc0538ff4ea153b046b31e94fb">D3D12MA::ALLOCATOR_FLAG_ALWAYS_COMMITTED</a>. However, this contradicts the main purpose of using this library. It can also prevent certain other features of the library to be used. This flag should be used only for debugging purposes.</p>
 <p>You can create a custom pool with an explicit block size by specifying non-zero <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c" title="Size of a single heap (memory block) to be allocated as part of this pool, in bytes....">D3D12MA::POOL_DESC::BlockSize</a>. When doing this, all <b>resources created in such pool are placed</b> in those blocks (heaps) and never created as committed. Example:</p>
-<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a> poolDesc = {};</div>
-<div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc">HeapFlags</a> = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS | D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;</div>
-<div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a">HeapProperties</a>.Type = D3D12_HEAP_TYPE_DEFAULT;</div>
+<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a> poolDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a>{</div>
+<div class="line">    D3D12_HEAP_TYPE_DEFAULT,</div>
+<div class="line">    <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a> | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };</div>
 <div class="line">poolDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c">BlockSize</a> = 100llu * 1024 * 1024; <span class="comment">// 100 MB. Explicit BlockSize guarantees placed.</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_pool.html">D3D12MA::Pool</a>* pool;</div>
 <div class="line">HRESULT hr = allocator-&gt;CreatePool(&amp;poolDesc, &amp;pool);</div>
 <div class="line"><span class="comment">// Check hr...</span></div>
 <div class="line"> </div>
-<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a> allocDesc = {};</div>
-<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">CustomPool</a> = pool;</div>
+<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a> allocDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a>{ pool };</div>
 <div class="line"> </div>
-<div class="line">D3D12_RESOURCE_DESC resDesc = {};</div>
-<div class="line">resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;</div>
-<div class="line">resDesc.Alignment = 0;</div>
-<div class="line">resDesc.Width = 90llu * 1024 * 1024; <span class="comment">// 90 MB</span></div>
-<div class="line">resDesc.Height = 1;</div>
-<div class="line">resDesc.DepthOrArraySize = 1;</div>
-<div class="line">resDesc.MipLevels = 1;</div>
-<div class="line">resDesc.Format = DXGI_FORMAT_UNKNOWN;</div>
-<div class="line">resDesc.SampleDesc.Count = 1;</div>
-<div class="line">resDesc.SampleDesc.Quality = 0;</div>
-<div class="line">resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;</div>
-<div class="line">resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;</div>
+<div class="line">CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(</div>
+<div class="line">    90llu * 1024 * 1024); <span class="comment">// 90 MB</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a>* alloc;</div>
 <div class="line">ID3D12Resource* res;</div>
@@ -327,7 +294,7 @@
 <div class="line"><span class="comment">// Even a large buffer like this, filling 90% of the block, was created as placed!</span></div>
 <div class="line">assert(alloc-&gt;<a class="code hl_function" href="class_d3_d12_m_a_1_1_allocation.html#adca8d5a82bed492fe7265fcda6e53da2">GetHeap</a>() != NULL);</div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_adca8d5a82bed492fe7265fcda6e53da2"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#adca8d5a82bed492fe7265fcda6e53da2">D3D12MA::Allocation::GetHeap</a></div><div class="ttdeci">ID3D12Heap * GetHeap() const</div><div class="ttdoc">Returns memory heap that the resource is created in.</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_af7284cc51a8ed5b551075584256de23c"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c">D3D12MA::POOL_DESC::BlockSize</a></div><div class="ttdeci">UINT64 BlockSize</div><div class="ttdoc">Size of a single heap (memory block) to be allocated as part of this pool, in bytes....</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:891</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c_html_af7284cc51a8ed5b551075584256de23c"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c">D3D12MA::POOL_DESC::BlockSize</a></div><div class="ttdeci">UINT64 BlockSize</div><div class="ttdoc">Size of a single heap (memory block) to be allocated as part of this pool, in bytes....</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:925</div></div>
 </div><!-- fragment --><p><b>You can request a new resource to be created as placed</b> by using <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea4d6808f27de6d0ae57014ec1f4d54326">D3D12MA::ALLOCATION_FLAG_CAN_ALIAS</a>. This is required especially if you plan to create another resource in the same region of memory, aliasing with your resource - hence the name of this flag.</p>
 <p>Note <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea4d6808f27de6d0ae57014ec1f4d54326">D3D12MA::ALLOCATION_FLAG_CAN_ALIAS</a> can be even combined with <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea661a5472dba3dcecc5a2cc92afd25675">D3D12MA::ALLOCATION_FLAG_COMMITTED</a>. In this case, the resource is not created as committed, but it is also not placed as part of a larger heap. What happens instead is that a new heap is created with the exact size required for the resource, and the resource is created in it, placed at offset 0.</p>
 <h1><a class="anchor" id="optimal_allocation_resource_alignment"></a>
diff --git a/docs/html/quick_start.html b/docs/html/quick_start.html
index 8a00dba..f287d64 100644
--- a/docs/html/quick_start.html
+++ b/docs/html/quick_start.html
@@ -103,26 +103,20 @@
 <div class="ttc" id="a_d3_d12_mem_alloc_8h_html"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></div></div>
 </div><!-- fragment --><p>(4.) Right after you created <code>ID3D12Device</code>, fill <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html" title="Parameters of created Allocator object. To be used with CreateAllocator().">D3D12MA::ALLOCATOR_DESC</a> structure and call function <a class="el" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0" title="Creates new main D3D12MA::Allocator object and returns it through ppAllocator.">D3D12MA::CreateAllocator</a> to create the main <a class="el" href="class_d3_d12_m_a_1_1_allocator.html" title="Represents main object of this library initialized for particular ID3D12Device.">D3D12MA::Allocator</a> object.</p>
 <p>Please note that all symbols of the library are declared inside <a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a> namespace.</p>
-<div class="fragment"><div class="line">IDXGIAdapter* adapter = (...)</div>
-<div class="line">ID3D12Device* device = (...)</div>
+<div class="fragment"><div class="line">IDXGIAdapter* adapter = ...</div>
+<div class="line">ID3D12Device* device = ...</div>
 <div class="line"> </div>
-<div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html">D3D12MA::ALLOCATOR_DESC</a> allocatorDesc = {};</div>
-<div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c">pDevice</a> = device;</div>
-<div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b">pAdapter</a> = adapter;</div>
-<div class="line"><span class="comment">// These flags are optional but recommended.</span></div>
-<div class="line">allocatorDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3">Flags</a> = <a class="code hl_enumvalue" href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916adfbfd20d716f2a46f74d6226056fef1e">D3D12MA::ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</a> |</div>
-<div class="line">    <a class="code hl_enumvalue" href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916ae7dc7ab9168148281ebfe1586f554335">D3D12MA::ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED</a>;</div>
+<div class="line">D3D12MA::ALLOCATOR_DESC allocatorDesc = {};</div>
+<div class="line">allocatorDesc.pDevice = device;</div>
+<div class="line">allocatorDesc.pAdapter = adapter;</div>
+<div class="line">allocatorDesc.Flags = <a class="code hl_define" href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a>;</div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a>* allocator;</div>
 <div class="line">HRESULT hr = <a class="code hl_function" href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0">D3D12MA::CreateAllocator</a>(&amp;allocatorDesc, &amp;allocator);</div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocator_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a></div><div class="ttdoc">Represents main object of this library initialized for particular ID3D12Device.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1118</div></div>
+<div class="line"><span class="comment">// Check hr...</span></div>
+<div class="ttc" id="a_d3_d12_mem_alloc_8h_html_accfbeae642feeacf353ce695e91a5e73"><div class="ttname"><a href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a></div><div class="ttdeci">#define D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</div><div class="ttdoc">Set of flags recommended for use in D3D12MA::ALLOCATOR_DESC::Flags for optimal performance.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:126</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocator_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocator.html">D3D12MA::Allocator</a></div><div class="ttdoc">Represents main object of this library initialized for particular ID3D12Device.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1155</div></div>
 <div class="ttc" id="anamespace_d3_d12_m_a_html_ab7a1cd1683986d75ce1488b0920f4cb0"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0">D3D12MA::CreateAllocator</a></div><div class="ttdeci">D3D12MA_API HRESULT CreateAllocator(const ALLOCATOR_DESC *pDesc, Allocator **ppAllocator)</div><div class="ttdoc">Creates new main D3D12MA::Allocator object and returns it through ppAllocator.</div></div>
-<div class="ttc" id="anamespace_d3_d12_m_a_html_ad5ae5a5e42b878f2e18ab5d1fbfb9916adfbfd20d716f2a46f74d6226056fef1e"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916adfbfd20d716f2a46f74d6226056fef1e">D3D12MA::ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</a></div><div class="ttdeci">@ ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1064</div></div>
-<div class="ttc" id="anamespace_d3_d12_m_a_html_ad5ae5a5e42b878f2e18ab5d1fbfb9916ae7dc7ab9168148281ebfe1586f554335"><div class="ttname"><a href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916ae7dc7ab9168148281ebfe1586f554335">D3D12MA::ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED</a></div><div class="ttdeci">@ ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1054</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html">D3D12MA::ALLOCATOR_DESC</a></div><div class="ttdoc">Parameters of created Allocator object. To be used with CreateAllocator().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1079</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_abf9a9f87f0ffea52816efd363c5fcd7b"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#abf9a9f87f0ffea52816efd363c5fcd7b">D3D12MA::ALLOCATOR_DESC::pAdapter</a></div><div class="ttdeci">IDXGIAdapter * pAdapter</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1105</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_ad8abad7c80ea0d8df27c85243ce720f3"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ad8abad7c80ea0d8df27c85243ce720f3">D3D12MA::ALLOCATOR_DESC::Flags</a></div><div class="ttdeci">ALLOCATOR_FLAGS Flags</div><div class="ttdoc">Flags.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1081</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c_html_ada1bf21205065b3aa0284b5a9ee1cb3c"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html#ada1bf21205065b3aa0284b5a9ee1cb3c">D3D12MA::ALLOCATOR_DESC::pDevice</a></div><div class="ttdeci">ID3D12Device * pDevice</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1087</div></div>
 </div><!-- fragment --><p>(5.) Right before destroying the D3D12 device, destroy the allocator object.</p>
 <div class="fragment"><div class="line">allocator-&gt;Release();</div>
 </div><!-- fragment --><p>Objects of this library must be destroyed by calling <code>Release</code> method. They are somewhat compatible with COM: they implement <code>IUnknown</code> interface with its virtual methods: <code>AddRef</code>, <code>Release</code>, <code>QueryInterface</code>, and they are reference-counted internally. You can use smart pointers designed for COM with objects of this library - e.g. <code>CComPtr</code> or <code>Microsoft::WRL::ComPtr</code>. The reference counter is thread-safe. <code>QueryInterface</code> method supports only <code>IUnknown</code>, as classes of this library don't define their own GUIDs.</p>
@@ -155,12 +149,15 @@
 <div class="line">    NULL,</div>
 <div class="line">    &amp;allocation,</div>
 <div class="line">    IID_NULL, NULL);</div>
+<div class="line"><span class="comment">// Check hr...</span></div>
 <div class="line"> </div>
-<div class="line"><span class="comment">// Use allocation-&gt;GetResource()...</span></div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:491</div></div>
+<div class="line">ID3D12Resource* res = allocation-&gt;<a class="code hl_function" href="class_d3_d12_m_a_1_1_allocation.html#ad00308118252f82d8f803c623c67bf18">GetResource</a>();</div>
+<div class="line"><span class="comment">// Use res...</span></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:521</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_ad00308118252f82d8f803c623c67bf18"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#ad00308118252f82d8f803c623c67bf18">D3D12MA::Allocation::GetResource</a></div><div class="ttdeci">ID3D12Resource * GetResource() const</div><div class="ttdoc">Returns D3D12 resource associated with this object.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:550</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocator_html_aa37d6b9fe8ea0864f7a35b9d68e8345a"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a">D3D12MA::Allocator::CreateResource</a></div><div class="ttdeci">HRESULT CreateResource(const ALLOCATION_DESC *pAllocDesc, const D3D12_RESOURCE_DESC *pResourceDesc, D3D12_RESOURCE_STATES InitialResourceState, const D3D12_CLEAR_VALUE *pOptimizedClearValue, Allocation **ppAllocation, REFIID riidResource, void **ppvResource)</div><div class="ttdoc">Allocates memory and creates a D3D12 resource (buffer or texture). This is the main allocation functi...</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:307</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:316</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:336</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:345</div></div>
 </div><!-- fragment --><p>You need to release the allocation object when no longer needed. This will also release the D3D12 resource.</p>
 <div class="fragment"><div class="line">allocation-&gt;Release();</div>
 </div><!-- fragment --><p>The advantage of using the allocator instead of creating committed resource, and the main purpose of this library, is that it can decide to allocate bigger memory heap internally using <code>ID3D12Device::CreateHeap</code> and place multiple resources in it, at different offsets, using <code>ID3D12Device::CreatePlacedResource</code>. The library manages its own collection of allocated memory blocks (heaps) and remembers which parts of them are occupied and which parts are free to be used for new resources.</p>
@@ -201,7 +198,7 @@
 <p>When using this library, you can map and use your resources normally without considering whether they are created as committed resources or placed resources in one large heap.</p>
 <p>Example for buffer created and filled in <code>UPLOAD</code> heap type:</p>
 <div class="fragment"><div class="line"><span class="keyword">const</span> UINT64 bufSize = 65536;</div>
-<div class="line"><span class="keyword">const</span> <span class="keywordtype">float</span>* bufData = (...);</div>
+<div class="line"><span class="keyword">const</span> <span class="keywordtype">float</span>* bufData = ...;</div>
 <div class="line"> </div>
 <div class="line">D3D12_RESOURCE_DESC resourceDesc = {};</div>
 <div class="line">resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;</div>
@@ -236,6 +233,60 @@
 <div class="line">memcpy(mappedPtr, bufData, bufSize);</div>
 <div class="line"> </div>
 <div class="line">resource-&gt;Unmap(0, NULL);</div>
+</div><!-- fragment --><h1><a class="anchor" id="quick_start_helper_structures"></a>
+Helper structures</h1>
+<p>DirectX 12 Agility SDK offers a library of helpers in files "build\native\include\d3dx12\*.h". They include structures that help with complete and concise initialization of the core D3D12 <code>*_DESC</code> structures by using some basic C++ features (constructors, static methods, default parameters). They inherit from these structures, so they support implicit casting to them. For example, structure <code>CD3DX12_RESOURCE_DESC</code> can be used to conveniently fill in structure <code>D3D12_RESOURCE_DESC</code>.</p>
+<p>Similarly, this library provides a set of helper structures that aid in initialization of some of the <code>*_DESC</code> structures defined in the library. These are:</p>
+<ul>
+<li><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::ALLOCATION_DESC...">D3D12MA::CALLOCATION_DESC</a>, which inherits from <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a>.</li>
+<li><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::POOL_DESC struc...">D3D12MA::CPOOL_DESC</a>, which inherits from <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a>.</li>
+<li><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_BLOCK_D...">D3D12MA::CVIRTUAL_BLOCK_DESC</a>, which inherits from <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a>.</li>
+<li><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_ALLOCAT...">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a>, which inherits from <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a>.</li>
+</ul>
+<p>For example, when you want to create a buffer in the <code>UPLAOD</code> heap using minimal allocation time, you can use base structures:</p>
+<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a> allocDesc;</div>
+<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">Flags</a> = <a class="code hl_enumvalue" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eaa3ded8847563c24b4522af0586dbd2cb">D3D12MA::ALLOCATION_FLAG_STRATEGY_MIN_TIME</a>;</div>
+<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a> = D3D12_HEAP_TYPE_UPLOAD;</div>
+<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">ExtraHeapFlags</a> = D3D12_HEAP_FLAG_NONE;</div>
+<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">CustomPool</a> = NULL;</div>
+<div class="line">allocDesc.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ac638dd987f1326e2fdab91892d994d35">pPrivateData</a> = NULL;</div>
+<div class="line"> </div>
+<div class="line">D3D12_RESOURCE_DESC resDesc;</div>
+<div class="line">resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;</div>
+<div class="line">resDesc.Alignment = 0;</div>
+<div class="line">resDesc.Width = myBufSize;</div>
+<div class="line">resDesc.Height = 1;</div>
+<div class="line">resDesc.DepthOrArraySize = 1;</div>
+<div class="line">resDesc.MipLevels = 1;</div>
+<div class="line">resDesc.Format = DXGI_FORMAT_UNKNOWN;</div>
+<div class="line">resDesc.SampleDesc.Count = 1;</div>
+<div class="line">resDesc.SampleDesc.Quality = 0;</div>
+<div class="line">resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;</div>
+<div class="line">resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;</div>
+<div class="line"> </div>
+<div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a>* alloc;</div>
+<div class="line">ID3D12Resource* res;</div>
+<div class="line">HRESULT hr = allocator-&gt;<a class="code hl_function" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a">CreateResource</a>(&amp;allocDesc, &amp;resDesc,</div>
+<div class="line">    D3D12_RESOURCE_STATE_COMMON, NULL, &amp;alloc, IID_PPV_ARGS(&amp;res));</div>
+<div class="line"><span class="comment">// Check hr...</span></div>
+<div class="ttc" id="anamespace_d3_d12_m_a_html_abbad31a7e0b3d09d77f3fb704b77645eaa3ded8847563c24b4522af0586dbd2cb"><div class="ttname"><a href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eaa3ded8847563c24b4522af0586dbd2cb">D3D12MA::ALLOCATION_FLAG_STRATEGY_MIN_TIME</a></div><div class="ttdeci">@ ALLOCATION_FLAG_STRATEGY_MIN_TIME</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:314</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a92dec49b788a334fc91c55340dfbace6"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">D3D12MA::ALLOCATION_DESC::Flags</a></div><div class="ttdeci">ALLOCATION_FLAGS Flags</div><div class="ttdoc">Flags for the allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:338</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a97878838f976b2d1e6b1a76881035690"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">D3D12MA::ALLOCATION_DESC::ExtraHeapFlags</a></div><div class="ttdeci">D3D12_HEAP_FLAGS ExtraHeapFlags</div><div class="ttdoc">Additional heap flags to be used when allocating memory.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:361</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_ab06b85f3cf3254f855b29264477e3934"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">D3D12MA::ALLOCATION_DESC::CustomPool</a></div><div class="ttdeci">Pool * CustomPool</div><div class="ttdoc">Custom pool to place the new resource in. Optional.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:367</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_ac638dd987f1326e2fdab91892d994d35"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ac638dd987f1326e2fdab91892d994d35">D3D12MA::ALLOCATION_DESC::pPrivateData</a></div><div class="ttdeci">void * pPrivateData</div><div class="ttdoc">Custom general-purpose pointer that will be stored in D3D12MA::Allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:369</div></div>
+</div><!-- fragment --><p>Or you can use helper structs from both D3X12 library and this library to make the code shorter:</p>
+<div class="fragment"><div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a> allocDesc = <a class="code hl_struct" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a>{</div>
+<div class="line">    D3D12_HEAP_TYPE_UPLOAD,</div>
+<div class="line">    <a class="code hl_enumvalue" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645eaa3ded8847563c24b4522af0586dbd2cb">D3D12MA::ALLOCATION_FLAG_STRATEGY_MIN_TIME</a> };</div>
+<div class="line"> </div>
+<div class="line">CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(myBufSize);</div>
+<div class="line"> </div>
+<div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a>* alloc;</div>
+<div class="line">ID3D12Resource* res;</div>
+<div class="line">HRESULT hr = allocator-&gt;<a class="code hl_function" href="class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a">CreateResource</a>(&amp;allocDesc, &amp;resDesc,</div>
+<div class="line">    D3D12_RESOURCE_STATE_COMMON, NULL, &amp;alloc, IID_PPV_ARGS(&amp;res));</div>
+<div class="line"><span class="comment">// Check hr...</span></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></div><div class="ttdoc">Helper structure that helps with complete and conscise initialization of the D3D12MA::ALLOCATION_DESC...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1649</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 0e7d15d..3d9ce60 100644
--- a/docs/html/resource_aliasing.html
+++ b/docs/html/resource_aliasing.html
@@ -166,11 +166,11 @@
 <div class="line">res2-&gt;Release();</div>
 <div class="line">res1-&gt;Release();</div>
 <div class="line">alloc-&gt;Release();</div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:491</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html">D3D12MA::Allocation</a></div><div class="ttdoc">Represents single memory allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:521</div></div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_allocation_html_adca8d5a82bed492fe7265fcda6e53da2"><div class="ttname"><a href="class_d3_d12_m_a_1_1_allocation.html#adca8d5a82bed492fe7265fcda6e53da2">D3D12MA::Allocation::GetHeap</a></div><div class="ttdeci">ID3D12Heap * GetHeap() const</div><div class="ttdoc">Returns memory heap that the resource is created in.</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:307</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a97878838f976b2d1e6b1a76881035690"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">D3D12MA::ALLOCATION_DESC::ExtraHeapFlags</a></div><div class="ttdeci">D3D12_HEAP_FLAGS ExtraHeapFlags</div><div class="ttdoc">Additional heap flags to be used when allocating memory.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:332</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:316</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:336</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a97878838f976b2d1e6b1a76881035690"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">D3D12MA::ALLOCATION_DESC::ExtraHeapFlags</a></div><div class="ttdeci">D3D12_HEAP_FLAGS ExtraHeapFlags</div><div class="ttdoc">Additional heap flags to be used when allocating memory.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:361</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aa46b3c0456e5a23edef3328607ebf4d7"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">D3D12MA::ALLOCATION_DESC::HeapType</a></div><div class="ttdeci">D3D12_HEAP_TYPE HeapType</div><div class="ttdoc">The type of memory heap where the new allocation should be placed.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:345</div></div>
 </div><!-- fragment --><p>Remember that using resouces that alias in memory requires proper synchronization. You need to issue a special barrier of type <code>D3D12_RESOURCE_BARRIER_TYPE_ALIASING</code>. You also need to treat a resource after aliasing as uninitialized - containing garbage data. For example, if you use <code>res1</code> and then want to use <code>res2</code>, you need to first initialize <code>res2</code> using either Clear, Discard, or Copy to the entire resource.</p>
 <p>Additional considerations:</p>
 <ul>
diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js
index b8c1d11..ec40df7 100644
--- a/docs/html/search/all_11.js
+++ b/docs/html/search/all_11.js
@@ -14,6 +14,7 @@
   ['statistics_11',['Statistics',['../struct_d3_d12_m_a_1_1_statistics.html',1,'D3D12MA::Statistics'],['../statistics.html',1,'Statistics'],['../virtual_allocator.html#virtual_allocator_statistics',1,'Statistics']]],
   ['statistics_12',['Numeric statistics',['../statistics.html#statistics_numeric_statistics',1,'']]],
   ['stats_13',['Stats',['../struct_d3_d12_m_a_1_1_detailed_statistics.html#a2490d4a08a5d47c87a699001dfc8737f',1,'D3D12MA::DetailedStatistics::Stats'],['../struct_d3_d12_m_a_1_1_budget.html#a1255508930766db238cfb1312b15f1cf',1,'D3D12MA::Budget::Stats']]],
-  ['sub_20allocating_20buffers_14',['Sub-allocating buffers',['../optimal_allocation.html#optimal_allocation_suballocating_buffers',1,'']]],
-  ['supported_15',['Features not supported',['../general_considerations.html#general_considerations_features_not_supported',1,'']]]
+  ['structures_14',['Helper structures',['../quick_start.html#quick_start_helper_structures',1,'']]],
+  ['sub_20allocating_20buffers_15',['Sub-allocating buffers',['../optimal_allocation.html#optimal_allocation_suballocating_buffers',1,'']]],
+  ['supported_16',['Features not supported',['../general_considerations.html#general_considerations_features_not_supported',1,'']]]
 ];
diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js
index 6a8b92b..1359221 100644
--- a/docs/html/search/all_2.js
+++ b/docs/html/search/all_2.js
@@ -1,26 +1,30 @@
 var searchData=
 [
-  ['calculatestatistics_0',['CalculateStatistics',['../class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910',1,'D3D12MA::Pool::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22',1,'D3D12MA::Allocator::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9',1,'D3D12MA::VirtualBlock::CalculateStatistics(DetailedStatistics *pStats) const']]],
-  ['clear_1',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]],
-  ['committed_20versus_20placed_20resources_2',['Committed versus placed resources',['../optimal_allocation.html#optimal_allocation_committed_vs_placed',1,'']]],
-  ['compatibility_3',['Versioning and compatibility',['../general_considerations.html#general_considerations_versioning_and_compatibility',1,'']]],
-  ['configuration_4',['Configuration',['../configuration.html',1,'index']]],
-  ['considerations_5',['considerations',['../linear_algorithm.html#linear_algorithm_additional_considerations',1,'Additional considerations'],['../virtual_allocator.html#virtual_allocator_additional_considerations',1,'Additional considerations'],['../general_considerations.html',1,'General considerations']]],
-  ['contents_6',['Table of contents',['../index.html#main_table_of_contents',1,'']]],
-  ['counting_7',['Resource reference counting',['../quick_start.html#quick_start_resource_reference_counting',1,'']]],
-  ['cpu_20memory_20allocator_8',['Custom CPU memory allocator',['../configuration.html#custom_memory_allocator',1,'']]],
-  ['createaliasingresource_9',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]],
-  ['createaliasingresource1_10',['CreateAliasingResource1',['../class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6',1,'D3D12MA::Allocator']]],
-  ['createaliasingresource2_11',['CreateAliasingResource2',['../class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453',1,'D3D12MA::Allocator']]],
-  ['createallocator_12',['CreateAllocator',['../class_d3_d12_m_a_1_1_allocator.html#a6e114ef3b4a791a3bf2e3109a3971559',1,'D3D12MA::Allocator::CreateAllocator()'],['../namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0',1,'D3D12MA::CreateAllocator()']]],
-  ['createpool_13',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]],
-  ['createresource_14',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]],
-  ['createresource2_15',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#a7a1c79c79a7a573c438aa45c4a531b96',1,'D3D12MA::Allocator']]],
-  ['createresource3_16',['CreateResource3',['../class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747',1,'D3D12MA::Allocator']]],
-  ['createvirtualblock_17',['CreateVirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html#ae5650809a150e3283abd307c88ee45bb',1,'D3D12MA::VirtualBlock::CreateVirtualBlock()'],['../namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98',1,'D3D12MA::CreateVirtualBlock()']]],
-  ['creating_20resources_18',['Creating resources',['../quick_start.html#quick_start_creating_resources',1,'']]],
-  ['creating_20virtual_20block_19',['Creating virtual block',['../virtual_allocator.html#virtual_allocator_creating_virtual_block',1,'']]],
-  ['custom_20cpu_20memory_20allocator_20',['Custom CPU memory allocator',['../configuration.html#custom_memory_allocator',1,'']]],
-  ['custom_20memory_20pools_21',['Custom memory pools',['../custom_pools.html',1,'optimal_allocation']]],
-  ['custompool_22',['CustomPool',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934',1,'D3D12MA::ALLOCATION_DESC']]]
+  ['calculatestatistics_0',['CalculateStatistics',['../class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910',1,'D3D12MA::Pool::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22',1,'D3D12MA::Allocator::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9',1,'D3D12MA::VirtualBlock::CalculateStatistics()']]],
+  ['callocation_5fdesc_1',['CALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA::CALLOCATION_DESC'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ae18d216821f86a1f35ea54bcd41c6e86',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(const ALLOCATION_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a5c552f3160fb93b65ed16db4f6412a39',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(Pool *customPool, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a8916820e2d709379eb3bcd2fb7e9848f',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(D3D12_HEAP_TYPE heapType, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL, D3D12_HEAP_FLAGS extraHeapFlags=D3D12_HEAP_FLAG_NONE) noexcept']]],
+  ['clear_2',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]],
+  ['committed_20versus_20placed_20resources_3',['Committed versus placed resources',['../optimal_allocation.html#optimal_allocation_committed_vs_placed',1,'']]],
+  ['compatibility_4',['Versioning and compatibility',['../general_considerations.html#general_considerations_versioning_and_compatibility',1,'']]],
+  ['configuration_5',['Configuration',['../configuration.html',1,'index']]],
+  ['considerations_6',['considerations',['../linear_algorithm.html#linear_algorithm_additional_considerations',1,'Additional considerations'],['../virtual_allocator.html#virtual_allocator_additional_considerations',1,'Additional considerations'],['../general_considerations.html',1,'General considerations']]],
+  ['contents_7',['Table of contents',['../index.html#main_table_of_contents',1,'']]],
+  ['counting_8',['Resource reference counting',['../quick_start.html#quick_start_resource_reference_counting',1,'']]],
+  ['cpool_5fdesc_9',['CPOOL_DESC',['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html',1,'D3D12MA::CPOOL_DESC'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#ab2310e41ea92aa64dfab4a3366a60cc3',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(const POOL_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a5de61391fddfd37d91a0ec5cb7e84c1b',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(D3D12_HEAP_TYPE heapType, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a0d1e436a90bb4a07c55a5ecf60618be3',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(const D3D12_HEAP_PROPERTIES heapProperties, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept']]],
+  ['cpu_20memory_20allocator_10',['Custom CPU memory allocator',['../configuration.html#custom_memory_allocator',1,'']]],
+  ['createaliasingresource_11',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]],
+  ['createaliasingresource1_12',['CreateAliasingResource1',['../class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6',1,'D3D12MA::Allocator']]],
+  ['createaliasingresource2_13',['CreateAliasingResource2',['../class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453',1,'D3D12MA::Allocator']]],
+  ['createallocator_14',['CreateAllocator',['../class_d3_d12_m_a_1_1_allocator.html#a6e114ef3b4a791a3bf2e3109a3971559',1,'D3D12MA::Allocator::CreateAllocator()'],['../namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0',1,'D3D12MA::CreateAllocator()']]],
+  ['createpool_15',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]],
+  ['createresource_16',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]],
+  ['createresource2_17',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#a7a1c79c79a7a573c438aa45c4a531b96',1,'D3D12MA::Allocator']]],
+  ['createresource3_18',['CreateResource3',['../class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747',1,'D3D12MA::Allocator']]],
+  ['createvirtualblock_19',['CreateVirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html#ae5650809a150e3283abd307c88ee45bb',1,'D3D12MA::VirtualBlock::CreateVirtualBlock()'],['../namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98',1,'D3D12MA::CreateVirtualBlock()']]],
+  ['creating_20resources_20',['Creating resources',['../quick_start.html#quick_start_creating_resources',1,'']]],
+  ['creating_20virtual_20block_21',['Creating virtual block',['../virtual_allocator.html#virtual_allocator_creating_virtual_block',1,'']]],
+  ['custom_20cpu_20memory_20allocator_22',['Custom CPU memory allocator',['../configuration.html#custom_memory_allocator',1,'']]],
+  ['custom_20memory_20pools_23',['Custom memory pools',['../custom_pools.html',1,'optimal_allocation']]],
+  ['custompool_24',['CustomPool',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934',1,'D3D12MA::ALLOCATION_DESC']]],
+  ['cvirtual_5fallocation_5fdesc_25',['CVIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#abc6429b119b65f7cd3ed5c5bd4d36d85',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC(const VIRTUAL_ALLOCATION_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af72d9f4003fc6b86f76268aa8529d43a',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC(UINT64 size, UINT64 alignment, VIRTUAL_ALLOCATION_FLAGS flags=VIRTUAL_ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept']]],
+  ['cvirtual_5fblock_5fdesc_26',['CVIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA::CVIRTUAL_BLOCK_DESC'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a223f6535756a128b7fe86f0aa10de9af',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC(const VIRTUAL_BLOCK_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2984a0b07b432ed8baf387d5230b7112',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC(UINT64 size, VIRTUAL_BLOCK_FLAGS flags=VIRTUAL_BLOCK_FLAG_NONE, const ALLOCATION_CALLBACKS *allocationCallbacks=NULL) noexcept']]]
 ];
diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js
index 89ce51f..2600a14 100644
--- a/docs/html/search/all_3.js
+++ b/docs/html/search/all_3.js
@@ -2,28 +2,32 @@
 [
   ['d3d12_20memory_20allocator_0',['D3D12 Memory Allocator',['../index.html',1,'']]],
   ['d3d12ma_1',['D3D12MA',['../namespace_d3_d12_m_a.html',1,'']]],
-  ['d3d12ma_5fdelete_2',['D3D12MA_DELETE',['../class_d3_d12_m_a_1_1_allocation.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocation::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_defragmentation_context.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::DefragmentationContext::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_pool.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Pool::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_allocator.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocator::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::VirtualBlock::D3D12MA_DELETE()']]],
-  ['d3d12ma_5fdxgi_5f1_5f4_3',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]],
-  ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_4',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]],
-  ['d3d12memalloc_2eh_5',['D3D12MemAlloc.h',['../_d3_d12_mem_alloc_8h.html',1,'']]],
-  ['deallocation_6',['Deallocation',['../virtual_allocator.html#virtual_allocator_deallocation',1,'']]],
-  ['debug_20margins_7',['Debug margins',['../configuration.html#debug_margins',1,'']]],
-  ['defragmentation_8',['Defragmentation',['../defragmentation.html',1,'optimal_allocation']]],
-  ['defragmentation_5fdesc_9',['DEFRAGMENTATION_DESC',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
-  ['defragmentation_5fflag_5falgorithm_5fbalanced_10',['DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4ace3a84861ed6a1b8066fa9c12c7e89b9',1,'D3D12MA']]],
-  ['defragmentation_5fflag_5falgorithm_5ffast_11',['DEFRAGMENTATION_FLAG_ALGORITHM_FAST',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13',1,'D3D12MA']]],
-  ['defragmentation_5fflag_5falgorithm_5ffull_12',['DEFRAGMENTATION_FLAG_ALGORITHM_FULL',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4af205647f08a5c2cddced83ed66892467',1,'D3D12MA']]],
-  ['defragmentation_5fflag_5falgorithm_5fmask_13',['DEFRAGMENTATION_FLAG_ALGORITHM_MASK',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a567e0fe890cc07d8dd6576584e8d9f2d',1,'D3D12MA']]],
-  ['defragmentation_5fflags_14',['DEFRAGMENTATION_FLAGS',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4',1,'D3D12MA']]],
-  ['defragmentation_5fmove_15',['DEFRAGMENTATION_MOVE',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html',1,'D3D12MA']]],
-  ['defragmentation_5fmove_5foperation_16',['DEFRAGMENTATION_MOVE_OPERATION',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602',1,'D3D12MA']]],
-  ['defragmentation_5fmove_5foperation_5fcopy_17',['DEFRAGMENTATION_MOVE_OPERATION_COPY',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602a29a5c20322e633f6c34ddebd16bc61ac',1,'D3D12MA']]],
-  ['defragmentation_5fmove_5foperation_5fdestroy_18',['DEFRAGMENTATION_MOVE_OPERATION_DESTROY',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602aa2143507d723de458c2ed94e143ac242',1,'D3D12MA']]],
-  ['defragmentation_5fmove_5foperation_5fignore_19',['DEFRAGMENTATION_MOVE_OPERATION_IGNORE',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602abefe270a1803998dda3f8e01ec3a4ad6',1,'D3D12MA']]],
-  ['defragmentation_5fpass_5fmove_5finfo_20',['DEFRAGMENTATION_PASS_MOVE_INFO',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html',1,'D3D12MA']]],
-  ['defragmentation_5fstats_21',['DEFRAGMENTATION_STATS',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html',1,'D3D12MA']]],
-  ['defragmentationcontext_22',['DefragmentationContext',['../class_d3_d12_m_a_1_1_defragmentation_context.html',1,'D3D12MA']]],
-  ['detailedstatistics_23',['DetailedStatistics',['../struct_d3_d12_m_a_1_1_detailed_statistics.html',1,'D3D12MA']]],
-  ['double_20stack_24',['Double stack',['../linear_algorithm.html#linear_algorithm_double_stack',1,'']]],
-  ['dump_25',['JSON dump',['../statistics.html#statistics_json_dump',1,'']]]
+  ['d3d12ma_5fcreate_5fnot_5fzeroed_5favailable_2',['D3D12MA_CREATE_NOT_ZEROED_AVAILABLE',['../_d3_d12_mem_alloc_8h.html#a6df70df4d9e792713418dd4062b07c3a',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5fdelete_3',['D3D12MA_DELETE',['../class_d3_d12_m_a_1_1_allocation.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocation::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_defragmentation_context.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::DefragmentationContext::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_pool.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Pool::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_allocator.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::Allocator::D3D12MA_DELETE()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a968f13f23d03e50cc50b87835b6d5a85',1,'D3D12MA::VirtualBlock::D3D12MA_DELETE()']]],
+  ['d3d12ma_5fdxgi_5f1_5f4_4',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fallocator_5fflags_5',['D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS',['../_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fheap_5fflags_6',['D3D12MA_RECOMMENDED_HEAP_FLAGS',['../_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fpool_5fflags_7',['D3D12MA_RECOMMENDED_POOL_FLAGS',['../_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_8',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]],
+  ['d3d12memalloc_2eh_9',['D3D12MemAlloc.h',['../_d3_d12_mem_alloc_8h.html',1,'']]],
+  ['deallocation_10',['Deallocation',['../virtual_allocator.html#virtual_allocator_deallocation',1,'']]],
+  ['debug_20margins_11',['Debug margins',['../configuration.html#debug_margins',1,'']]],
+  ['defragmentation_12',['Defragmentation',['../defragmentation.html',1,'optimal_allocation']]],
+  ['defragmentation_5fdesc_13',['DEFRAGMENTATION_DESC',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
+  ['defragmentation_5fflag_5falgorithm_5fbalanced_14',['DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4ace3a84861ed6a1b8066fa9c12c7e89b9',1,'D3D12MA']]],
+  ['defragmentation_5fflag_5falgorithm_5ffast_15',['DEFRAGMENTATION_FLAG_ALGORITHM_FAST',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a9d0301a81136ca79e3ba52542c6d2e13',1,'D3D12MA']]],
+  ['defragmentation_5fflag_5falgorithm_5ffull_16',['DEFRAGMENTATION_FLAG_ALGORITHM_FULL',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4af205647f08a5c2cddced83ed66892467',1,'D3D12MA']]],
+  ['defragmentation_5fflag_5falgorithm_5fmask_17',['DEFRAGMENTATION_FLAG_ALGORITHM_MASK',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4a567e0fe890cc07d8dd6576584e8d9f2d',1,'D3D12MA']]],
+  ['defragmentation_5fflags_18',['DEFRAGMENTATION_FLAGS',['../namespace_d3_d12_m_a.html#ab433989212ee6736bf9d63c5bc565df4',1,'D3D12MA']]],
+  ['defragmentation_5fmove_19',['DEFRAGMENTATION_MOVE',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html',1,'D3D12MA']]],
+  ['defragmentation_5fmove_5foperation_20',['DEFRAGMENTATION_MOVE_OPERATION',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602',1,'D3D12MA']]],
+  ['defragmentation_5fmove_5foperation_5fcopy_21',['DEFRAGMENTATION_MOVE_OPERATION_COPY',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602a29a5c20322e633f6c34ddebd16bc61ac',1,'D3D12MA']]],
+  ['defragmentation_5fmove_5foperation_5fdestroy_22',['DEFRAGMENTATION_MOVE_OPERATION_DESTROY',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602aa2143507d723de458c2ed94e143ac242',1,'D3D12MA']]],
+  ['defragmentation_5fmove_5foperation_5fignore_23',['DEFRAGMENTATION_MOVE_OPERATION_IGNORE',['../namespace_d3_d12_m_a.html#a82bb787a69699a877b4166789a30e602abefe270a1803998dda3f8e01ec3a4ad6',1,'D3D12MA']]],
+  ['defragmentation_5fpass_5fmove_5finfo_24',['DEFRAGMENTATION_PASS_MOVE_INFO',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html',1,'D3D12MA']]],
+  ['defragmentation_5fstats_25',['DEFRAGMENTATION_STATS',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html',1,'D3D12MA']]],
+  ['defragmentationcontext_26',['DefragmentationContext',['../class_d3_d12_m_a_1_1_defragmentation_context.html',1,'D3D12MA']]],
+  ['detailedstatistics_27',['DetailedStatistics',['../struct_d3_d12_m_a_1_1_detailed_statistics.html',1,'D3D12MA']]],
+  ['double_20stack_28',['Double stack',['../linear_algorithm.html#linear_algorithm_double_stack',1,'']]],
+  ['dump_29',['JSON dump',['../statistics.html#statistics_json_dump',1,'']]]
 ];
diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js
index 67caa90..fe3f89f 100644
--- a/docs/html/search/all_7.js
+++ b/docs/html/search/all_7.js
@@ -4,5 +4,6 @@
   ['heapflags_1',['HeapFlags',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc',1,'D3D12MA::POOL_DESC']]],
   ['heapproperties_2',['HeapProperties',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a',1,'D3D12MA::POOL_DESC']]],
   ['heapsfreed_3',['HeapsFreed',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html#aecc6120afcf75028c9850f8d475b727d',1,'D3D12MA::DEFRAGMENTATION_STATS']]],
-  ['heaptype_4',['HeapType',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7',1,'D3D12MA::ALLOCATION_DESC::HeapType'],['../struct_d3_d12_m_a_1_1_total_statistics.html#abad2e48b38f8a73a4daf8577e7a33b89',1,'D3D12MA::TotalStatistics::HeapType']]]
+  ['heaptype_4',['HeapType',['../struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7',1,'D3D12MA::ALLOCATION_DESC::HeapType'],['../struct_d3_d12_m_a_1_1_total_statistics.html#abad2e48b38f8a73a4daf8577e7a33b89',1,'D3D12MA::TotalStatistics::HeapType']]],
+  ['helper_20structures_5',['Helper structures',['../quick_start.html#quick_start_helper_structures',1,'']]]
 ];
diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js
index efb78fa..f6d7a32 100644
--- a/docs/html/search/classes_2.js
+++ b/docs/html/search/classes_2.js
@@ -1,9 +1,7 @@
 var searchData=
 [
-  ['defragmentation_5fdesc_0',['DEFRAGMENTATION_DESC',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
-  ['defragmentation_5fmove_1',['DEFRAGMENTATION_MOVE',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html',1,'D3D12MA']]],
-  ['defragmentation_5fpass_5fmove_5finfo_2',['DEFRAGMENTATION_PASS_MOVE_INFO',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html',1,'D3D12MA']]],
-  ['defragmentation_5fstats_3',['DEFRAGMENTATION_STATS',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html',1,'D3D12MA']]],
-  ['defragmentationcontext_4',['DefragmentationContext',['../class_d3_d12_m_a_1_1_defragmentation_context.html',1,'D3D12MA']]],
-  ['detailedstatistics_5',['DetailedStatistics',['../struct_d3_d12_m_a_1_1_detailed_statistics.html',1,'D3D12MA']]]
+  ['callocation_5fdesc_0',['CALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
+  ['cpool_5fdesc_1',['CPOOL_DESC',['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html',1,'D3D12MA']]],
+  ['cvirtual_5fallocation_5fdesc_2',['CVIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
+  ['cvirtual_5fblock_5fdesc_3',['CVIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA']]]
 ];
diff --git a/docs/html/search/classes_3.js b/docs/html/search/classes_3.js
index 7ee755f..efb78fa 100644
--- a/docs/html/search/classes_3.js
+++ b/docs/html/search/classes_3.js
@@ -1,5 +1,9 @@
 var searchData=
 [
-  ['pool_0',['Pool',['../class_d3_d12_m_a_1_1_pool.html',1,'D3D12MA']]],
-  ['pool_5fdesc_1',['POOL_DESC',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html',1,'D3D12MA']]]
+  ['defragmentation_5fdesc_0',['DEFRAGMENTATION_DESC',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
+  ['defragmentation_5fmove_1',['DEFRAGMENTATION_MOVE',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___m_o_v_e.html',1,'D3D12MA']]],
+  ['defragmentation_5fpass_5fmove_5finfo_2',['DEFRAGMENTATION_PASS_MOVE_INFO',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___p_a_s_s___m_o_v_e___i_n_f_o.html',1,'D3D12MA']]],
+  ['defragmentation_5fstats_3',['DEFRAGMENTATION_STATS',['../struct_d3_d12_m_a_1_1_d_e_f_r_a_g_m_e_n_t_a_t_i_o_n___s_t_a_t_s.html',1,'D3D12MA']]],
+  ['defragmentationcontext_4',['DefragmentationContext',['../class_d3_d12_m_a_1_1_defragmentation_context.html',1,'D3D12MA']]],
+  ['detailedstatistics_5',['DetailedStatistics',['../struct_d3_d12_m_a_1_1_detailed_statistics.html',1,'D3D12MA']]]
 ];
diff --git a/docs/html/search/classes_4.js b/docs/html/search/classes_4.js
index 4c75f7f..7ee755f 100644
--- a/docs/html/search/classes_4.js
+++ b/docs/html/search/classes_4.js
@@ -1,4 +1,5 @@
 var searchData=
 [
-  ['statistics_0',['Statistics',['../struct_d3_d12_m_a_1_1_statistics.html',1,'D3D12MA']]]
+  ['pool_0',['Pool',['../class_d3_d12_m_a_1_1_pool.html',1,'D3D12MA']]],
+  ['pool_5fdesc_1',['POOL_DESC',['../struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html',1,'D3D12MA']]]
 ];
diff --git a/docs/html/search/classes_5.js b/docs/html/search/classes_5.js
index 7efd95a..4c75f7f 100644
--- a/docs/html/search/classes_5.js
+++ b/docs/html/search/classes_5.js
@@ -1,4 +1,4 @@
 var searchData=
 [
-  ['totalstatistics_0',['TotalStatistics',['../struct_d3_d12_m_a_1_1_total_statistics.html',1,'D3D12MA']]]
+  ['statistics_0',['Statistics',['../struct_d3_d12_m_a_1_1_statistics.html',1,'D3D12MA']]]
 ];
diff --git a/docs/html/search/classes_6.js b/docs/html/search/classes_6.js
index 0c0c7b5..7efd95a 100644
--- a/docs/html/search/classes_6.js
+++ b/docs/html/search/classes_6.js
@@ -1,8 +1,4 @@
 var searchData=
 [
-  ['virtual_5fallocation_5fdesc_0',['VIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
-  ['virtual_5fallocation_5finfo_1',['VIRTUAL_ALLOCATION_INFO',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html',1,'D3D12MA']]],
-  ['virtual_5fblock_5fdesc_2',['VIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA']]],
-  ['virtualallocation_3',['VirtualAllocation',['../struct_d3_d12_m_a_1_1_virtual_allocation.html',1,'D3D12MA']]],
-  ['virtualblock_4',['VirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html',1,'D3D12MA']]]
+  ['totalstatistics_0',['TotalStatistics',['../struct_d3_d12_m_a_1_1_total_statistics.html',1,'D3D12MA']]]
 ];
diff --git a/docs/html/search/classes_7.js b/docs/html/search/classes_7.js
new file mode 100644
index 0000000..0c0c7b5
--- /dev/null
+++ b/docs/html/search/classes_7.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+  ['virtual_5fallocation_5fdesc_0',['VIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html',1,'D3D12MA']]],
+  ['virtual_5fallocation_5finfo_1',['VIRTUAL_ALLOCATION_INFO',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___i_n_f_o.html',1,'D3D12MA']]],
+  ['virtual_5fblock_5fdesc_2',['VIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html',1,'D3D12MA']]],
+  ['virtualallocation_3',['VirtualAllocation',['../struct_d3_d12_m_a_1_1_virtual_allocation.html',1,'D3D12MA']]],
+  ['virtualblock_4',['VirtualBlock',['../class_d3_d12_m_a_1_1_virtual_block.html',1,'D3D12MA']]]
+];
diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js
index c60b0a2..0ca7ae2 100644
--- a/docs/html/search/defines_0.js
+++ b/docs/html/search/defines_0.js
@@ -1,5 +1,9 @@
 var searchData=
 [
-  ['d3d12ma_5fdxgi_5f1_5f4_0',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]],
-  ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_1',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]]
+  ['d3d12ma_5fcreate_5fnot_5fzeroed_5favailable_0',['D3D12MA_CREATE_NOT_ZEROED_AVAILABLE',['../_d3_d12_mem_alloc_8h.html#a6df70df4d9e792713418dd4062b07c3a',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5fdxgi_5f1_5f4_1',['D3D12MA_DXGI_1_4',['../_d3_d12_mem_alloc_8h.html#aa623643886b8481adb32017e5c748b50',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fallocator_5fflags_2',['D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS',['../_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fheap_5fflags_3',['D3D12MA_RECOMMENDED_HEAP_FLAGS',['../_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5frecommended_5fpool_5fflags_4',['D3D12MA_RECOMMENDED_POOL_FLAGS',['../_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b',1,'D3D12MemAlloc.h']]],
+  ['d3d12ma_5fuse_5fsmall_5fresource_5fplacement_5falignment_5',['D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT',['../_d3_d12_mem_alloc_8h.html#ad04069a2e2bbc53b7d65f85a04a2dcbc',1,'D3D12MemAlloc.h']]]
 ];
diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js
index 03da485..8005df8 100644
--- a/docs/html/search/functions_2.js
+++ b/docs/html/search/functions_2.js
@@ -1,14 +1,18 @@
 var searchData=
 [
-  ['calculatestatistics_0',['CalculateStatistics',['../class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910',1,'D3D12MA::Pool::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22',1,'D3D12MA::Allocator::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9',1,'D3D12MA::VirtualBlock::CalculateStatistics(DetailedStatistics *pStats) const']]],
-  ['clear_1',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]],
-  ['createaliasingresource_2',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]],
-  ['createaliasingresource1_3',['CreateAliasingResource1',['../class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6',1,'D3D12MA::Allocator']]],
-  ['createaliasingresource2_4',['CreateAliasingResource2',['../class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453',1,'D3D12MA::Allocator']]],
-  ['createallocator_5',['CreateAllocator',['../namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0',1,'D3D12MA']]],
-  ['createpool_6',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]],
-  ['createresource_7',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]],
-  ['createresource2_8',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#a7a1c79c79a7a573c438aa45c4a531b96',1,'D3D12MA::Allocator']]],
-  ['createresource3_9',['CreateResource3',['../class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747',1,'D3D12MA::Allocator']]],
-  ['createvirtualblock_10',['CreateVirtualBlock',['../namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98',1,'D3D12MA']]]
+  ['calculatestatistics_0',['CalculateStatistics',['../class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910',1,'D3D12MA::Pool::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22',1,'D3D12MA::Allocator::CalculateStatistics()'],['../class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9',1,'D3D12MA::VirtualBlock::CalculateStatistics()']]],
+  ['callocation_5fdesc_1',['CALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ae18d216821f86a1f35ea54bcd41c6e86',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(const ALLOCATION_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a5c552f3160fb93b65ed16db4f6412a39',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(Pool *customPool, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept'],['../struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a8916820e2d709379eb3bcd2fb7e9848f',1,'D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC(D3D12_HEAP_TYPE heapType, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL, D3D12_HEAP_FLAGS extraHeapFlags=D3D12_HEAP_FLAG_NONE) noexcept']]],
+  ['clear_2',['Clear',['../class_d3_d12_m_a_1_1_virtual_block.html#ae22b18c0b7c31b44c1d740f886369189',1,'D3D12MA::VirtualBlock']]],
+  ['cpool_5fdesc_3',['CPOOL_DESC',['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#ab2310e41ea92aa64dfab4a3366a60cc3',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(const POOL_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a5de61391fddfd37d91a0ec5cb7e84c1b',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(D3D12_HEAP_TYPE heapType, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept'],['../struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a0d1e436a90bb4a07c55a5ecf60618be3',1,'D3D12MA::CPOOL_DESC::CPOOL_DESC(const D3D12_HEAP_PROPERTIES heapProperties, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept']]],
+  ['createaliasingresource_4',['CreateAliasingResource',['../class_d3_d12_m_a_1_1_allocator.html#ab45536f92410aedb7be44ea36b1b4717',1,'D3D12MA::Allocator']]],
+  ['createaliasingresource1_5',['CreateAliasingResource1',['../class_d3_d12_m_a_1_1_allocator.html#ad3b83cc5707cb4ed92bc277069c4ddd6',1,'D3D12MA::Allocator']]],
+  ['createaliasingresource2_6',['CreateAliasingResource2',['../class_d3_d12_m_a_1_1_allocator.html#a562cbaa71cbd333cade09cd67ed82453',1,'D3D12MA::Allocator']]],
+  ['createallocator_7',['CreateAllocator',['../namespace_d3_d12_m_a.html#ab7a1cd1683986d75ce1488b0920f4cb0',1,'D3D12MA']]],
+  ['createpool_8',['CreatePool',['../class_d3_d12_m_a_1_1_allocator.html#aac7b1f6bf53cbf4c4ce2264cb72ca515',1,'D3D12MA::Allocator']]],
+  ['createresource_9',['CreateResource',['../class_d3_d12_m_a_1_1_allocator.html#aa37d6b9fe8ea0864f7a35b9d68e8345a',1,'D3D12MA::Allocator']]],
+  ['createresource2_10',['CreateResource2',['../class_d3_d12_m_a_1_1_allocator.html#a7a1c79c79a7a573c438aa45c4a531b96',1,'D3D12MA::Allocator']]],
+  ['createresource3_11',['CreateResource3',['../class_d3_d12_m_a_1_1_allocator.html#a323b2af320b01d0fdecfc515c75db747',1,'D3D12MA::Allocator']]],
+  ['createvirtualblock_12',['CreateVirtualBlock',['../namespace_d3_d12_m_a.html#ab024647ae85ee63e2fa2c1c4beac6d98',1,'D3D12MA']]],
+  ['cvirtual_5fallocation_5fdesc_13',['CVIRTUAL_ALLOCATION_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#abc6429b119b65f7cd3ed5c5bd4d36d85',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC(const VIRTUAL_ALLOCATION_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af72d9f4003fc6b86f76268aa8529d43a',1,'D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC(UINT64 size, UINT64 alignment, VIRTUAL_ALLOCATION_FLAGS flags=VIRTUAL_ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept']]],
+  ['cvirtual_5fblock_5fdesc_14',['CVIRTUAL_BLOCK_DESC',['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC()=default'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a223f6535756a128b7fe86f0aa10de9af',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC(const VIRTUAL_BLOCK_DESC &amp;o) noexcept'],['../struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2984a0b07b432ed8baf387d5230b7112',1,'D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC(UINT64 size, VIRTUAL_BLOCK_FLAGS flags=VIRTUAL_BLOCK_FLAG_NONE, const ALLOCATION_CALLBACKS *allocationCallbacks=NULL) noexcept']]]
 ];
diff --git a/docs/html/search/searchdata.js b/docs/html/search/searchdata.js
index 5304a71..b0a256b 100644
--- a/docs/html/search/searchdata.js
+++ b/docs/html/search/searchdata.js
@@ -1,7 +1,7 @@
 var indexSectionsWithContent =
 {
   0: "abcdefghijlmnopqrstuvw",
-  1: "abdpstv",
+  1: "abcdpstv",
   2: "d",
   3: "d",
   4: "abcefgis",
diff --git a/docs/html/statistics.html b/docs/html/statistics.html
index 8c1997d..3412765 100644
--- a/docs/html/statistics.html
+++ b/docs/html/statistics.html
@@ -107,9 +107,9 @@
 <div class="line">printf(<span class="stringliteral">&quot;D3D12 reports total usage %llu B with budget %llu B.\n&quot;</span>,</div>
 <div class="line">    localBudget.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">UsageBytes</a>,</div>
 <div class="line">    localBudget.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">BudgetBytes</a>);</div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html">D3D12MA::Budget</a></div><div class="ttdoc">Statistics of current memory usage and available budget for a specific memory segment group.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:442</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a326515f08d89ee2e31dcfdd5c1e8ac71"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">D3D12MA::Budget::BudgetBytes</a></div><div class="ttdeci">UINT64 BudgetBytes</div><div class="ttdoc">Estimated amount of memory available to the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:465</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a77a8c9e32d6602f95b7d1c285cddd253"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">D3D12MA::Budget::UsageBytes</a></div><div class="ttdeci">UINT64 UsageBytes</div><div class="ttdoc">Estimated current memory usage of the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:454</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html">D3D12MA::Budget</a></div><div class="ttdoc">Statistics of current memory usage and available budget for a specific memory segment group.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:472</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a326515f08d89ee2e31dcfdd5c1e8ac71"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a326515f08d89ee2e31dcfdd5c1e8ac71">D3D12MA::Budget::BudgetBytes</a></div><div class="ttdeci">UINT64 BudgetBytes</div><div class="ttdoc">Estimated amount of memory available to the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:495</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_budget_html_a77a8c9e32d6602f95b7d1c285cddd253"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_budget.html#a77a8c9e32d6602f95b7d1c285cddd253">D3D12MA::Budget::UsageBytes</a></div><div class="ttdeci">UINT64 UsageBytes</div><div class="ttdoc">Estimated current memory usage of the program.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:484</div></div>
 </div><!-- fragment --><p>You can query for more detailed statistics per heap type, memory segment group, and totals, including minimum and maximum allocation size and unused range size, by calling function <a class="el" href="class_d3_d12_m_a_1_1_allocator.html#a99db00df909963573a976c203b107d22" title="Retrieves statistics from current state of the allocator.">D3D12MA::Allocator::CalculateStatistics()</a> and inspecting structure <a class="el" href="struct_d3_d12_m_a_1_1_total_statistics.html" title="General statistics from current state of the allocator - total memory usage across all memory heaps a...">D3D12MA::TotalStatistics</a>. This function is slower though, as it has to traverse all the internal data structures, so it should be used only for debugging purposes.</p>
 <p>You can query for statistics of a custom pool using function <a class="el" href="class_d3_d12_m_a_1_1_pool.html#aa9d849dc4667314b2a53eddf02f5af91" title="Retrieves basic statistics of the custom pool that are fast to calculate.">D3D12MA::Pool::GetStatistics()</a> or <a class="el" href="class_d3_d12_m_a_1_1_pool.html#ad07999ac5dc8f0c63187afd45d551910" title="Retrieves detailed statistics of the custom pool that are slower to calculate.">D3D12MA::Pool::CalculateStatistics()</a>.</p>
 <p>You can query for information about a specific allocation using functions of the <a class="el" href="class_d3_d12_m_a_1_1_allocation.html" title="Represents single memory allocation.">D3D12MA::Allocation</a> class, e.g. <code>GetSize()</code>, <code>GetOffset()</code>, <code>GetHeap()</code>.</p>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
index e2b588b..9835dac 100644
--- a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
+++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
@@ -99,11 +99,20 @@
  <a href="#details">More...</a></p>
 
 <p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::ALLOCATION_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png" usemap="#D3D12MA::ALLOCATION_5FDESC_map" alt=""/>
+  <map id="D3D12MA::ALLOCATION_5FDESC_map" name="D3D12MA::ALLOCATION_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::ALLOCATION_DESC..." alt="D3D12MA::CALLOCATION_DESC" shape="rect" coords="0,56,207,80"/>
+  </map>
+</div></div>
 <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:a92dec49b788a334fc91c55340dfbace6" id="r_a92dec49b788a334fc91c55340dfbace6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a92dec49b788a334fc91c55340dfbace6">Flags</a></td></tr>
-<tr class="memdesc:a92dec49b788a334fc91c55340dfbace6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags.  <br /></td></tr>
+<tr class="memdesc:a92dec49b788a334fc91c55340dfbace6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the allocation.  <br /></td></tr>
 <tr class="separator:a92dec49b788a334fc91c55340dfbace6"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:aa46b3c0456e5a23edef3328607ebf4d7" id="r_aa46b3c0456e5a23edef3328607ebf4d7"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_TYPE&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a></td></tr>
 <tr class="memdesc:aa46b3c0456e5a23edef3328607ebf4d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">The type of memory heap where the new allocation should be placed.  <br /></td></tr>
@@ -134,7 +143,7 @@
 </div><div class="memdoc">
 
 <p>Custom pool to place the new resource in. Optional. </p>
-<p>When not NULL, the resource will be created inside specified custom pool. </p>
+<p>When not null, the resource will be created inside specified custom pool. Members <code>HeapType</code>, <code>ExtraHeapFlags</code> are then ignored. </p>
 
 </div>
 </div>
@@ -173,7 +182,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Flags. </p>
+<p>Flags for the allocation. </p>
 
 </div>
 </div>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
new file mode 100644
index 0000000..4598b48
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html
index f07cfd0..3f0fc19 100644
--- a/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html
+++ b/docs/html/struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_o_r___d_e_s_c.html
@@ -103,7 +103,7 @@
 <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:ad8abad7c80ea0d8df27c85243ce720f3" id="r_ad8abad7c80ea0d8df27c85243ce720f3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#ad5ae5a5e42b878f2e18ab5d1fbfb9916">ALLOCATOR_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ad8abad7c80ea0d8df27c85243ce720f3">Flags</a></td></tr>
-<tr class="memdesc:ad8abad7c80ea0d8df27c85243ce720f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags.  <br /></td></tr>
+<tr class="memdesc:ad8abad7c80ea0d8df27c85243ce720f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the entire allocator.  <br /></td></tr>
 <tr class="separator:ad8abad7c80ea0d8df27c85243ce720f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ada1bf21205065b3aa0284b5a9ee1cb3c" id="r_ada1bf21205065b3aa0284b5a9ee1cb3c"><td class="memItemLeft" align="right" valign="top">ID3D12Device *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ada1bf21205065b3aa0284b5a9ee1cb3c">pDevice</a></td></tr>
 <tr class="separator:ada1bf21205065b3aa0284b5a9ee1cb3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -131,7 +131,8 @@
       </table>
 </div><div class="memdoc">
 
-<p>Flags. </p>
+<p>Flags for the entire allocator. </p>
+<p>It is recommended to use <a class="el" href="_d3_d12_mem_alloc_8h.html#accfbeae642feeacf353ce695e91a5e73" title="Set of flags recommended for use in D3D12MA::ALLOCATOR_DESC::Flags for optimal performance.">D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS</a>. </p>
 
 </div>
 </div>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html
new file mode 100644
index 0000000..4f3f411
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html
@@ -0,0 +1,113 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: Member List</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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CALLOCATION_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="headertitle"><div class="title">D3D12MA::CALLOCATION_DESC Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a50901205f52d0c28bddaa5cc7c7a35b1">CALLOCATION_DESC</a>()=default</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ae18d216821f86a1f35ea54bcd41c6e86">CALLOCATION_DESC</a>(const ALLOCATION_DESC &amp;o) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a5c552f3160fb93b65ed16db4f6412a39">CALLOCATION_DESC</a>(Pool *customPool, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a8916820e2d709379eb3bcd2fb7e9848f">CALLOCATION_DESC</a>(D3D12_HEAP_TYPE heapType, ALLOCATION_FLAGS flags=ALLOCATION_FLAG_NONE, void *privateData=NULL, D3D12_HEAP_FLAGS extraHeapFlags=D3D12_HEAP_FLAG_NONE) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CALLOCATION_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">CustomPool</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">ExtraHeapFlags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">Flags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ac638dd987f1326e2fdab91892d994d35">pPrivateData</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
new file mode 100644
index 0000000..fd015d5
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
@@ -0,0 +1,290 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: D3D12MA::CALLOCATION_DESC 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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CALLOCATION_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html">List of all members</a>  </div>
+  <div class="headertitle"><div class="title">D3D12MA::CALLOCATION_DESC Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure.  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::CALLOCATION_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png" usemap="#D3D12MA::CALLOCATION_5FDESC_map" alt=""/>
+  <map id="D3D12MA::CALLOCATION_5FDESC_map" name="D3D12MA::CALLOCATION_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource." alt="D3D12MA::ALLOCATION_DESC" shape="rect" coords="0,0,207,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a50901205f52d0c28bddaa5cc7c7a35b1" id="r_a50901205f52d0c28bddaa5cc7c7a35b1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a50901205f52d0c28bddaa5cc7c7a35b1">CALLOCATION_DESC</a> ()=default</td></tr>
+<tr class="memdesc:a50901205f52d0c28bddaa5cc7c7a35b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. Leaves the structure uninitialized.  <br /></td></tr>
+<tr class="separator:a50901205f52d0c28bddaa5cc7c7a35b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae18d216821f86a1f35ea54bcd41c6e86" id="r_ae18d216821f86a1f35ea54bcd41c6e86"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ae18d216821f86a1f35ea54bcd41c6e86">CALLOCATION_DESC</a> (const <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">ALLOCATION_DESC</a> &amp;o) noexcept</td></tr>
+<tr class="memdesc:ae18d216821f86a1f35ea54bcd41c6e86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure.  <br /></td></tr>
+<tr class="separator:ae18d216821f86a1f35ea54bcd41c6e86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c552f3160fb93b65ed16db4f6412a39" id="r_a5c552f3160fb93b65ed16db4f6412a39"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5c552f3160fb93b65ed16db4f6412a39">CALLOCATION_DESC</a> (<a class="el" href="class_d3_d12_m_a_1_1_pool.html">Pool</a> *customPool, <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a> flags=<a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e">ALLOCATION_FLAG_NONE</a>, void *privateData=NULL) noexcept</td></tr>
+<tr class="memdesc:a5c552f3160fb93b65ed16db4f6412a39"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of an allocation to be created in a specific custom pool.  <br /></td></tr>
+<tr class="separator:a5c552f3160fb93b65ed16db4f6412a39"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8916820e2d709379eb3bcd2fb7e9848f" id="r_a8916820e2d709379eb3bcd2fb7e9848f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a8916820e2d709379eb3bcd2fb7e9848f">CALLOCATION_DESC</a> (D3D12_HEAP_TYPE heapType, <a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a> flags=<a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e">ALLOCATION_FLAG_NONE</a>, void *privateData=NULL, D3D12_HEAP_FLAGS extraHeapFlags=D3D12_HEAP_FLAG_NONE) noexcept</td></tr>
+<tr class="memdesc:a8916820e2d709379eb3bcd2fb7e9848f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of an allocation to be created in a default pool of a specific <code>D3D12_HEAP_TYPE</code>.  <br /></td></tr>
+<tr class="separator:a8916820e2d709379eb3bcd2fb7e9848f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::ALLOCATION_DESC</a></td></tr>
+<tr class="memitem:a92dec49b788a334fc91c55340dfbace6 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_a92dec49b788a334fc91c55340dfbace6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a92dec49b788a334fc91c55340dfbace6">Flags</a></td></tr>
+<tr class="memdesc:a92dec49b788a334fc91c55340dfbace6 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the allocation.  <br /></td></tr>
+<tr class="separator:a92dec49b788a334fc91c55340dfbace6 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa46b3c0456e5a23edef3328607ebf4d7 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_aa46b3c0456e5a23edef3328607ebf4d7"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_TYPE&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa46b3c0456e5a23edef3328607ebf4d7">HeapType</a></td></tr>
+<tr class="memdesc:aa46b3c0456e5a23edef3328607ebf4d7 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The type of memory heap where the new allocation should be placed.  <br /></td></tr>
+<tr class="separator:aa46b3c0456e5a23edef3328607ebf4d7 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97878838f976b2d1e6b1a76881035690 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_a97878838f976b2d1e6b1a76881035690"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_FLAGS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a97878838f976b2d1e6b1a76881035690">ExtraHeapFlags</a></td></tr>
+<tr class="memdesc:a97878838f976b2d1e6b1a76881035690 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Additional heap flags to be used when allocating memory.  <br /></td></tr>
+<tr class="separator:a97878838f976b2d1e6b1a76881035690 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab06b85f3cf3254f855b29264477e3934 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_ab06b85f3cf3254f855b29264477e3934"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_d3_d12_m_a_1_1_pool.html">Pool</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab06b85f3cf3254f855b29264477e3934">CustomPool</a></td></tr>
+<tr class="memdesc:ab06b85f3cf3254f855b29264477e3934 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom pool to place the new resource in. Optional.  <br /></td></tr>
+<tr class="separator:ab06b85f3cf3254f855b29264477e3934 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac638dd987f1326e2fdab91892d994d35 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_ac638dd987f1326e2fdab91892d994d35"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ac638dd987f1326e2fdab91892d994d35">pPrivateData</a></td></tr>
+<tr class="memdesc:ac638dd987f1326e2fdab91892d994d35 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom general-purpose pointer that will be stored in <a class="el" href="class_d3_d12_m_a_1_1_allocation.html" title="Represents single memory allocation.">D3D12MA::Allocation</a>.  <br /></td></tr>
+<tr class="separator:ac638dd987f1326e2fdab91892d994d35 inherit pub_attribs_struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a50901205f52d0c28bddaa5cc7c7a35b1" name="a50901205f52d0c28bddaa5cc7c7a35b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a50901205f52d0c28bddaa5cc7c7a35b1">&#9670;&#160;</a></span>CALLOCATION_DESC() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Default constructor. Leaves the structure uninitialized. </p>
+
+</div>
+</div>
+<a id="ae18d216821f86a1f35ea54bcd41c6e86" name="ae18d216821f86a1f35ea54bcd41c6e86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae18d216821f86a1f35ea54bcd41c6e86">&#9670;&#160;</a></span>CALLOCATION_DESC() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">ALLOCATION_DESC</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>o</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.">D3D12MA::ALLOCATION_DESC</a> structure. </p>
+
+</div>
+</div>
+<a id="a5c552f3160fb93b65ed16db4f6412a39" name="a5c552f3160fb93b65ed16db4f6412a39"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c552f3160fb93b65ed16db4f6412a39">&#9670;&#160;</a></span>CALLOCATION_DESC() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="class_d3_d12_m_a_1_1_pool.html">Pool</a> *</td>          <td class="paramname"><span class="paramname"><em>customPool</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e">ALLOCATION_FLAG_NONE</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>privateData</em></span><span class="paramdefsep"> = </span><span class="paramdefval">NULL</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of an allocation to be created in a specific custom pool. </p>
+
+</div>
+</div>
+<a id="a8916820e2d709379eb3bcd2fb7e9848f" name="a8916820e2d709379eb3bcd2fb7e9848f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8916820e2d709379eb3bcd2fb7e9848f">&#9670;&#160;</a></span>CALLOCATION_DESC() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CALLOCATION_DESC::CALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramtype">D3D12_HEAP_TYPE</td>          <td class="paramname"><span class="paramname"><em>heapType</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645e">ALLOCATION_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="namespace_d3_d12_m_a.html#abbad31a7e0b3d09d77f3fb704b77645ea0bf578b096d6ea73cea86b031541733e">ALLOCATION_FLAG_NONE</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>privateData</em></span><span class="paramdefsep"> = </span><span class="paramdefval">NULL</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">D3D12_HEAP_FLAGS</td>          <td class="paramname"><span class="paramname"><em>extraHeapFlags</em></span><span class="paramdefsep"> = </span><span class="paramdefval">D3D12_HEAP_FLAG_NONE</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of an allocation to be created in a default pool of a specific <code>D3D12_HEAP_TYPE</code>. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>D:/PROJECTS/D3D12 Memory Allocator/REPO/include/<a class="el" href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
new file mode 100644
index 0000000..d74b2ec
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c-members.html
new file mode 100644
index 0000000..2535ece
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c-members.html
@@ -0,0 +1,117 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: Member List</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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">CPOOL_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="headertitle"><div class="title">D3D12MA::CPOOL_DESC Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c">BlockSize</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#afc1fdbbf07c54943a70b95f122adb0d2">CPOOL_DESC</a>()=default</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#ab2310e41ea92aa64dfab4a3366a60cc3">CPOOL_DESC</a>(const POOL_DESC &amp;o) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a5de61391fddfd37d91a0ec5cb7e84c1b">CPOOL_DESC</a>(D3D12_HEAP_TYPE heapType, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html#a0d1e436a90bb4a07c55a5ecf60618be3">CPOOL_DESC</a>(const D3D12_HEAP_PROPERTIES heapProperties, D3D12_HEAP_FLAGS heapFlags, POOL_FLAGS flags=D3D12MA_RECOMMENDED_POOL_FLAGS, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">D3D12MA::CPOOL_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4">Flags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc">HeapFlags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a">HeapProperties</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e">MaxBlockCount</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a0a6283eeb1f3f99d8c4ae264aec7f749">MinAllocationAlignment</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a6f10db3911a3bea1becfc9a0dfa5bac8">MinBlockCount</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a475840ec05c19732c8d5aa8bb27270f4">pProtectedSession</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6">ResidencyPriority</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html
new file mode 100644
index 0000000..e58c262
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html
@@ -0,0 +1,337 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: D3D12MA::CPOOL_DESC 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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html">CPOOL_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c-members.html">List of all members</a>  </div>
+  <div class="headertitle"><div class="title">D3D12MA::CPOOL_DESC Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure.  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::CPOOL_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.png" usemap="#D3D12MA::CPOOL_5FDESC_map" alt=""/>
+  <map id="D3D12MA::CPOOL_5FDESC_map" name="D3D12MA::CPOOL_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool." alt="D3D12MA::POOL_DESC" shape="rect" coords="0,0,162,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:afc1fdbbf07c54943a70b95f122adb0d2" id="r_afc1fdbbf07c54943a70b95f122adb0d2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afc1fdbbf07c54943a70b95f122adb0d2">CPOOL_DESC</a> ()=default</td></tr>
+<tr class="memdesc:afc1fdbbf07c54943a70b95f122adb0d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. Leaves the structure uninitialized.  <br /></td></tr>
+<tr class="separator:afc1fdbbf07c54943a70b95f122adb0d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab2310e41ea92aa64dfab4a3366a60cc3" id="r_ab2310e41ea92aa64dfab4a3366a60cc3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab2310e41ea92aa64dfab4a3366a60cc3">CPOOL_DESC</a> (const <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">POOL_DESC</a> &amp;o) noexcept</td></tr>
+<tr class="memdesc:ab2310e41ea92aa64dfab4a3366a60cc3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure.  <br /></td></tr>
+<tr class="separator:ab2310e41ea92aa64dfab4a3366a60cc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5de61391fddfd37d91a0ec5cb7e84c1b" id="r_a5de61391fddfd37d91a0ec5cb7e84c1b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5de61391fddfd37d91a0ec5cb7e84c1b">CPOOL_DESC</a> (D3D12_HEAP_TYPE heapType, D3D12_HEAP_FLAGS heapFlags, <a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a> flags=<a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a>, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept</td></tr>
+<tr class="memdesc:a5de61391fddfd37d91a0ec5cb7e84c1b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of a custom pool created in one of the standard <code>D3D12_HEAP_TYPE</code>.  <br /></td></tr>
+<tr class="separator:a5de61391fddfd37d91a0ec5cb7e84c1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d1e436a90bb4a07c55a5ecf60618be3" id="r_a0d1e436a90bb4a07c55a5ecf60618be3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a0d1e436a90bb4a07c55a5ecf60618be3">CPOOL_DESC</a> (const D3D12_HEAP_PROPERTIES heapProperties, D3D12_HEAP_FLAGS heapFlags, <a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a> flags=<a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a>, UINT64 blockSize=0, UINT minBlockCount=0, UINT maxBlockCount=UINT_MAX, D3D12_RESIDENCY_PRIORITY residencyPriority=D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept</td></tr>
+<tr class="memdesc:a0d1e436a90bb4a07c55a5ecf60618be3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of a custom pool created with custom <code>D3D12_HEAP_PROPERTIES</code>.  <br /></td></tr>
+<tr class="separator:a0d1e436a90bb4a07c55a5ecf60618be3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">D3D12MA::POOL_DESC</a></td></tr>
+<tr class="memitem:ac4ed93b0191344d68c0b4ac1a4822ff4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_ac4ed93b0191344d68c0b4ac1a4822ff4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#ac4ed93b0191344d68c0b4ac1a4822ff4">Flags</a></td></tr>
+<tr class="memdesc:ac4ed93b0191344d68c0b4ac1a4822ff4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the heap.  <br /></td></tr>
+<tr class="separator:ac4ed93b0191344d68c0b4ac1a4822ff4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06e06813bcb5206e9f7a8b0564bf1d6a inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a06e06813bcb5206e9f7a8b0564bf1d6a"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_PROPERTIES&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a06e06813bcb5206e9f7a8b0564bf1d6a">HeapProperties</a></td></tr>
+<tr class="memdesc:a06e06813bcb5206e9f7a8b0564bf1d6a inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The parameters of memory heap where allocations of this pool should be placed.  <br /></td></tr>
+<tr class="separator:a06e06813bcb5206e9f7a8b0564bf1d6a inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3795956e4fbfe7c3a23546e02e5d28dc inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a3795956e4fbfe7c3a23546e02e5d28dc"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_FLAGS&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a3795956e4fbfe7c3a23546e02e5d28dc">HeapFlags</a></td></tr>
+<tr class="memdesc:a3795956e4fbfe7c3a23546e02e5d28dc inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Heap flags to be used when allocating heaps of this pool.  <br /></td></tr>
+<tr class="separator:a3795956e4fbfe7c3a23546e02e5d28dc inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7284cc51a8ed5b551075584256de23c inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_af7284cc51a8ed5b551075584256de23c"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#af7284cc51a8ed5b551075584256de23c">BlockSize</a></td></tr>
+<tr class="memdesc:af7284cc51a8ed5b551075584256de23c inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of a single heap (memory block) to be allocated as part of this pool, in bytes. Optional.  <br /></td></tr>
+<tr class="separator:af7284cc51a8ed5b551075584256de23c inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6f10db3911a3bea1becfc9a0dfa5bac8 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a6f10db3911a3bea1becfc9a0dfa5bac8"><td class="memItemLeft" align="right" valign="top">UINT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a6f10db3911a3bea1becfc9a0dfa5bac8">MinBlockCount</a></td></tr>
+<tr class="memdesc:a6f10db3911a3bea1becfc9a0dfa5bac8 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum number of heaps (memory blocks) to be always allocated in this pool, even if they stay empty. Optional.  <br /></td></tr>
+<tr class="separator:a6f10db3911a3bea1becfc9a0dfa5bac8 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbce3a99f253928f9c3c09fa16015f9e inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_abbce3a99f253928f9c3c09fa16015f9e"><td class="memItemLeft" align="right" valign="top">UINT&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#abbce3a99f253928f9c3c09fa16015f9e">MaxBlockCount</a></td></tr>
+<tr class="memdesc:abbce3a99f253928f9c3c09fa16015f9e inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum number of heaps (memory blocks) that can be allocated in this pool. Optional.  <br /></td></tr>
+<tr class="separator:abbce3a99f253928f9c3c09fa16015f9e inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a6283eeb1f3f99d8c4ae264aec7f749 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a0a6283eeb1f3f99d8c4ae264aec7f749"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a0a6283eeb1f3f99d8c4ae264aec7f749">MinAllocationAlignment</a></td></tr>
+<tr class="memdesc:a0a6283eeb1f3f99d8c4ae264aec7f749 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Additional minimum alignment to be used for all allocations created from this pool. Can be 0.  <br /></td></tr>
+<tr class="separator:a0a6283eeb1f3f99d8c4ae264aec7f749 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a475840ec05c19732c8d5aa8bb27270f4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a475840ec05c19732c8d5aa8bb27270f4"><td class="memItemLeft" align="right" valign="top">ID3D12ProtectedResourceSession *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a475840ec05c19732c8d5aa8bb27270f4">pProtectedSession</a></td></tr>
+<tr class="memdesc:a475840ec05c19732c8d5aa8bb27270f4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Additional parameter allowing pool to create resources with passed protected session.  <br /></td></tr>
+<tr class="separator:a475840ec05c19732c8d5aa8bb27270f4 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e6074af8c8ff7b957fe8d4b5036a5e6 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c" id="r_a2e6074af8c8ff7b957fe8d4b5036a5e6"><td class="memItemLeft" align="right" valign="top">D3D12_RESIDENCY_PRIORITY&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html#a2e6074af8c8ff7b957fe8d4b5036a5e6">ResidencyPriority</a></td></tr>
+<tr class="memdesc:a2e6074af8c8ff7b957fe8d4b5036a5e6 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Residency priority to be set for all allocations made in this pool. Optional.  <br /></td></tr>
+<tr class="separator:a2e6074af8c8ff7b957fe8d4b5036a5e6 inherit pub_attribs_struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="afc1fdbbf07c54943a70b95f122adb0d2" name="afc1fdbbf07c54943a70b95f122adb0d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc1fdbbf07c54943a70b95f122adb0d2">&#9670;&#160;</a></span>CPOOL_DESC() <span class="overload">[1/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CPOOL_DESC::CPOOL_DESC </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Default constructor. Leaves the structure uninitialized. </p>
+
+</div>
+</div>
+<a id="ab2310e41ea92aa64dfab4a3366a60cc3" name="ab2310e41ea92aa64dfab4a3366a60cc3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab2310e41ea92aa64dfab4a3366a60cc3">&#9670;&#160;</a></span>CPOOL_DESC() <span class="overload">[2/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CPOOL_DESC::CPOOL_DESC </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html">POOL_DESC</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>o</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html" title="Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.">D3D12MA::POOL_DESC</a> structure. </p>
+
+</div>
+</div>
+<a id="a5de61391fddfd37d91a0ec5cb7e84c1b" name="a5de61391fddfd37d91a0ec5cb7e84c1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5de61391fddfd37d91a0ec5cb7e84c1b">&#9670;&#160;</a></span>CPOOL_DESC() <span class="overload">[3/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CPOOL_DESC::CPOOL_DESC </td>
+          <td>(</td>
+          <td class="paramtype">D3D12_HEAP_TYPE</td>          <td class="paramname"><span class="paramname"><em>heapType</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">D3D12_HEAP_FLAGS</td>          <td class="paramname"><span class="paramname"><em>heapFlags</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT64</td>          <td class="paramname"><span class="paramname"><em>blockSize</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT</td>          <td class="paramname"><span class="paramname"><em>minBlockCount</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT</td>          <td class="paramname"><span class="paramname"><em>maxBlockCount</em></span><span class="paramdefsep"> = </span><span class="paramdefval">UINT_MAX</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">D3D12_RESIDENCY_PRIORITY</td>          <td class="paramname"><span class="paramname"><em>residencyPriority</em></span><span class="paramdefsep"> = </span><span class="paramdefval">D3D12_RESIDENCY_PRIORITY_NORMAL</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of a custom pool created in one of the standard <code>D3D12_HEAP_TYPE</code>. </p>
+
+</div>
+</div>
+<a id="a0d1e436a90bb4a07c55a5ecf60618be3" name="a0d1e436a90bb4a07c55a5ecf60618be3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d1e436a90bb4a07c55a5ecf60618be3">&#9670;&#160;</a></span>CPOOL_DESC() <span class="overload">[4/4]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CPOOL_DESC::CPOOL_DESC </td>
+          <td>(</td>
+          <td class="paramtype">const D3D12_HEAP_PROPERTIES</td>          <td class="paramname"><span class="paramname"><em>heapProperties</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">D3D12_HEAP_FLAGS</td>          <td class="paramname"><span class="paramname"><em>heapFlags</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b">D3D12MA_RECOMMENDED_POOL_FLAGS</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT64</td>          <td class="paramname"><span class="paramname"><em>blockSize</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT</td>          <td class="paramname"><span class="paramname"><em>minBlockCount</em></span><span class="paramdefsep"> = </span><span class="paramdefval">0</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT</td>          <td class="paramname"><span class="paramname"><em>maxBlockCount</em></span><span class="paramdefsep"> = </span><span class="paramdefval">UINT_MAX</span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">D3D12_RESIDENCY_PRIORITY</td>          <td class="paramname"><span class="paramname"><em>residencyPriority</em></span><span class="paramdefsep"> = </span><span class="paramdefval">D3D12_RESIDENCY_PRIORITY_NORMAL</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of a custom pool created with custom <code>D3D12_HEAP_PROPERTIES</code>. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>D:/PROJECTS/D3D12 Memory Allocator/REPO/include/<a class="el" href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.png
new file mode 100644
index 0000000..0c2ce80
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html
new file mode 100644
index 0000000..5b54dce
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html
@@ -0,0 +1,111 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: Member List</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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CVIRTUAL_ALLOCATION_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="headertitle"><div class="title">D3D12MA::CVIRTUAL_ALLOCATION_DESC Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0">Alignment</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af7262b9e3178bb70416603aa32d4e8c6">CVIRTUAL_ALLOCATION_DESC</a>()=default</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#abc6429b119b65f7cd3ed5c5bd4d36d85">CVIRTUAL_ALLOCATION_DESC</a>(const VIRTUAL_ALLOCATION_DESC &amp;o) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#af72d9f4003fc6b86f76268aa8529d43a">CVIRTUAL_ALLOCATION_DESC</a>(UINT64 size, UINT64 alignment, VIRTUAL_ALLOCATION_FLAGS flags=VIRTUAL_ALLOCATION_FLAG_NONE, void *privateData=NULL) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::CVIRTUAL_ALLOCATION_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab848f8ad39b5bf8a7c8c077e113e7fc9">Flags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa1281297154e3823e98a7cc7e23b5d6b">pPrivateData</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac">Size</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
new file mode 100644
index 0000000..a5a185b
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
@@ -0,0 +1,248 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: D3D12MA::CVIRTUAL_ALLOCATION_DESC 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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">CVIRTUAL_ALLOCATION_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c-members.html">List of all members</a>  </div>
+  <div class="headertitle"><div class="title">D3D12MA::CVIRTUAL_ALLOCATION_DESC Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure.  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::CVIRTUAL_ALLOCATION_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png" usemap="#D3D12MA::CVIRTUAL_5FALLOCATION_5FDESC_map" alt=""/>
+  <map id="D3D12MA::CVIRTUAL_5FALLOCATION_5FDESC_map" name="D3D12MA::CVIRTUAL_5FALLOCATION_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate()." alt="D3D12MA::VIRTUAL_ALLOCATION_DESC" shape="rect" coords="0,0,265,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:af7262b9e3178bb70416603aa32d4e8c6" id="r_af7262b9e3178bb70416603aa32d4e8c6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af7262b9e3178bb70416603aa32d4e8c6">CVIRTUAL_ALLOCATION_DESC</a> ()=default</td></tr>
+<tr class="memdesc:af7262b9e3178bb70416603aa32d4e8c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. Leaves the structure uninitialized.  <br /></td></tr>
+<tr class="separator:af7262b9e3178bb70416603aa32d4e8c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abc6429b119b65f7cd3ed5c5bd4d36d85" id="r_abc6429b119b65f7cd3ed5c5bd4d36d85"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#abc6429b119b65f7cd3ed5c5bd4d36d85">CVIRTUAL_ALLOCATION_DESC</a> (const <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">VIRTUAL_ALLOCATION_DESC</a> &amp;o) noexcept</td></tr>
+<tr class="memdesc:abc6429b119b65f7cd3ed5c5bd4d36d85"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure.  <br /></td></tr>
+<tr class="separator:abc6429b119b65f7cd3ed5c5bd4d36d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af72d9f4003fc6b86f76268aa8529d43a" id="r_af72d9f4003fc6b86f76268aa8529d43a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af72d9f4003fc6b86f76268aa8529d43a">CVIRTUAL_ALLOCATION_DESC</a> (UINT64 size, UINT64 alignment, <a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72">VIRTUAL_ALLOCATION_FLAGS</a> flags=<a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72a03576295004dec9dc8f99a895d232027">VIRTUAL_ALLOCATION_FLAG_NONE</a>, void *privateData=NULL) noexcept</td></tr>
+<tr class="memdesc:af72d9f4003fc6b86f76268aa8529d43a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of a virtual allocation with given parameters.  <br /></td></tr>
+<tr class="separator:af72d9f4003fc6b86f76268aa8529d43a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></td></tr>
+<tr class="memitem:ab848f8ad39b5bf8a7c8c077e113e7fc9 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_ab848f8ad39b5bf8a7c8c077e113e7fc9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72">VIRTUAL_ALLOCATION_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#ab848f8ad39b5bf8a7c8c077e113e7fc9">Flags</a></td></tr>
+<tr class="memdesc:ab848f8ad39b5bf8a7c8c077e113e7fc9 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the virtual allocation.  <br /></td></tr>
+<tr class="separator:ab848f8ad39b5bf8a7c8c077e113e7fc9 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a976b649e45abdd0769da0d79acde4bac inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_a976b649e45abdd0769da0d79acde4bac"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac">Size</a></td></tr>
+<tr class="memdesc:a976b649e45abdd0769da0d79acde4bac inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of the allocation.  <br /></td></tr>
+<tr class="separator:a976b649e45abdd0769da0d79acde4bac inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa95e62f2f399339a09dcbb312a42de0 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_aaa95e62f2f399339a09dcbb312a42de0"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0">Alignment</a></td></tr>
+<tr class="memdesc:aaa95e62f2f399339a09dcbb312a42de0 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Required alignment of the allocation.  <br /></td></tr>
+<tr class="separator:aaa95e62f2f399339a09dcbb312a42de0 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa1281297154e3823e98a7cc7e23b5d6b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c" id="r_aa1281297154e3823e98a7cc7e23b5d6b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aa1281297154e3823e98a7cc7e23b5d6b">pPrivateData</a></td></tr>
+<tr class="memdesc:aa1281297154e3823e98a7cc7e23b5d6b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom pointer to be associated with the allocation.  <br /></td></tr>
+<tr class="separator:aa1281297154e3823e98a7cc7e23b5d6b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="af7262b9e3178bb70416603aa32d4e8c6" name="af7262b9e3178bb70416603aa32d4e8c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af7262b9e3178bb70416603aa32d4e8c6">&#9670;&#160;</a></span>CVIRTUAL_ALLOCATION_DESC() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Default constructor. Leaves the structure uninitialized. </p>
+
+</div>
+</div>
+<a id="abc6429b119b65f7cd3ed5c5bd4d36d85" name="abc6429b119b65f7cd3ed5c5bd4d36d85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abc6429b119b65f7cd3ed5c5bd4d36d85">&#9670;&#160;</a></span>CVIRTUAL_ALLOCATION_DESC() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">VIRTUAL_ALLOCATION_DESC</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>o</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().">D3D12MA::VIRTUAL_ALLOCATION_DESC</a> structure. </p>
+
+</div>
+</div>
+<a id="af72d9f4003fc6b86f76268aa8529d43a" name="af72d9f4003fc6b86f76268aa8529d43a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af72d9f4003fc6b86f76268aa8529d43a">&#9670;&#160;</a></span>CVIRTUAL_ALLOCATION_DESC() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_ALLOCATION_DESC::CVIRTUAL_ALLOCATION_DESC </td>
+          <td>(</td>
+          <td class="paramtype">UINT64</td>          <td class="paramname"><span class="paramname"><em>size</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">UINT64</td>          <td class="paramname"><span class="paramname"><em>alignment</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72">VIRTUAL_ALLOCATION_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72a03576295004dec9dc8f99a895d232027">VIRTUAL_ALLOCATION_FLAG_NONE</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *</td>          <td class="paramname"><span class="paramname"><em>privateData</em></span><span class="paramdefsep"> = </span><span class="paramdefval">NULL</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of a virtual allocation with given parameters. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>D:/PROJECTS/D3D12 Memory Allocator/REPO/include/<a class="el" href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
new file mode 100644
index 0000000..6a49299
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html
new file mode 100644
index 0000000..a1ea00c
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html
@@ -0,0 +1,110 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: Member List</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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">CVIRTUAL_BLOCK_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="headertitle"><div class="title">D3D12MA::CVIRTUAL_BLOCK_DESC Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::CVIRTUAL_BLOCK_DESC</a>, including all inherited members.</p>
+<table class="directory">
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2871293dd04cadc9e8f10b5a5acb9b0c">CVIRTUAL_BLOCK_DESC</a>()=default</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::CVIRTUAL_BLOCK_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a223f6535756a128b7fe86f0aa10de9af">CVIRTUAL_BLOCK_DESC</a>(const VIRTUAL_BLOCK_DESC &amp;o) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::CVIRTUAL_BLOCK_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a2984a0b07b432ed8baf387d5230b7112">CVIRTUAL_BLOCK_DESC</a>(UINT64 size, VIRTUAL_BLOCK_FLAGS flags=VIRTUAL_BLOCK_FLAG_NONE, const ALLOCATION_CALLBACKS *allocationCallbacks=NULL) noexcept</td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::CVIRTUAL_BLOCK_DESC</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a1c887a732b4db0c68a07902462e0732b">Flags</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#aa8ea08ad0ee64cb2d29c03b85008317f">pAllocationCallbacks</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></td><td class="entry"></td></tr>
+  <tr class="odd"><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4">Size</a></td><td class="entry"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html
new file mode 100644
index 0000000..d767823
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html
@@ -0,0 +1,240 @@
+<!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" lang="en-US">
+<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.13.0"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>D3D12 Memory Allocator: D3D12MA::CVIRTUAL_BLOCK_DESC 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>
+<script type="text/javascript" src="clipboard.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="cookie.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 id="projectrow">
+  <td id="projectalign">
+   <div id="projectname">D3D12 Memory Allocator
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.13.0 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license-end */
+</script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() { codefold.init(0); });
+/* @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&amp;dn=expat.txt MIT */
+$(function() {
+  initMenu('',true,false,'search.php','Search',false);
+  $(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function(){ initResizable(false); });
+/* @license-end */
+</script>
+<!-- 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">
+<div id="MSearchResults">
+<div class="SRPage">
+<div id="SRIndex">
+<div id="SRResults"></div>
+<div class="SRStatus" id="Loading">Loading...</div>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</div>
+</div>
+</div>
+
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="namespace_d3_d12_m_a.html">D3D12MA</a></li><li class="navelem"><a class="el" href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">CVIRTUAL_BLOCK_DESC</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div id="doc-content">
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c-members.html">List of all members</a>  </div>
+  <div class="headertitle"><div class="title">D3D12MA::CVIRTUAL_BLOCK_DESC Struct Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure.  
+ <a href="#details">More...</a></p>
+
+<p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::CVIRTUAL_BLOCK_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png" usemap="#D3D12MA::CVIRTUAL_5FBLOCK_5FDESC_map" alt=""/>
+  <map id="D3D12MA::CVIRTUAL_5FBLOCK_5FDESC_map" name="D3D12MA::CVIRTUAL_5FBLOCK_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock()." alt="D3D12MA::VIRTUAL_BLOCK_DESC" shape="rect" coords="0,0,227,24"/>
+  </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a2871293dd04cadc9e8f10b5a5acb9b0c" id="r_a2871293dd04cadc9e8f10b5a5acb9b0c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2871293dd04cadc9e8f10b5a5acb9b0c">CVIRTUAL_BLOCK_DESC</a> ()=default</td></tr>
+<tr class="memdesc:a2871293dd04cadc9e8f10b5a5acb9b0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. Leaves the structure uninitialized.  <br /></td></tr>
+<tr class="separator:a2871293dd04cadc9e8f10b5a5acb9b0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a223f6535756a128b7fe86f0aa10de9af" id="r_a223f6535756a128b7fe86f0aa10de9af"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a223f6535756a128b7fe86f0aa10de9af">CVIRTUAL_BLOCK_DESC</a> (const <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">VIRTUAL_BLOCK_DESC</a> &amp;o) noexcept</td></tr>
+<tr class="memdesc:a223f6535756a128b7fe86f0aa10de9af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure.  <br /></td></tr>
+<tr class="separator:a223f6535756a128b7fe86f0aa10de9af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2984a0b07b432ed8baf387d5230b7112" id="r_a2984a0b07b432ed8baf387d5230b7112"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2984a0b07b432ed8baf387d5230b7112">CVIRTUAL_BLOCK_DESC</a> (UINT64 size, <a class="el" href="namespace_d3_d12_m_a.html#a578329923a103be086ac52e3bed2085d">VIRTUAL_BLOCK_FLAGS</a> flags=<a class="el" href="namespace_d3_d12_m_a.html#a578329923a103be086ac52e3bed2085dafc882884f8bacd5cab3087567df8c53d">VIRTUAL_BLOCK_FLAG_NONE</a>, const <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html">ALLOCATION_CALLBACKS</a> *allocationCallbacks=NULL) noexcept</td></tr>
+<tr class="memdesc:a2984a0b07b432ed8baf387d5230b7112"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing description of a virtual block with given parameters.  <br /></td></tr>
+<tr class="separator:a2984a0b07b432ed8baf387d5230b7112"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td colspan="2" onclick="javascript:dynsection.toggleInherit('pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></td></tr>
+<tr class="memitem:a1c887a732b4db0c68a07902462e0732b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c" id="r_a1c887a732b4db0c68a07902462e0732b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#a578329923a103be086ac52e3bed2085d">VIRTUAL_BLOCK_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#a1c887a732b4db0c68a07902462e0732b">Flags</a></td></tr>
+<tr class="memdesc:a1c887a732b4db0c68a07902462e0732b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags.  <br /></td></tr>
+<tr class="separator:a1c887a732b4db0c68a07902462e0732b inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac56491679f276a5a9956ed99bc4654e4 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c" id="r_ac56491679f276a5a9956ed99bc4654e4"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4">Size</a></td></tr>
+<tr class="memdesc:ac56491679f276a5a9956ed99bc4654e4 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total size of the block.  <br /></td></tr>
+<tr class="separator:ac56491679f276a5a9956ed99bc4654e4 inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8ea08ad0ee64cb2d29c03b85008317f inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c" id="r_aa8ea08ad0ee64cb2d29c03b85008317f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html">ALLOCATION_CALLBACKS</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#aa8ea08ad0ee64cb2d29c03b85008317f">pAllocationCallbacks</a></td></tr>
+<tr class="memdesc:aa8ea08ad0ee64cb2d29c03b85008317f inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Custom CPU memory allocation callbacks. Optional.  <br /></td></tr>
+<tr class="separator:aa8ea08ad0ee64cb2d29c03b85008317f inherit pub_attribs_struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Helper structure that helps with complete and conscise initialization of the <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a2871293dd04cadc9e8f10b5a5acb9b0c" name="a2871293dd04cadc9e8f10b5a5acb9b0c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2871293dd04cadc9e8f10b5a5acb9b0c">&#9670;&#160;</a></span>CVIRTUAL_BLOCK_DESC() <span class="overload">[1/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC </td>
+          <td>(</td>
+          <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel default">default</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Default constructor. Leaves the structure uninitialized. </p>
+
+</div>
+</div>
+<a id="a223f6535756a128b7fe86f0aa10de9af" name="a223f6535756a128b7fe86f0aa10de9af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a223f6535756a128b7fe86f0aa10de9af">&#9670;&#160;</a></span>CVIRTUAL_BLOCK_DESC() <span class="overload">[2/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">VIRTUAL_BLOCK_DESC</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>o</em></span></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing from the base <a class="el" href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().">D3D12MA::VIRTUAL_BLOCK_DESC</a> structure. </p>
+
+</div>
+</div>
+<a id="a2984a0b07b432ed8baf387d5230b7112" name="a2984a0b07b432ed8baf387d5230b7112"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2984a0b07b432ed8baf387d5230b7112">&#9670;&#160;</a></span>CVIRTUAL_BLOCK_DESC() <span class="overload">[3/3]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">D3D12MA::CVIRTUAL_BLOCK_DESC::CVIRTUAL_BLOCK_DESC </td>
+          <td>(</td>
+          <td class="paramtype">UINT64</td>          <td class="paramname"><span class="paramname"><em>size</em></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="namespace_d3_d12_m_a.html#a578329923a103be086ac52e3bed2085d">VIRTUAL_BLOCK_FLAGS</a></td>          <td class="paramname"><span class="paramname"><em>flags</em></span><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="namespace_d3_d12_m_a.html#a578329923a103be086ac52e3bed2085dafc882884f8bacd5cab3087567df8c53d">VIRTUAL_BLOCK_FLAG_NONE</a></span>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="struct_d3_d12_m_a_1_1_a_l_l_o_c_a_t_i_o_n___c_a_l_l_b_a_c_k_s.html">ALLOCATION_CALLBACKS</a> *</td>          <td class="paramname"><span class="paramname"><em>allocationCallbacks</em></span><span class="paramdefsep"> = </span><span class="paramdefval">NULL</span>&#160;)</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel inline">inline</span><span class="mlabel explicit">explicit</span><span class="mlabel noexcept">noexcept</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Constructor initializing description of a virtual block with given parameters. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>D:/PROJECTS/D3D12 Memory Allocator/REPO/include/<a class="el" href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.0
+</small></address>
+</div><!-- doc-content -->
+</body>
+</html>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png
new file mode 100644
index 0000000..9809485
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html
index 9e3c17b..f139848 100644
--- a/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html
+++ b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.html
@@ -99,11 +99,20 @@
  <a href="#details">More...</a></p>
 
 <p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::POOL_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.png" usemap="#D3D12MA::POOL_5FDESC_map" alt=""/>
+  <map id="D3D12MA::POOL_5FDESC_map" name="D3D12MA::POOL_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_c_p_o_o_l___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::POOL_DESC struc..." alt="D3D12MA::CPOOL_DESC" shape="rect" coords="0,56,162,80"/>
+  </map>
+</div></div>
 <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:ac4ed93b0191344d68c0b4ac1a4822ff4" id="r_ac4ed93b0191344d68c0b4ac1a4822ff4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#a919d8545365d6b7209a964f2b99936d1">POOL_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ac4ed93b0191344d68c0b4ac1a4822ff4">Flags</a></td></tr>
-<tr class="memdesc:ac4ed93b0191344d68c0b4ac1a4822ff4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags.  <br /></td></tr>
+<tr class="memdesc:ac4ed93b0191344d68c0b4ac1a4822ff4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the heap.  <br /></td></tr>
 <tr class="separator:ac4ed93b0191344d68c0b4ac1a4822ff4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a06e06813bcb5206e9f7a8b0564bf1d6a" id="r_a06e06813bcb5206e9f7a8b0564bf1d6a"><td class="memItemLeft" align="right" valign="top">D3D12_HEAP_PROPERTIES&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a06e06813bcb5206e9f7a8b0564bf1d6a">HeapProperties</a></td></tr>
 <tr class="memdesc:a06e06813bcb5206e9f7a8b0564bf1d6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The parameters of memory heap where allocations of this pool should be placed.  <br /></td></tr>
@@ -162,7 +171,8 @@
       </table>
 </div><div class="memdoc">
 
-<p>Flags. </p>
+<p>Flags for the heap. </p>
+<p>It is recommended to use <a class="el" href="_d3_d12_mem_alloc_8h.html#ac3d50f134ad24c58df4a934b87847653">D3D12MA_RECOMMENDED_HEAP_FLAGS</a>. </p>
 
 </div>
 </div>
@@ -180,7 +190,7 @@
 
 <p>Heap flags to be used when allocating heaps of this pool. </p>
 <p>It should contain one of these values, depending on type of resources you are going to create in this heap: <code>D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS</code>, <code>D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES</code>, <code>D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES</code>. Except if ResourceHeapTier = 2, then it may be <code>D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES</code> = 0.</p>
-<p>You can specify additional flags if needed. </p>
+<p>It is recommended to also add <a class="el" href="_d3_d12_mem_alloc_8h.html#a2679d8c9f6d900168bb45450bc88998b" title="Set of flags recommended for use in D3D12MA::POOL_DESC::Flags for optimal performance.">D3D12MA_RECOMMENDED_POOL_FLAGS</a>. You can specify additional flags if needed. </p>
 
 </div>
 </div>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.png
new file mode 100644
index 0000000..4d6107f
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_p_o_o_l___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
index 8187a44..bbdc5a0 100644
--- a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
+++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html
@@ -99,11 +99,20 @@
  <a href="#details">More...</a></p>
 
 <p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::VIRTUAL_ALLOCATION_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png" usemap="#D3D12MA::VIRTUAL_5FALLOCATION_5FDESC_map" alt=""/>
+  <map id="D3D12MA::VIRTUAL_5FALLOCATION_5FDESC_map" name="D3D12MA::VIRTUAL_5FALLOCATION_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_ALLOCAT..." alt="D3D12MA::CVIRTUAL_ALLOCATION_DESC" shape="rect" coords="0,56,265,80"/>
+  </map>
+</div></div>
 <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:ab848f8ad39b5bf8a7c8c077e113e7fc9" id="r_ab848f8ad39b5bf8a7c8c077e113e7fc9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespace_d3_d12_m_a.html#a7e4152ccaf661f5398b24a23cbe9ae72">VIRTUAL_ALLOCATION_FLAGS</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#ab848f8ad39b5bf8a7c8c077e113e7fc9">Flags</a></td></tr>
-<tr class="memdesc:ab848f8ad39b5bf8a7c8c077e113e7fc9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags.  <br /></td></tr>
+<tr class="memdesc:ab848f8ad39b5bf8a7c8c077e113e7fc9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Flags for the virtual allocation.  <br /></td></tr>
 <tr class="separator:ab848f8ad39b5bf8a7c8c077e113e7fc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a976b649e45abdd0769da0d79acde4bac" id="r_a976b649e45abdd0769da0d79acde4bac"><td class="memItemLeft" align="right" valign="top">UINT64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a976b649e45abdd0769da0d79acde4bac">Size</a></td></tr>
 <tr class="memdesc:a976b649e45abdd0769da0d79acde4bac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of the allocation.  <br /></td></tr>
@@ -147,7 +156,7 @@
       </table>
 </div><div class="memdoc">
 
-<p>Flags. </p>
+<p>Flags for the virtual allocation. </p>
 
 </div>
 </div>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
new file mode 100644
index 0000000..a9d4204
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.png
Binary files differ
diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html
index c95a5bb..0d54cd5 100644
--- a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html
+++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html
@@ -99,6 +99,15 @@
  <a href="#details">More...</a></p>
 
 <p><code>#include &lt;D3D12MemAlloc.h&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for D3D12MA::VIRTUAL_BLOCK_DESC:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png" usemap="#D3D12MA::VIRTUAL_5FBLOCK_5FDESC_map" alt=""/>
+  <map id="D3D12MA::VIRTUAL_5FBLOCK_5FDESC_map" name="D3D12MA::VIRTUAL_5FBLOCK_5FDESC_map">
+<area href="struct_d3_d12_m_a_1_1_c_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html" title="Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_BLOCK_D..." alt="D3D12MA::CVIRTUAL_BLOCK_DESC" shape="rect" coords="0,56,227,80"/>
+  </map>
+</div></div>
 <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>
diff --git a/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png
new file mode 100644
index 0000000..bdf1b04
--- /dev/null
+++ b/docs/html/struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.png
Binary files differ
diff --git a/docs/html/virtual_allocator.html b/docs/html/virtual_allocator.html
index 0b4d615..500edde 100644
--- a/docs/html/virtual_allocator.html
+++ b/docs/html/virtual_allocator.html
@@ -105,9 +105,9 @@
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="class_d3_d12_m_a_1_1_virtual_block.html">D3D12MA::VirtualBlock</a> *block;</div>
 <div class="line">HRESULT hr = CreateVirtualBlock(&amp;blockDesc, &amp;block);</div>
-<div class="ttc" id="aclass_d3_d12_m_a_1_1_virtual_block_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_virtual_block.html">D3D12MA::VirtualBlock</a></div><div class="ttdoc">Represents pure allocation algorithm and a data structure with allocations in some memory block,...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1530</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1436</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c_html_ac56491679f276a5a9956ed99bc4654e4"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4">D3D12MA::VIRTUAL_BLOCK_DESC::Size</a></div><div class="ttdeci">UINT64 Size</div><div class="ttdoc">Total size of the block.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1444</div></div>
+<div class="ttc" id="aclass_d3_d12_m_a_1_1_virtual_block_html"><div class="ttname"><a href="class_d3_d12_m_a_1_1_virtual_block.html">D3D12MA::VirtualBlock</a></div><div class="ttdoc">Represents pure allocation algorithm and a data structure with allocations in some memory block,...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1567</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html">D3D12MA::VIRTUAL_BLOCK_DESC</a></div><div class="ttdoc">Parameters of created D3D12MA::VirtualBlock object to be passed to CreateVirtualBlock().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1473</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c_html_ac56491679f276a5a9956ed99bc4654e4"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4">D3D12MA::VIRTUAL_BLOCK_DESC::Size</a></div><div class="ttdeci">UINT64 Size</div><div class="ttdoc">Total size of the block.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1481</div></div>
 </div><!-- fragment --><h1><a class="anchor" id="virtual_allocator_making_virtual_allocations"></a>
 Making virtual allocations</h1>
 <p><a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html" title="Represents pure allocation algorithm and a data structure with allocations in some memory block,...">D3D12MA::VirtualBlock</a> object contains internal data structure that keeps track of free and occupied regions using the same code as the main D3D12 memory allocator. A single allocation is identified by a lightweight structure <a class="el" href="struct_d3_d12_m_a_1_1_virtual_allocation.html" title="Represents single memory allocation done inside VirtualBlock.">D3D12MA::VirtualAllocation</a>. You will also likely want to know the offset at which the allocation was made in the block.</p>
@@ -132,9 +132,9 @@
 <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="aclass_d3_d12_m_a_1_1_virtual_block_html_a9281daf76e888ea1bd5247d5732e8179"><div class="ttname"><a href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179">D3D12MA::VirtualBlock::Allocate</a></div><div class="ttdeci">HRESULT Allocate(const VIRTUAL_ALLOCATION_DESC *pDesc, VirtualAllocation *pAllocation, UINT64 *pOffset)</div><div class="ttdoc">Creates new allocation.</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1481</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a976b649e45abdd0769da0d79acde4bac"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac">D3D12MA::VIRTUAL_ALLOCATION_DESC::Size</a></div><div class="ttdeci">UINT64 Size</div><div class="ttdoc">Size of the allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1488</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_virtual_allocation_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_virtual_allocation.html">D3D12MA::VirtualAllocation</a></div><div class="ttdoc">Represents single memory allocation done inside VirtualBlock.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:471</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html">D3D12MA::VIRTUAL_ALLOCATION_DESC</a></div><div class="ttdoc">Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1518</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_a976b649e45abdd0769da0d79acde4bac"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#a976b649e45abdd0769da0d79acde4bac">D3D12MA::VIRTUAL_ALLOCATION_DESC::Size</a></div><div class="ttdeci">UINT64 Size</div><div class="ttdoc">Size of the allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1525</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_virtual_allocation_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_virtual_allocation.html">D3D12MA::VirtualAllocation</a></div><div class="ttdoc">Represents single memory allocation done inside VirtualBlock.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:501</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="class_d3_d12_m_a_1_1_virtual_block.html#aab44e46bd122054c894fc84740f1e8fb" title="Frees the allocation.">D3D12MA::VirtualBlock::FreeAllocation</a>.</p>
@@ -171,7 +171,7 @@
 <div class="line"><a class="code hl_struct" href="struct_d3_d12_m_a_1_1_virtual_allocation.html">D3D12MA::VirtualAllocation</a> alloc;</div>
 <div class="line">UINT64 allocOffset;</div>
 <div class="line">hr = block-&gt;<a class="code hl_function" href="class_d3_d12_m_a_1_1_virtual_block.html#a9281daf76e888ea1bd5247d5732e8179">Allocate</a>(&amp;allocDesc, &amp;alloc, &amp;allocOffset);</div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aaa95e62f2f399339a09dcbb312a42de0"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0">D3D12MA::VIRTUAL_ALLOCATION_DESC::Alignment</a></div><div class="ttdeci">UINT64 Alignment</div><div class="ttdoc">Required alignment of the allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1493</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c_html_aaa95e62f2f399339a09dcbb312a42de0"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_v_i_r_t_u_a_l___a_l_l_o_c_a_t_i_o_n___d_e_s_c.html#aaa95e62f2f399339a09dcbb312a42de0">D3D12MA::VIRTUAL_ALLOCATION_DESC::Alignment</a></div><div class="ttdeci">UINT64 Alignment</div><div class="ttdoc">Required alignment of the allocation.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:1530</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_d3_d12_m_a_1_1_v_i_r_t_u_a_l___b_l_o_c_k___d_e_s_c.html#ac56491679f276a5a9956ed99bc4654e4" title="Total size of the block.">D3D12MA::VIRTUAL_BLOCK_DESC::Size</a></li>
@@ -186,9 +186,9 @@
 <div class="line">printf(<span class="stringliteral">&quot;My virtual block has %llu bytes used by %u virtual allocations\n&quot;</span>,</div>
 <div class="line">    stats.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_statistics.html#a53cfe3d241124b5a8e8058871a4b50e8">AllocationBytes</a>, stats.<a class="code hl_variable" href="struct_d3_d12_m_a_1_1_statistics.html#aef88ac53531db43a8888ad2be4a06c68">AllocationCount</a>);</div>
 <div class="ttc" id="aclass_d3_d12_m_a_1_1_virtual_block_html_a0f1dda0e019e218b021f64987a74b110"><div class="ttname"><a href="class_d3_d12_m_a_1_1_virtual_block.html#a0f1dda0e019e218b021f64987a74b110">D3D12MA::VirtualBlock::GetStatistics</a></div><div class="ttdeci">void GetStatistics(Statistics *pStats) const</div><div class="ttdoc">Retrieves basic statistics of the virtual block that are fast to calculate.</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html">D3D12MA::Statistics</a></div><div class="ttdoc">Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:349</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html_a53cfe3d241124b5a8e8058871a4b50e8"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html#a53cfe3d241124b5a8e8058871a4b50e8">D3D12MA::Statistics::AllocationBytes</a></div><div class="ttdeci">UINT64 AllocationBytes</div><div class="ttdoc">Total number of bytes occupied by all D3D12MA::Allocation objects.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:367</div></div>
-<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html_aef88ac53531db43a8888ad2be4a06c68"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html#aef88ac53531db43a8888ad2be4a06c68">D3D12MA::Statistics::AllocationCount</a></div><div class="ttdeci">UINT AllocationCount</div><div class="ttdoc">Number of D3D12MA::Allocation objects allocated.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:357</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html">D3D12MA::Statistics</a></div><div class="ttdoc">Calculated statistics of memory usage e.g. in a specific memory heap type, memory segment group,...</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:379</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html_a53cfe3d241124b5a8e8058871a4b50e8"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html#a53cfe3d241124b5a8e8058871a4b50e8">D3D12MA::Statistics::AllocationBytes</a></div><div class="ttdeci">UINT64 AllocationBytes</div><div class="ttdoc">Total number of bytes occupied by all D3D12MA::Allocation objects.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:397</div></div>
+<div class="ttc" id="astruct_d3_d12_m_a_1_1_statistics_html_aef88ac53531db43a8888ad2be4a06c68"><div class="ttname"><a href="struct_d3_d12_m_a_1_1_statistics.html#aef88ac53531db43a8888ad2be4a06c68">D3D12MA::Statistics::AllocationCount</a></div><div class="ttdeci">UINT AllocationCount</div><div class="ttdoc">Number of D3D12MA::Allocation objects allocated.</div><div class="ttdef"><b>Definition</b> D3D12MemAlloc.h:387</div></div>
 </div><!-- fragment --><p>More detailed statistics can be obtained using function <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a614a82247ce6cf29c38895e16eb971d9" title="Retrieves detailed statistics of the virtual block that are slower to calculate.">D3D12MA::VirtualBlock::CalculateStatistics()</a>, but they are slower to calculate.</p>
 <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="class_d3_d12_m_a_1_1_virtual_block.html#a828a27070bfa762cae796d4c8f2ef703" title="Builds and returns statistics as a string in JSON format, including the list of allocations with thei...">D3D12MA::VirtualBlock::BuildStatsString</a>. Returned string must be later freed using <a class="el" href="class_d3_d12_m_a_1_1_virtual_block.html#a6f78ddaa7da194e239089e52093e68a9" title="Frees memory of a string returned from VirtualBlock::BuildStatsString.">D3D12MA::VirtualBlock::FreeStatsString</a>. The format of this string may differ from the one returned by the main D3D12 allocator, but it is similar.</p>
 <h1><a class="anchor" id="virtual_allocator_additional_considerations"></a>
diff --git a/include/D3D12MemAlloc.h b/include/D3D12MemAlloc.h
index effb9ea..de44307 100644
--- a/include/D3D12MemAlloc.h
+++ b/include/D3D12MemAlloc.h
@@ -38,6 +38,7 @@
     - [Creating resources](@ref quick_start_creating_resources)

     - [Resource reference counting](@ref quick_start_resource_reference_counting)

     - [Mapping memory](@ref quick_start_mapping_memory)

+    - [Helper structures](@ref quick_start_helper_structures)

 - \subpage custom_pools

 - \subpage optimal_allocation

     - [Avoiding running out of memory](@ref optimal_allocation_avoiding_running_out_of_memory)

@@ -82,15 +83,23 @@
     #include <dxgi1_4.h>

 #endif

 

-// Define this macro to 0 to disable usage of DXGI 1.4 (needed for IDXGIAdapter3 and query for memory budget).

 #ifndef D3D12MA_DXGI_1_4

     #ifdef __IDXGIAdapter3_INTERFACE_DEFINED__

+        /// Define this macro to 0 to disable usage of DXGI 1.4 (which is used for IDXGIAdapter3 and query for memory budget).

         #define D3D12MA_DXGI_1_4 1

     #else

         #define D3D12MA_DXGI_1_4 0

     #endif

 #endif

 

+#ifndef D3D12MA_CREATE_NOT_ZEROED_AVAILABLE

+    #ifdef __ID3D12Device8_INTERFACE_DEFINED__

+        #define D3D12MA_CREATE_NOT_ZEROED_AVAILABLE 1

+    #else

+        #define D3D12MA_CREATE_NOT_ZEROED_AVAILABLE 0

+    #endif

+#endif

+

 #ifndef D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT

     /** \brief

     When defined to value other than 0, the library will try to use

@@ -112,6 +121,26 @@
     #define D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT 1

 #endif

 

+#ifndef D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS

+    /// Set of flags recommended for use in D3D12MA::ALLOCATOR_DESC::Flags for optimal performance.

+    #define D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS (ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED | ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)

+#endif

+

+#ifndef D3D12MA_RECOMMENDED_HEAP_FLAGS

+    #if D3D12MA_CREATE_NOT_ZEROED_AVAILABLE

+        /// Set of flags recommended for use in D3D12MA::POOL_DESC::HeapFlags for optimal performance.

+        #define D3D12MA_RECOMMENDED_HEAP_FLAGS (D3D12_HEAP_FLAG_CREATE_NOT_ZEROED)

+    #else

+        #define D3D12MA_RECOMMENDED_HEAP_FLAGS (D3D12_HEAP_FLAG_NONE)

+    #endif

+#endif

+

+#ifndef D3D12MA_RECOMMENDED_POOL_FLAGS

+    /// Set of flags recommended for use in D3D12MA::POOL_DESC::Flags for optimal performance.

+    #define D3D12MA_RECOMMENDED_POOL_FLAGS (POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED)

+#endif

+

+

 /// \cond INTERNAL

 

 #define D3D12MA_CLASS_NO_COPY(className) \

@@ -305,7 +334,7 @@
 /// \brief Parameters of created D3D12MA::Allocation object. To be used with Allocator::CreateResource.

 struct ALLOCATION_DESC

 {

-    /// Flags.

+    /// Flags for the allocation.

     ALLOCATION_FLAGS Flags;

     /** \brief The type of memory heap where the new allocation should be placed.

 

@@ -332,7 +361,8 @@
     D3D12_HEAP_FLAGS ExtraHeapFlags;

     /** \brief Custom pool to place the new resource in. Optional.

 

-    When not NULL, the resource will be created inside specified custom pool.

+    When not null, the resource will be created inside specified custom pool.

+    Members `HeapType`, `ExtraHeapFlags` are then ignored.

     */

     Pool* CustomPool;

     /// Custom general-purpose pointer that will be stored in D3D12MA::Allocation.

@@ -863,7 +893,10 @@
 /// \brief Parameters of created D3D12MA::Pool object. To be used with D3D12MA::Allocator::CreatePool.

 struct POOL_DESC

 {

-    /// Flags.

+    /** \brief Flags for the heap.

+    

+    It is recommended to use #D3D12MA_RECOMMENDED_HEAP_FLAGS.

+    */

     POOL_FLAGS Flags;

     /** \brief The parameters of memory heap where allocations of this pool should be placed.

 

@@ -878,7 +911,8 @@
     `D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES`,

     `D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES`.

     Except if ResourceHeapTier = 2, then it may be `D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES` = 0.

-    

+

+    It is recommended to also add #D3D12MA_RECOMMENDED_POOL_FLAGS.

     You can specify additional flags if needed.

     */

     D3D12_HEAP_FLAGS HeapFlags;

@@ -1077,7 +1111,10 @@
 /// \brief Parameters of created Allocator object. To be used with CreateAllocator().

 struct ALLOCATOR_DESC

 {

-    /// Flags.

+    /** \brief Flags for the entire allocator.

+    

+    It is recommended to use #D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS.

+    */

     ALLOCATOR_FLAGS Flags;

     

     /** Direct3D device object that the allocator should be attached to.

@@ -1479,7 +1516,7 @@
 /// Parameters of created virtual allocation to be passed to VirtualBlock::Allocate().

 struct VIRTUAL_ALLOCATION_DESC

 {

-    /// Flags.

+    /// Flags for the virtual allocation.

     VIRTUAL_ALLOCATION_FLAGS Flags;

     /** \brief Size of the allocation.

     

@@ -1604,6 +1641,143 @@
 */

 D3D12MA_API HRESULT CreateVirtualBlock(const VIRTUAL_BLOCK_DESC* pDesc, VirtualBlock** ppVirtualBlock);

 

+#ifndef D3D12MA_NO_HELPERS

+

+/** \brief Helper structure that helps with complete and conscise initialization of the D3D12MA::ALLOCATION_DESC structure.

+ */

+struct CALLOCATION_DESC : public ALLOCATION_DESC

+{

+    /// Default constructor. Leaves the structure uninitialized.

+    CALLOCATION_DESC() = default;

+    /// Constructor initializing from the base D3D12MA::ALLOCATION_DESC structure.

+    explicit CALLOCATION_DESC(const ALLOCATION_DESC& o) noexcept

+        : ALLOCATION_DESC(o)

+    {

+    }

+    /// Constructor initializing description of an allocation to be created in a specific custom pool.

+    explicit CALLOCATION_DESC(Pool* customPool,

+        ALLOCATION_FLAGS flags = ALLOCATION_FLAG_NONE,

+        void* privateData = NULL) noexcept

+    {

+        Flags = flags;

+        HeapType = (D3D12_HEAP_TYPE)0;

+        ExtraHeapFlags = D3D12_HEAP_FLAG_NONE;

+        CustomPool = customPool;

+        pPrivateData = privateData;

+    }

+    /// Constructor initializing description of an allocation to be created in a default pool of a specific `D3D12_HEAP_TYPE`.

+    explicit CALLOCATION_DESC(D3D12_HEAP_TYPE heapType,

+        ALLOCATION_FLAGS flags = ALLOCATION_FLAG_NONE,

+        void* privateData = NULL,

+        D3D12_HEAP_FLAGS extraHeapFlags = D3D12_HEAP_FLAG_NONE) noexcept

+    {

+        Flags = flags;

+        HeapType = heapType;

+        ExtraHeapFlags = extraHeapFlags;

+        CustomPool = NULL;

+        pPrivateData = privateData;

+    }

+};

+

+/** \brief Helper structure that helps with complete and conscise initialization of the D3D12MA::POOL_DESC structure.

+ */

+struct CPOOL_DESC : public POOL_DESC

+{

+    /// Default constructor. Leaves the structure uninitialized.

+    CPOOL_DESC() = default;

+    /// Constructor initializing from the base D3D12MA::POOL_DESC structure.

+    explicit CPOOL_DESC(const POOL_DESC& o) noexcept

+        : POOL_DESC(o)

+    {

+    }

+    /// Constructor initializing description of a custom pool created in one of the standard `D3D12_HEAP_TYPE`.

+    explicit CPOOL_DESC(D3D12_HEAP_TYPE heapType,

+        D3D12_HEAP_FLAGS heapFlags,

+        POOL_FLAGS flags = D3D12MA_RECOMMENDED_POOL_FLAGS,

+        UINT64 blockSize = 0,

+        UINT minBlockCount = 0,

+        UINT maxBlockCount = UINT_MAX,

+        D3D12_RESIDENCY_PRIORITY residencyPriority = D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept

+    {

+        Flags = flags;

+        HeapProperties = {};

+        HeapProperties.Type = heapType;

+        HeapFlags = heapFlags;

+        BlockSize = blockSize;

+        MinBlockCount = minBlockCount;

+        MaxBlockCount = maxBlockCount;

+        MinAllocationAlignment = 0;

+        pProtectedSession = NULL;

+        ResidencyPriority = residencyPriority;

+    }

+    /// Constructor initializing description of a custom pool created with custom `D3D12_HEAP_PROPERTIES`.

+    explicit CPOOL_DESC(const D3D12_HEAP_PROPERTIES heapProperties,

+        D3D12_HEAP_FLAGS heapFlags,

+        POOL_FLAGS flags = D3D12MA_RECOMMENDED_POOL_FLAGS,

+        UINT64 blockSize = 0,

+        UINT minBlockCount = 0,

+        UINT maxBlockCount = UINT_MAX,

+        D3D12_RESIDENCY_PRIORITY residencyPriority = D3D12_RESIDENCY_PRIORITY_NORMAL) noexcept

+    {

+        Flags = flags;

+        HeapProperties = heapProperties;

+        HeapFlags = heapFlags;

+        BlockSize = blockSize;

+        MinBlockCount = minBlockCount;

+        MaxBlockCount = maxBlockCount;

+        MinAllocationAlignment = 0;

+        pProtectedSession = NULL;

+        ResidencyPriority = residencyPriority;

+    }

+};

+

+/** \brief Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_BLOCK_DESC structure.

+ */

+struct CVIRTUAL_BLOCK_DESC : public VIRTUAL_BLOCK_DESC

+{

+    /// Default constructor. Leaves the structure uninitialized.

+    CVIRTUAL_BLOCK_DESC() = default;

+    /// Constructor initializing from the base D3D12MA::VIRTUAL_BLOCK_DESC structure.

+    explicit CVIRTUAL_BLOCK_DESC(const VIRTUAL_BLOCK_DESC& o) noexcept

+        : VIRTUAL_BLOCK_DESC(o)

+    {

+    }

+    /// Constructor initializing description of a virtual block with given parameters.

+    explicit CVIRTUAL_BLOCK_DESC(UINT64 size,

+        VIRTUAL_BLOCK_FLAGS flags = VIRTUAL_BLOCK_FLAG_NONE,

+        const ALLOCATION_CALLBACKS* allocationCallbacks = NULL) noexcept

+    {

+        Flags = flags;

+        Size = size;

+        pAllocationCallbacks = allocationCallbacks;

+    }

+};

+

+/** \brief Helper structure that helps with complete and conscise initialization of the D3D12MA::VIRTUAL_ALLOCATION_DESC structure.

+ */

+struct CVIRTUAL_ALLOCATION_DESC : public VIRTUAL_ALLOCATION_DESC

+{

+    /// Default constructor. Leaves the structure uninitialized.

+    CVIRTUAL_ALLOCATION_DESC() = default;

+    /// Constructor initializing from the base D3D12MA::VIRTUAL_ALLOCATION_DESC structure.

+    explicit CVIRTUAL_ALLOCATION_DESC(const VIRTUAL_ALLOCATION_DESC& o) noexcept

+        : VIRTUAL_ALLOCATION_DESC(o)

+    {

+    }

+    /// Constructor initializing description of a virtual allocation with given parameters.

+    explicit CVIRTUAL_ALLOCATION_DESC(UINT64 size, UINT64 alignment,

+        VIRTUAL_ALLOCATION_FLAGS flags = VIRTUAL_ALLOCATION_FLAG_NONE,

+        void* privateData = NULL) noexcept

+    {

+        Flags = flags;

+        Size = size;

+        Alignment = alignment;

+        pPrivateData = privateData;

+    }

+};

+

+#endif // #ifndef D3D12MA_NO_HELPERS

+

 } // namespace D3D12MA

 

 /// \cond INTERNAL

@@ -1648,18 +1822,17 @@
 Please note that all symbols of the library are declared inside #D3D12MA namespace.

 

 \code

-IDXGIAdapter* adapter = (...)

-ID3D12Device* device = (...)

+IDXGIAdapter* adapter = ...

+ID3D12Device* device = ...

 

 D3D12MA::ALLOCATOR_DESC allocatorDesc = {};

 allocatorDesc.pDevice = device;

 allocatorDesc.pAdapter = adapter;

-// These flags are optional but recommended.

-allocatorDesc.Flags = D3D12MA::ALLOCATOR_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED |

-    D3D12MA::ALLOCATOR_FLAG_DEFAULT_POOLS_NOT_ZEROED;

+allocatorDesc.Flags = D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS;

 

 D3D12MA::Allocator* allocator;

 HRESULT hr = D3D12MA::CreateAllocator(&allocatorDesc, &allocator);

+// Check hr...

 \endcode

 

 (5.) Right before destroying the D3D12 device, destroy the allocator object.

@@ -1716,8 +1889,10 @@
     NULL,

     &allocation,

     IID_NULL, NULL);

+// Check hr...

 

-// Use allocation->GetResource()...

+ID3D12Resource* res = allocation->GetResource();

+// Use res...

 \endcode

 

 You need to release the allocation object when no longer needed.

@@ -1829,7 +2004,7 @@
 

 \code

 const UINT64 bufSize = 65536;

-const float* bufData = (...);

+const float* bufData = ...;

 

 D3D12_RESOURCE_DESC resourceDesc = {};

 resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

@@ -1867,6 +2042,68 @@
 \endcode

 

 

+\section quick_start_helper_structures Helper structures

+

+DirectX 12 Agility SDK offers a library of helpers in files "build\native\include\d3dx12\*.h".

+They include structures that help with complete and concise initialization of the core D3D12 `*_DESC` structures

+by using some basic C++ features (constructors, static methods, default parameters).

+They inherit from these structures, so they support implicit casting to them.

+For example, structure `CD3DX12_RESOURCE_DESC` can be used to conveniently fill in structure `D3D12_RESOURCE_DESC`.

+

+Similarly, this library provides a set of helper structures that aid in initialization of some of the `*_DESC` structures defined in the library.

+These are:

+

+- D3D12MA::CALLOCATION_DESC, which inherits from D3D12MA::ALLOCATION_DESC.

+- D3D12MA::CPOOL_DESC, which inherits from D3D12MA::POOL_DESC.

+- D3D12MA::CVIRTUAL_BLOCK_DESC, which inherits from D3D12MA::VIRTUAL_BLOCK_DESC.

+- D3D12MA::CVIRTUAL_ALLOCATION_DESC, which inherits from D3D12MA::VIRTUAL_ALLOCATION_DESC.

+

+For example, when you want to create a buffer in the `UPLAOD` heap using minimal allocation time, you can use base structures:

+

+\code

+D3D12MA::ALLOCATION_DESC allocDesc;

+allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_STRATEGY_MIN_TIME;

+allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_NONE;

+allocDesc.CustomPool = NULL;

+allocDesc.pPrivateData = NULL;

+

+D3D12_RESOURCE_DESC resDesc;

+resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

+resDesc.Alignment = 0;

+resDesc.Width = myBufSize;

+resDesc.Height = 1;

+resDesc.DepthOrArraySize = 1;

+resDesc.MipLevels = 1;

+resDesc.Format = DXGI_FORMAT_UNKNOWN;

+resDesc.SampleDesc.Count = 1;

+resDesc.SampleDesc.Quality = 0;

+resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;

+resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;

+

+D3D12MA::Allocation* alloc;

+ID3D12Resource* res;

+HRESULT hr = allocator->CreateResource(&allocDesc, &resDesc,

+    D3D12_RESOURCE_STATE_COMMON, NULL, &alloc, IID_PPV_ARGS(&res));

+// Check hr...

+\endcode

+

+Or you can use helper structs from both D3X12 library and this library to make the code shorter:

+

+\code

+D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+    D3D12_HEAP_TYPE_UPLOAD,

+    D3D12MA::ALLOCATION_FLAG_STRATEGY_MIN_TIME };

+

+CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(myBufSize);

+

+D3D12MA::Allocation* alloc;

+ID3D12Resource* res;

+HRESULT hr = allocator->CreateResource(&allocDesc, &resDesc,

+    D3D12_RESOURCE_STATE_COMMON, NULL, &alloc, IID_PPV_ARGS(&res));

+// Check hr...

+\endcode

+

 \page custom_pools Custom memory pools

 

 A "pool" is a collection of memory blocks that share certain properties.

@@ -1882,9 +2119,8 @@
 \code

 POOL_DESC poolDesc = {};

 poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-// These flags are optional but recommended.

-poolDesc.Flags = D3D12MA::POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED;

-poolDesc.HeapFlags = D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;

+poolDesc.Flags = D3D12MA_RECOMMENDED_POOL_FLAGS;

+poolDesc.HeapFlags = D3D12MA_RECOMMENDED_HEAP_FLAGS | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

 

 Pool* pool;

 HRESULT hr = allocator->CreatePool(&poolDesc, &pool);

@@ -2122,31 +2358,21 @@
 Example:

 

 \code

-D3D12MA::POOL_DESC poolDesc = {};

-poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS | D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;

+D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+    D3D12_HEAP_TYPE_DEFAULT,

+    D3D12MA_RECOMMENDED_HEAP_FLAGS | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

 poolDesc.ResidencyPriority = D3D12_RESIDENCY_PRIORITY_HIGH; // !!!

 

 D3D12MA::Pool* pool;

 HRESULT hr = allocator->CreatePool(&poolDesc, &pool);

 // Check hr...

 

-D3D12MA::ALLOCATION_DESC allocDesc = {};

-allocDesc.CustomPool = pool;

-allocDesc.Flags = ALLOCATION_FLAG_COMMITTED; // !!!

+D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+    pool,

+    ALLOCATION_FLAG_COMMITTED }; // !!!

 

-D3D12_RESOURCE_DESC resDesc = {};

-resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

-resDesc.Alignment = 0;

-resDesc.Width = 1048576; // Requested buffer size.

-resDesc.Height = 1;

-resDesc.DepthOrArraySize = 1;

-resDesc.MipLevels = 1;

-resDesc.Format = DXGI_FORMAT_UNKNOWN;

-resDesc.SampleDesc.Count = 1;

-resDesc.SampleDesc.Quality = 0;

-resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;

-resDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;

+CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(

+    1048576); // Requested buffer size.

 

 D3D12MA::Allocation* alloc;

 hr = allocator->CreateResource(&allocDesc, &resDesc, D3D12_RESOURCE_STATE_COMMON,

@@ -2218,21 +2444,11 @@
 You can also just try creating such resource. Example:

 

 \code

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_GPU_UPLOAD; // !!!

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_GPU_UPLOAD }; // !!!

 

-    D3D12_RESOURCE_DESC resDesc = {};

-    resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

-    resDesc.Alignment = 0;

-    resDesc.Width = 1048576; // Requested buffer size.

-    resDesc.Height = 1;

-    resDesc.DepthOrArraySize = 1;

-    resDesc.MipLevels = 1;

-    resDesc.Format = DXGI_FORMAT_UNKNOWN;

-    resDesc.SampleDesc.Count = 1;

-    resDesc.SampleDesc.Quality = 0;

-    resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;

-    resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;

+    CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(

+        1048576); // Requested buffer size.

 

     D3D12MA::Allocation* alloc;

     ID3D12Resource* res;

@@ -2346,30 +2562,19 @@
 Example:

 

 \code

-D3D12MA::POOL_DESC poolDesc = {};

-poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS | D3D12_HEAP_FLAG_CREATE_NOT_ZEROED;

-poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

+D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+    D3D12_HEAP_TYPE_DEFAULT,

+    D3D12MA_RECOMMENDED_HEAP_FLAGS | D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

 poolDesc.BlockSize = 100llu * 1024 * 1024; // 100 MB. Explicit BlockSize guarantees placed.

 

 D3D12MA::Pool* pool;

 HRESULT hr = allocator->CreatePool(&poolDesc, &pool);

 // Check hr...

 

-D3D12MA::ALLOCATION_DESC allocDesc = {};

-allocDesc.CustomPool = pool;

+D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool };

 

-D3D12_RESOURCE_DESC resDesc = {};

-resDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

-resDesc.Alignment = 0;

-resDesc.Width = 90llu * 1024 * 1024; // 90 MB

-resDesc.Height = 1;

-resDesc.DepthOrArraySize = 1;

-resDesc.MipLevels = 1;

-resDesc.Format = DXGI_FORMAT_UNKNOWN;

-resDesc.SampleDesc.Count = 1;

-resDesc.SampleDesc.Quality = 0;

-resDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;

-resDesc.Flags = D3D12_RESOURCE_FLAG_NONE;

+CD3DX12_RESOURCE_DESC resDesc = CD3DX12_RESOURCE_DESC::Buffer(

+    90llu * 1024 * 1024); // 90 MB

 

 D3D12MA::Allocation* alloc;

 ID3D12Resource* res;

@@ -3027,7 +3232,7 @@
     _aligned_free(pMemory);

 }

 

-(...)

+...

 

 D3D12MA::ALLOCATION_CALLBACKS allocationCallbacks = {};

 allocationCallbacks.pAllocate = &CustomAllocate;

@@ -3036,10 +3241,12 @@
 D3D12MA::ALLOCATOR_DESC allocatorDesc = {};

 allocatorDesc.pDevice = device;

 allocatorDesc.pAdapter = adapter;

+allocatorDesc.Flags = D3D12MA_RECOMMENDED_ALLOCATOR_FLAGS;

 allocatorDesc.pAllocationCallbacks = &allocationCallbacks;

 

 D3D12MA::Allocator* allocator;

 HRESULT hr = D3D12MA::CreateAllocator(&allocatorDesc, &allocator);

+// Check hr...

 \endcode

 

 

diff --git a/src/D3D12MemAlloc.cpp b/src/D3D12MemAlloc.cpp
index e864e9f..aec4286 100644
--- a/src/D3D12MemAlloc.cpp
+++ b/src/D3D12MemAlloc.cpp
@@ -136,10 +136,6 @@
 

 #define D3D12MA_IID_PPV_ARGS(ppType)   __uuidof(**(ppType)), reinterpret_cast<void**>(ppType)

 

-#ifdef __ID3D12Device8_INTERFACE_DEFINED__

-    #define D3D12MA_CREATE_NOT_ZEROED_AVAILABLE 1

-#endif

-

 namespace D3D12MA

 {

 static constexpr UINT HEAP_TYPE_COUNT = 5;

diff --git a/src/D3D12Sample.cpp b/src/D3D12Sample.cpp
index ea88ee9..e6a410a 100644
--- a/src/D3D12Sample.cpp
+++ b/src/D3D12Sample.cpp
@@ -791,8 +791,7 @@
     depthOptimizedClearValue.DepthStencil.Depth = 1.0f;

     depthOptimizedClearValue.DepthStencil.Stencil = 0;

 

-    D3D12MA::ALLOCATION_DESC depthStencilAllocDesc = {};

-    depthStencilAllocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC depthStencilAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

     D3D12_RESOURCE_DESC depthStencilResourceDesc = {};

     depthStencilResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;

     depthStencilResourceDesc.Alignment = 0;

@@ -915,8 +914,7 @@
 

     for (int i = 0; i < FRAME_BUFFER_COUNT; ++i)

     {

-        D3D12MA::ALLOCATION_DESC constantBufferUploadAllocDesc = {};

-        constantBufferUploadAllocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+        D3D12MA::CALLOCATION_DESC constantBufferUploadAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

         D3D12_RESOURCE_DESC constantBufferResourceDesc = {};

         constantBufferResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

         constantBufferResourceDesc.Alignment = 0;

@@ -1039,8 +1037,7 @@
     // default heap is memory on the GPU. Only the GPU has access to this memory

     // To get data into this heap, we will have to upload the data using

     // an upload heap

-    D3D12MA::ALLOCATION_DESC vertexBufferAllocDesc = {};

-    vertexBufferAllocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC vertexBufferAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

     D3D12_RESOURCE_DESC vertexBufferResourceDesc = {};

     vertexBufferResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     vertexBufferResourceDesc.Alignment = 0;

@@ -1070,8 +1067,7 @@
     // create upload heap

     // upload heaps are used to upload data to the GPU. CPU can write to it, GPU can read from it

     // We will upload the vertex buffer using this heap to the default heap

-    D3D12MA::ALLOCATION_DESC vBufferUploadAllocDesc = {};

-    vBufferUploadAllocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC vBufferUploadAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

     D3D12_RESOURCE_DESC vertexBufferUploadResourceDesc = {};

     vertexBufferUploadResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     vertexBufferUploadResourceDesc.Alignment = 0;

@@ -1152,8 +1148,7 @@
     size_t iBufferSize = sizeof(iList);

 

     // create default heap to hold index buffer

-    D3D12MA::ALLOCATION_DESC indexBufferAllocDesc = {};

-    indexBufferAllocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC indexBufferAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

     D3D12_RESOURCE_DESC indexBufferResourceDesc = {};

     indexBufferResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     indexBufferResourceDesc.Alignment = 0;

@@ -1179,8 +1174,7 @@
     g_IndexBufferAllocation->SetName(L"Index Buffer Resource Heap");

 

     // create upload heap to upload index buffer

-    D3D12MA::ALLOCATION_DESC iBufferUploadAllocDesc = {};

-    iBufferUploadAllocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC iBufferUploadAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

     D3D12_RESOURCE_DESC indexBufferUploadResourceDesc = {};

     indexBufferUploadResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     indexBufferUploadResourceDesc.Alignment = 0;

@@ -1235,8 +1229,7 @@
     g_IndexBufferView.Format = DXGI_FORMAT_R16_UINT;

     g_IndexBufferView.SizeInBytes = (UINT)iBufferSize;

 

-    D3D12MA::ALLOCATION_DESC cbPerObjectUploadAllocDesc = {};

-    cbPerObjectUploadAllocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC cbPerObjectUploadAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

     D3D12_RESOURCE_DESC cbPerObjectUploadResourceDesc = {};

     cbPerObjectUploadResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     cbPerObjectUploadResourceDesc.Alignment = 0;

@@ -1313,8 +1306,7 @@
         textureDesc.Flags = D3D12_RESOURCE_FLAG_NONE;

     }

 

-    D3D12MA::ALLOCATION_DESC textureAllocDesc = {};

-    textureAllocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC textureAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

     CHECK_HR( g_Allocator->CreateResource(

         &textureAllocDesc,

         &textureDesc,

@@ -1336,8 +1328,7 @@
         nullptr, // pRowSizeInBytes

         &textureUploadBufferSize); // pTotalBytes

 

-    D3D12MA::ALLOCATION_DESC textureUploadAllocDesc = {};

-    textureUploadAllocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC textureUploadAllocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

     D3D12_RESOURCE_DESC textureUploadResourceDesc = {};

     textureUploadResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;

     textureUploadResourceDesc.Alignment = 0;

diff --git a/src/Doxyfile b/src/Doxyfile
index a411ab1..24122c9 100644
--- a/src/Doxyfile
+++ b/src/Doxyfile
@@ -2508,7 +2508,8 @@
 # recursively expanded use the := operator instead of the = operator.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-PREDEFINED             = __ID3D12Device1_INTERFACE_DEFINED__ \
+PREDEFINED             = __IDXGIAdapter3_INTERFACE_DEFINED__ \
+                         __ID3D12Device1_INTERFACE_DEFINED__ \
                          __ID3D12Device4_INTERFACE_DEFINED__ \
                          __ID3D12Device8_INTERFACE_DEFINED__ \
                          __ID3D12Device10_INTERFACE_DEFINED__ \
diff --git a/src/Tests.cpp b/src/Tests.cpp
index 89f6dd9..e72e95d 100644
--- a/src/Tests.cpp
+++ b/src/Tests.cpp
@@ -188,10 +188,11 @@
 

 static void FillAllocationsDataGPU(const TestContext& ctx, const ComPtr<D3D12MA::Allocation>* allocs, size_t allocCount, UINT seed)

 {

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

-    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAGS::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12MA::ALLOCATION_FLAG_COMMITTED,

+        NULL, // privateData

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS }; // extraHeapFlags

 

     std::vector<D3D12_RESOURCE_BARRIER> barriers;

     std::vector<ComPtr<D3D12MA::Allocation>> uploadAllocs;

@@ -279,10 +280,11 @@
 

 static void ValidateAllocationsDataGPU(const TestContext& ctx, const ComPtr<D3D12MA::Allocation>* allocs, size_t allocCount, UINT seed)

 {

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_READBACK;

-    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAGS::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_READBACK,

+        D3D12MA::ALLOCATION_FLAG_COMMITTED,

+        NULL, // privateData

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS }; // extraHeapFlags

 

     std::vector<D3D12_RESOURCE_BARRIER> barriers;

     std::vector<ComPtr<D3D12MA::Allocation>> downloadAllocs;

@@ -365,8 +367,7 @@
 

     D3D12_RESOURCE_DESC resDesc = {};

 

-    POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_UPLOAD;

+    CPOOL_DESC poolDesc = CPOOL_DESC{ D3D12_HEAP_TYPE_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

 

     for(size_t algorithmIndex = 0; algorithmIndex < 2; ++algorithmIndex)

     {

@@ -433,8 +434,7 @@
     constexpr size_t ALLOCATION_COUNT = 10;

     for(size_t algorithmIndex = 0; algorithmIndex < 2; ++algorithmIndex)

     {

-        VIRTUAL_BLOCK_DESC blockDesc = {};

-        blockDesc.Size = ALLOCATION_COUNT * MEGABYTE;

+        CVIRTUAL_BLOCK_DESC blockDesc = CVIRTUAL_BLOCK_DESC{ ALLOCATION_COUNT * MEGABYTE };

         switch(algorithmIndex)

         {

         case 0: blockDesc.Flags = VIRTUAL_BLOCK_FLAG_NONE; break;

@@ -449,8 +449,7 @@
         VirtualAllocation allocs[ALLOCATION_COUNT];

         for(size_t i = 0; i < ALLOCATION_COUNT; ++i)

         {

-            VIRTUAL_ALLOCATION_DESC allocDesc = {};

-            allocDesc.Size = 1 * MEGABYTE;

+            CVIRTUAL_ALLOCATION_DESC allocDesc = CVIRTUAL_ALLOCATION_DESC{ 1 * MEGABYTE, 0 };

             CHECK_HR(block->Allocate(&allocDesc, &allocs[i], nullptr));

         }

 

@@ -663,9 +662,9 @@
 

     ResourceWithAllocation resources[count];

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12MA::ALLOCATION_FLAG_COMMITTED };

 

     D3D12_RESOURCE_DESC resourceDesc;

     FillResourceDescForBuffer(resourceDesc, bufSize);

@@ -724,14 +723,13 @@
 {

     wprintf(L"Test small buffers\n");

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc;

     FillResourceDescForBuffer(resDesc, 8 * KILOBYTE);

@@ -797,10 +795,12 @@
 

     // 1. Just memory heap with custom flags

     {

-        D3D12MA::ALLOCATION_DESC allocDesc = {};

-        allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-        allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES |

-            D3D12_HEAP_FLAG_SHARED; // Extra flag.

+        D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+            D3D12_HEAP_TYPE_DEFAULT,

+            D3D12MA::ALLOCATION_FLAG_NONE,

+            NULL, // privateData

+            D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES |

+            D3D12_HEAP_FLAG_SHARED }; // Extra flag.

 

         D3D12_RESOURCE_ALLOCATION_INFO resAllocInfo = {};

         resAllocInfo.SizeInBytes = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT;

@@ -828,9 +828,11 @@
         resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;

         resourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER;

 

-        D3D12MA::ALLOCATION_DESC allocDesc = {};

-        allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-        allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_SHARED | D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER; // Extra flags.

+        D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+            D3D12_HEAP_TYPE_DEFAULT,

+            D3D12MA::ALLOCATION_FLAG_NONE,

+            NULL, // privateData,

+            D3D12_HEAP_FLAG_SHARED | D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER };

 

         ResourceWithAllocation res;

         CHECK_HR( ctx.allocator->CreateResource(

@@ -856,8 +858,7 @@
     const UINT64 bufSize = 64ull * 1024;

     ResourceWithAllocation resources[count];

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

 

     D3D12_RESOURCE_DESC resourceDesc;

     FillResourceDescForBuffer(resourceDesc, bufSize);

@@ -955,8 +956,7 @@
 

     for(uint32_t i = 0; i < 2; ++i)

     {

-        D3D12MA::ALLOCATION_DESC allocDesc = {};

-        allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+        D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

         if(i == 1)

         {

             allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

@@ -989,14 +989,15 @@
     ctx.allocator->CalculateStatistics(&globalStatsBeg);

 

     // # Create pool, 1..2 blocks of 11 MB

-    

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.BlockSize = 11 * MEGABYTE;

-    poolDesc.MinBlockCount = 1;

-    poolDesc.MaxBlockCount = 2;

-    poolDesc.ResidencyPriority = D3D12_RESIDENCY_PRIORITY_HIGH; // Test some residency priority, by the way.

+

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_NONE,

+        11 * MEGABYTE, // blockSize

+        1, // minBlockCount

+        2, // maxBlockCount

+        D3D12_RESIDENCY_PRIORITY_HIGH }; // Test some residency priority, by the way.

 

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR( ctx.allocator->CreatePool(&poolDesc, &pool) );

@@ -1019,8 +1020,7 @@
 

     // # Create buffers 2x 5 MB

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

     allocDesc.ExtraHeapFlags = (D3D12_HEAP_FLAGS)0xCDCDCDCD; // Should be ignored.

     allocDesc.HeapType = (D3D12_HEAP_TYPE)0xCDCDCDCD; // Should be ignored.

 

@@ -1160,7 +1160,7 @@
         }

         else if(poolTypeI == 1)

         {

-            D3D12MA::POOL_DESC poolDesc = {};

+            D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{};

             poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

             poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

             hr = ctx.allocator->CreatePool(&poolDesc, &pool1);

@@ -1169,11 +1169,13 @@
         }

         else if(poolTypeI == 2)

         {

-            D3D12MA::POOL_DESC poolDesc = {};

-            poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-            poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-            poolDesc.MaxBlockCount = 1;

-            poolDesc.BlockSize = 2 * MEGABYTE + MEGABYTE / 2; // 2.5 MB

+            D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+                D3D12_HEAP_TYPE_DEFAULT,

+                D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+                D3D12MA::POOL_FLAG_NONE,

+                2 * MEGABYTE + MEGABYTE / 2, // blockSize = 2.5 MB

+                0, // minBlockCount

+                1 }; // maxBlockCount

             hr = ctx.allocator->CreatePool(&poolDesc, &pool2);

             CHECK_HR(hr);

             allocDesc.CustomPool = pool2.Get();

@@ -1264,16 +1266,15 @@
     constexpr size_t BUFFER_COUNT = 4;

     const UINT64 MIN_ALIGNMENT = 128 * 1024;

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_UPLOAD;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     poolDesc.MinAllocationAlignment = MIN_ALIGNMENT;

 

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR( ctx.allocator->CreatePool(&poolDesc, &pool) );

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc;

     FillResourceDescForBuffer(resDesc, BUFFER_SIZE);

@@ -1296,16 +1297,15 @@
 

     const UINT64 BUFFER_SIZE = 32;

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR( ctx.allocator->CreatePool(&poolDesc, &pool) );

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        pool.Get(),

+        D3D12MA::ALLOCATION_FLAG_COMMITTED };

 

     D3D12_RESOURCE_DESC resDesc;

     FillResourceDescForBuffer(resDesc, BUFFER_SIZE);

@@ -1327,16 +1327,14 @@
 

     const UINT64 BUFFER_SIZE = 256;

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.Flags = D3D12MA::POOL_FLAG_ALWAYS_COMMITTED;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_ALWAYS_COMMITTED };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc;

     FillResourceDescForBuffer(resDesc, BUFFER_SIZE);

@@ -1372,12 +1370,13 @@
     D3D12MA::TotalStatistics globalStatsBeg = {};

     ctx.allocator->CalculateStatistics(&globalStatsBeg);

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties = heapProps;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.BlockSize = 10 * MEGABYTE;

-    poolDesc.MinBlockCount = 1;

-    poolDesc.MaxBlockCount = 1;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        heapProps,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_NONE,

+        10 * MEGABYTE, // blockSize

+        1, // minBlockCount

+        1 }; // maxBlockCount

 

     const UINT64 BUFFER_SIZE = 1 * MEGABYTE;

 

@@ -1385,8 +1384,7 @@
     HRESULT hr = ctx.allocator->CreatePool(&poolDesc, &pool);

     if(SUCCEEDED(hr))

     {

-        D3D12MA::ALLOCATION_DESC allocDesc = {};

-        allocDesc.CustomPool = pool.Get();

+        D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

         D3D12_RESOURCE_DESC resDesc;

         FillResourceDescForBuffer(resDesc, BUFFER_SIZE);

@@ -1453,10 +1451,9 @@
     static const D3D12_HEAP_TYPE heapType = D3D12_HEAP_TYPE_DEFAULT;

     static const UINT64 bufferSize = 1024;

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = heapType;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        heapType,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

@@ -1568,9 +1565,11 @@
     finalAllocInfo.Alignment = std::max(allocInfo1.Alignment, allocInfo2.Alignment);

     finalAllocInfo.SizeInBytes = std::max(allocInfo1.SizeInBytes, allocInfo2.SizeInBytes);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12MA::ALLOCATION_FLAG_NONE,

+        NULL, // privateData

+        D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES };

 

     ComPtr<D3D12MA::Allocation> alloc;

     CHECK_HR( ctx.allocator->AllocateMemory(&allocDesc, &finalAllocInfo, &alloc) );

@@ -1609,9 +1608,9 @@
     D3D12_RESOURCE_DESC resDesc = {};

     FillResourceDescForBuffer(resDesc, 300 * MEGABYTE);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_CAN_ALIAS;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12MA::ALLOCATION_FLAG_CAN_ALIAS };

 

     ComPtr<D3D12MA::Allocation> alloc;

     CHECK_HR(ctx.allocator->CreateResource(&allocDesc, &resDesc,

@@ -1632,16 +1631,14 @@
 {

     wprintf(L"Test MSAA texture always as committed in pool\n");

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.Flags = D3D12MA::POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES,

+        D3D12MA::POOL_FLAG_MSAA_TEXTURES_ALWAYS_COMMITTED };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc = {};

     resDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;

@@ -1669,8 +1666,7 @@
     const UINT64 bufSize = 32ull * 1024;

     ResourceWithAllocation resources[count];

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

 

     D3D12_RESOURCE_DESC resourceDesc;

     FillResourceDescForBuffer(resourceDesc, bufSize);

@@ -1729,8 +1725,7 @@
     const UINT64 bufSize = 64ull * 1024;

     ResourceWithAllocation resources[count];

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

 

     D3D12_RESOURCE_DESC resourceDesc;

     FillResourceDescForBuffer(resourceDesc, bufSize);

@@ -1813,12 +1808,9 @@
     ResourceWithAllocation resourcesDefault[count];

     ResourceWithAllocation resourcesReadback[count];

 

-    D3D12MA::ALLOCATION_DESC allocDescUpload = {};

-    allocDescUpload.HeapType = D3D12_HEAP_TYPE_UPLOAD;

-    D3D12MA::ALLOCATION_DESC allocDescDefault = {};

-    allocDescDefault.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    D3D12MA::ALLOCATION_DESC allocDescReadback = {};

-    allocDescReadback.HeapType = D3D12_HEAP_TYPE_READBACK;

+    D3D12MA::CALLOCATION_DESC allocDescUpload = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

+    D3D12MA::CALLOCATION_DESC allocDescDefault = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

+    D3D12MA::CALLOCATION_DESC allocDescReadback = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_READBACK };

 

     D3D12_RESOURCE_DESC resourceDesc;

     FillResourceDescForBuffer(resourceDesc, bufSize);

@@ -1913,8 +1905,7 @@
     const UINT bufSizeMin = 1024ull;

     const UINT bufSizeMax = 1024ull * 1024;

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_UPLOAD };

 

     // Launch threads.

     std::thread threads[threadCount];

@@ -2047,21 +2038,20 @@
 

     RandomNumberGenerator rand{ 645332 };

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.Flags = D3D12MA::POOL_FLAG_ALGORITHM_LINEAR;

-    poolDesc.BlockSize = 64 * KILOBYTE * 300; // Alignment of buffers is always 64KB

-    poolDesc.MinBlockCount = poolDesc.MaxBlockCount = 1;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_ALGORITHM_LINEAR,

+        64 * KILOBYTE * 300, // blockSize; alignment of buffers is always 64 KB.

+        1, // minBlockCount

+        1 }; // maxBlockCount

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

     D3D12_RESOURCE_DESC buffDesc = {};

     FillResourceDescForBuffer(buffDesc, 0);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     constexpr size_t maxBufCount = 100;

     struct BufferInfo

@@ -2335,19 +2325,17 @@
 

     RandomNumberGenerator rand{ 345673 };

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.Flags = D3D12MA::POOL_FLAG_ALGORITHM_LINEAR;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_ALGORITHM_LINEAR };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

     D3D12_RESOURCE_DESC buffDesc = {};

     FillResourceDescForBuffer(buffDesc, 1024 * 1024);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     struct BufferInfo

     {

@@ -2454,21 +2442,20 @@
     D3D12MA::TotalStatistics origStats;

     ctx.allocator->CalculateStatistics(&origStats);

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.Flags = D3D12MA::POOL_FLAG_ALGORITHM_LINEAR;

-    poolDesc.BlockSize = 6 * 64 * KILOBYTE;

-    poolDesc.MinBlockCount = poolDesc.MaxBlockCount = 1;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_ALGORITHM_LINEAR,

+        6 * 64 * KILOBYTE, // blockSize

+        1, // minBlockCount

+        1 }; // maxBlockCount

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

     D3D12_RESOURCE_DESC buffDesc = {};

     FillResourceDescForBuffer(buffDesc, 0);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     struct BufferInfo

     {

@@ -2555,21 +2542,20 @@
     const size_t maxBufCapacity = 10000;

     const UINT32 iterationCount = 10;

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

-    poolDesc.BlockSize = bufSize * maxBufCapacity;

-    poolDesc.Flags |= algorithm;

-    poolDesc.MinBlockCount = poolDesc.MaxBlockCount = 1;

-

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        algorithm, // flags

+        bufSize * maxBufCapacity, // blockSize

+        1, // minBlockCount

+        1 }; // maxBlockCount

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

     D3D12_RESOURCE_ALLOCATION_INFO allocInfo = {};

     allocInfo.SizeInBytes = bufSize;

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     std::vector<ComPtr<D3D12MA::Allocation>> baseAllocations;

     const size_t allocCount = maxBufCapacity / 3;

@@ -2745,11 +2731,10 @@
         return;

     }

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     poolDesc.pProtectedSession = session.Get();

-    poolDesc.MinAllocationAlignment = 0;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

 

     ComPtr<D3D12MA::Pool> pool;

     hr = ctx.allocator->CreatePool(&poolDesc, &pool);

@@ -2765,8 +2750,7 @@
     for(UINT testIndex = 0; testIndex < 2; ++testIndex)

     {

         // Create a buffer

-        D3D12MA::ALLOCATION_DESC allocDesc = {};

-        allocDesc.CustomPool = pool.Get();

+        D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

         if(testIndex == 0)

             allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

         ComPtr<D3D12MA::Allocation> bufAlloc;

@@ -2807,9 +2791,9 @@
 

     // Create a committed buffer

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12MA::ALLOCATION_FLAG_COMMITTED };

 

     ComPtr<D3D12MA::Allocation> allocPtr0;

     ComPtr<ID3D12Resource> res0;

@@ -2874,9 +2858,9 @@
 

     // Create a committed texture

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    allocDesc.Flags = D3D12MA::ALLOCATION_FLAG_COMMITTED;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12MA::ALLOCATION_FLAG_COMMITTED };

 

     ComPtr<D3D12MA::Allocation> allocPtr0;

     ComPtr<ID3D12Resource> res0;

@@ -2930,8 +2914,7 @@
     ctx.allocator->CalculateStatistics(&begStats);

 

     // Create a buffer, likely placed.

-    ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_GPU_UPLOAD;

+    CALLOCATION_DESC allocDesc = CALLOCATION_DESC{ D3D12_HEAP_TYPE_GPU_UPLOAD };

     D3D12_RESOURCE_DESC resDesc;

     FillResourceDescForBuffer(resDesc, 64 * KILOBYTE);

 

@@ -2956,7 +2939,7 @@
     }

 

     // Create a committed one.

-    ALLOCATION_DESC committedAllocDesc = allocDesc;

+    CALLOCATION_DESC committedAllocDesc = allocDesc;

     committedAllocDesc.Flags |= ALLOCATION_FLAG_COMMITTED;

     ComPtr<Allocation> committedAlloc;

     CHECK_HR(ctx.allocator->CreateResource(&committedAllocDesc, &resDesc,

@@ -2965,13 +2948,11 @@
     CHECK_BOOL(committedAlloc->GetHeap() == NULL); // Committed, heap is implicit and inaccessible.

 

     // Create a custom pool and a buffer inside of it.

-    POOL_DESC poolDesc = {};

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_GPU_UPLOAD;

+    CPOOL_DESC poolDesc = CPOOL_DESC{ D3D12_HEAP_TYPE_GPU_UPLOAD, D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

     ComPtr<Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

     

-    ALLOCATION_DESC poolAllocDesc = {};

-    poolAllocDesc.CustomPool = pool.Get();

+    CALLOCATION_DESC poolAllocDesc = CALLOCATION_DESC{ pool.Get() };

     ComPtr<Allocation> poolAlloc;

     CHECK_HR(ctx.allocator->CreateResource(&poolAllocDesc, &resDesc,

         D3D12_RESOURCE_STATE_COMMON, NULL, &poolAlloc, IID_NULL, NULL));

@@ -3076,18 +3057,20 @@
     // # Create block 16 MB

 

     ComPtr<D3D12MA::VirtualBlock> block;

-    VIRTUAL_BLOCK_DESC blockDesc = {};

-    blockDesc.pAllocationCallbacks = ctx.allocationCallbacks;

-    blockDesc.Size = blockSize;

+    CVIRTUAL_BLOCK_DESC blockDesc = CVIRTUAL_BLOCK_DESC{

+        blockSize,

+        VIRTUAL_BLOCK_FLAG_NONE,

+        ctx.allocationCallbacks };

     CHECK_HR(CreateVirtualBlock(&blockDesc, &block));

     CHECK_BOOL(block);

 

     // # Allocate 8 MB

 

-    VIRTUAL_ALLOCATION_DESC allocDesc = {};

-    allocDesc.Alignment = alignment;

-    allocDesc.pPrivateData = (void*)(uintptr_t)1;

-    allocDesc.Size = 8 * MEGABYTE;

+    CVIRTUAL_ALLOCATION_DESC allocDesc = CVIRTUAL_ALLOCATION_DESC{

+        8 * MEGABYTE, // size

+        alignment,

+        D3D12MA::VIRTUAL_ALLOCATION_FLAG_NONE,

+        (void*)(uintptr_t)1 }; // privateData

     VirtualAllocation alloc0;

     CHECK_HR(block->Allocate(&allocDesc, &alloc0, nullptr));

 

@@ -3196,9 +3179,10 @@
     for (size_t algorithmIndex = 0; algorithmIndex < 2; ++algorithmIndex)

     {

         // Create the block

-        D3D12MA::VIRTUAL_BLOCK_DESC blockDesc = {};

-        blockDesc.pAllocationCallbacks = ctx.allocationCallbacks;

-        blockDesc.Size = 10'000;

+        D3D12MA::CVIRTUAL_BLOCK_DESC blockDesc = D3D12MA::CVIRTUAL_BLOCK_DESC{

+            10'000,

+            D3D12MA::VIRTUAL_BLOCK_FLAG_NONE,

+            ctx.allocationCallbacks };

         switch (algorithmIndex)

         {

         case 0: blockDesc.Flags = D3D12MA::VIRTUAL_BLOCK_FLAG_NONE; break;

@@ -3217,9 +3201,12 @@
         // Make some allocations

         for (size_t i = 0; i < 20; ++i)

         {

-            D3D12MA::VIRTUAL_ALLOCATION_DESC allocDesc = {};

-            allocDesc.Size = calcRandomAllocSize();

-            allocDesc.pPrivateData = (void*)(uintptr_t)(allocDesc.Size * 10);

+            const UINT64 size = calcRandomAllocSize();

+            D3D12MA::CVIRTUAL_ALLOCATION_DESC allocDesc = D3D12MA::CVIRTUAL_ALLOCATION_DESC{

+                size,

+                0, // alignment

+                D3D12MA::VIRTUAL_ALLOCATION_FLAG_NONE,

+                (void*)(uintptr_t)(size * 10) }; // privateData

             if (i < 10) {}

             else if (i < 20 && algorithmIndex == 1) allocDesc.Flags = D3D12MA::VIRTUAL_ALLOCATION_FLAG_UPPER_ADDRESS;

 

@@ -3247,9 +3234,12 @@
         // Allocate some more

         for (size_t i = 0; i < 6; ++i)

         {

-            D3D12MA::VIRTUAL_ALLOCATION_DESC allocDesc = {};

-            allocDesc.Size = calcRandomAllocSize();

-            allocDesc.pPrivateData = (void*)(uintptr_t)(allocDesc.Size * 10);

+            const UINT64 size = calcRandomAllocSize();

+            D3D12MA::CVIRTUAL_ALLOCATION_DESC allocDesc = D3D12MA::CVIRTUAL_ALLOCATION_DESC{

+                size,

+                0, // alignment

+                D3D12MA::VIRTUAL_ALLOCATION_FLAG_NONE,

+                (void*)(uintptr_t)(size * 10) }; // privateData

 

             AllocData alloc = {};

             alloc.requestedSize = allocDesc.Size;

@@ -3267,10 +3257,12 @@
         // Allocate some with extra alignment

         for (size_t i = 0; i < 3; ++i)

         {

-            D3D12MA::VIRTUAL_ALLOCATION_DESC allocDesc = {};

-            allocDesc.Size = calcRandomAllocSize();

-            allocDesc.Alignment = 16;

-            allocDesc.pPrivateData = (void*)(uintptr_t)(allocDesc.Size * 10);

+            const UINT64 size = calcRandomAllocSize();

+            D3D12MA::CVIRTUAL_ALLOCATION_DESC allocDesc = D3D12MA::CVIRTUAL_ALLOCATION_DESC{

+                size,

+                16, // alignment

+                D3D12MA::VIRTUAL_ALLOCATION_FLAG_NONE,

+                (void*)(uintptr_t)(size * 10) }; // privateData

 

             AllocData alloc = {};

             alloc.requestedSize = allocDesc.Size;

@@ -3345,9 +3337,10 @@
     const size_t ALLOCATION_COUNT = 7200;

     const UINT32 MAX_ALLOC_SIZE = 2056;

 

-    D3D12MA::VIRTUAL_BLOCK_DESC blockDesc = {};

-    blockDesc.pAllocationCallbacks = ctx.allocationCallbacks;

-    blockDesc.Size = 0;

+    D3D12MA::CVIRTUAL_BLOCK_DESC blockDesc = D3D12MA::CVIRTUAL_BLOCK_DESC{

+        0,

+        D3D12MA::VIRTUAL_BLOCK_FLAG_NONE,

+        ctx.allocationCallbacks };

 

     RandomNumberGenerator rand{ 20092010 };

 

@@ -3396,9 +3389,9 @@
             time_point timeBegin = std::chrono::high_resolution_clock::now();

             for (size_t i = 0; i < ALLOCATION_COUNT; ++i)

             {

-                D3D12MA::VIRTUAL_ALLOCATION_DESC allocCreateInfo = {};

-                allocCreateInfo.Size = allocSizes[i];

-                allocCreateInfo.Alignment = alignment;

+                D3D12MA::CVIRTUAL_ALLOCATION_DESC allocCreateInfo = D3D12MA::CVIRTUAL_ALLOCATION_DESC{

+                    allocSizes[i],

+                    alignment };

 

                 CHECK_HR(block->Allocate(&allocCreateInfo, allocs + i, nullptr));

             }

@@ -3566,15 +3559,15 @@
         return AlignUp<UINT64>(rand.Generate() % (MAX_BUF_SIZE - MIN_BUF_SIZE + 1) + MIN_BUF_SIZE, 64);

     };

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.BlockSize = BLOCK_SIZE;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_UPLOAD;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_NONE,

+        BLOCK_SIZE };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc = {};

     FillResourceDescForBuffer(resDesc, BUF_SIZE);

@@ -3785,15 +3778,15 @@
         return AlignUp<UINT64>(rand.Generate() % (MAX_BUF_SIZE - MIN_BUF_SIZE + 1) + MIN_BUF_SIZE, 64);

     };

 

-    D3D12MA::POOL_DESC poolDesc = {};

-    poolDesc.BlockSize = BLOCK_SIZE;

-    poolDesc.HeapProperties.Type = D3D12_HEAP_TYPE_UPLOAD;

-    poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CPOOL_DESC poolDesc = D3D12MA::CPOOL_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS,

+        D3D12MA::POOL_FLAG_NONE,

+        BLOCK_SIZE };

     ComPtr<D3D12MA::Pool> pool;

     CHECK_HR(ctx.allocator->CreatePool(&poolDesc, &pool));

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.CustomPool = pool.Get();

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() };

 

     D3D12_RESOURCE_DESC resDesc = {};

     FillResourceDescForBuffer(resDesc, BUF_SIZE);

@@ -3902,9 +3895,11 @@
     const UINT ALLOC_SEED = 20101220;

     std::vector<ComPtr<D3D12MA::Allocation>> allocations;

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_UPLOAD;

-    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_UPLOAD,

+        D3D12MA::ALLOCATION_FLAG_NONE,

+        NULL, // privateData

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

 

     D3D12_RESOURCE_DESC resDesc = {};

     FillResourceDescForBuffer(resDesc, 0x10000);

@@ -3979,9 +3974,11 @@
     D3D12_RESOURCE_DESC resDesc = {};

     FillResourceDescForBuffer(resDesc, 0x10000);

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

-    allocDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{

+        D3D12_HEAP_TYPE_DEFAULT,

+        D3D12MA::ALLOCATION_FLAG_NONE,

+        NULL, // privateData

+        D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS };

 

     // Create all intended buffers.

     for (size_t i = 0; i < bufCount; ++i)

@@ -4051,8 +4048,7 @@
     const size_t percentToLeave = 30;

     RandomNumberGenerator rand = { 234522 };

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

 

     D3D12_RESOURCE_DESC resDesc = {};

     resDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;

@@ -4161,8 +4157,7 @@
     const size_t percentToLeave = 30;

     RandomNumberGenerator rand = { 234522 };

 

-    D3D12MA::ALLOCATION_DESC allocDesc = {};

-    allocDesc.HeapType = D3D12_HEAP_TYPE_DEFAULT;

+    D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ D3D12_HEAP_TYPE_DEFAULT };

 

     D3D12_RESOURCE_DESC resDesc = {};

     resDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;