Merge remote-tracking branch 'origin/master'
diff --git a/CHANGELOG.md b/CHANGELOG.md index d5912f5..4c4546b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md
@@ -1,4 +1,4 @@ -# 3.2.0 (2026-??-??) +# 3.2.0 (2026-06-05) - Added `POOL_FLAG_DONT_USE_TIGHT_ALIGNMENT` (#91). - Further improvements in the algorithm deciding when to use small alignment or tight alignment, including added support for `D3D12_FEATURE_DATA_D3D12_OPTIONS4::MSAA64KBAlignedTextureSupported`.
diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d61b21..5cf7273 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.25) -project(D3D12MemoryAllocator VERSION 3.1.0) +project(D3D12MemoryAllocator VERSION 3.2.0) set_property(GLOBAL PROPERTY USE_FOLDERS ON)
diff --git a/bin/D3D12Sample.exe b/bin/D3D12Sample.exe index 8b4bb3d..1eef953 100644 --- a/bin/D3D12Sample.exe +++ b/bin/D3D12Sample.exe Binary files differ
diff --git a/docs/html/index.html b/docs/html/index.html index 85d770a..8b7875d 100644 --- a/docs/html/index.html +++ b/docs/html/index.html
@@ -101,7 +101,7 @@ <div class="headertitle"><div class="title">D3D12 Memory Allocator </div></div> </div><!--header--> <div class="contents"> -<div class="textblock"><p><b>Version 3.1.0</b> (2026-02-23)</p> +<div class="textblock"><p><b>Version 3.2.0</b> (2026-06-05)</p> <p>Copyright (c) 2019-2026 Advanced Micro Devices, Inc. All rights reserved. <br /> License: MIT</p> <p>Documentation of all members: <a class="el" href="_d3_d12_mem_alloc_8h.html">D3D12MemAlloc.h</a></p>
diff --git a/include/D3D12MemAlloc.h b/include/D3D12MemAlloc.h index 735fb3b..36ec787 100644 --- a/include/D3D12MemAlloc.h +++ b/include/D3D12MemAlloc.h
@@ -24,7 +24,7 @@ /** \mainpage D3D12 Memory Allocator -<b>Version 3.1.0</b> (2026-02-23) +<b>Version 3.2.0</b> (2026-06-05) Copyright (c) 2019-2026 Advanced Micro Devices, Inc. All rights reserved. \n License: MIT
diff --git a/src/Tests.cpp b/src/Tests.cpp index b38840f..b24a2ee 100644 --- a/src/Tests.cpp +++ b/src/Tests.cpp
@@ -1886,18 +1886,18 @@ UINT HeightAboveThreshold; }; - static const TextureCase NON_MSAA_CASES[] = - { - { DXGI_FORMAT_R8_UNORM, 128, 128, 320, 320 }, - { DXGI_FORMAT_R8G8B8A8_UNORM, 64, 64, 160, 160 }, - { DXGI_FORMAT_BC1_UNORM, 128, 128, 640, 256 }, - }; - static const TextureCase MSAA_CASES[] = - { - { DXGI_FORMAT_R8G8B8A8_UNORM, 256, 256, 1152, 512 }, - { DXGI_FORMAT_R16G16B16A16_FLOAT, 256, 128, 576, 512 }, - { DXGI_FORMAT_R32G32B32A32_FLOAT, 256, 128, 576, 256 }, - }; + static const TextureCase NON_MSAA_CASES[] = + { + { DXGI_FORMAT_R8_UNORM, 128, 128, 320, 320 }, + { DXGI_FORMAT_R8G8B8A8_UNORM, 64, 64, 160, 160 }, + { DXGI_FORMAT_BC1_UNORM, 128, 128, 640, 256 }, + }; + static const TextureCase MSAA_CASES[] = + { + { DXGI_FORMAT_R8G8B8A8_UNORM, 256, 256, 1152, 512 }, + { DXGI_FORMAT_R16G16B16A16_FLOAT, 256, 128, 576, 512 }, + { DXGI_FORMAT_R32G32B32A32_FLOAT, 256, 128, 576, 256 }, + }; for (UINT msaaIndex = 0; msaaIndex < 2; ++msaaIndex) { @@ -1905,14 +1905,14 @@ const UINT64 largeAlignment = isMsaa ? D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; - const UINT64 smallAlignment = isMsaa ? - D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : - D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT; - const TextureCase* textureCases = isMsaa ? MSAA_CASES : NON_MSAA_CASES; - const size_t textureCaseCount = isMsaa ? _countof(MSAA_CASES) : _countof(NON_MSAA_CASES); - const D3D12_HEAP_FLAGS heapFlags = isMsaa ? - D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES : - D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES; + const UINT64 smallAlignment = isMsaa ? + D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT : + D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT; + const TextureCase* textureCases = isMsaa ? MSAA_CASES : NON_MSAA_CASES; + const size_t textureCaseCount = isMsaa ? _countof(MSAA_CASES) : _countof(NON_MSAA_CASES); + const D3D12_HEAP_FLAGS heapFlags = isMsaa ? + D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES : + D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES; const D3D12_RESOURCE_FLAGS resourceFlags = isMsaa ? D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET : D3D12_RESOURCE_FLAG_NONE; @@ -1932,11 +1932,11 @@ D3D12MA::CALLOCATION_DESC allocDesc = D3D12MA::CALLOCATION_DESC{ pool.Get() }; - for (size_t textureCaseIndex = 0; textureCaseIndex < textureCaseCount; ++textureCaseIndex) - { - const TextureCase& textureCase = textureCases[textureCaseIndex]; - for (UINT thresholdIndex = 0; thresholdIndex < 2; ++thresholdIndex) - { + for (size_t textureCaseIndex = 0; textureCaseIndex < textureCaseCount; ++textureCaseIndex) + { + const TextureCase& textureCase = textureCases[textureCaseIndex]; + for (UINT thresholdIndex = 0; thresholdIndex < 2; ++thresholdIndex) + { const bool belowThreshold = thresholdIndex == 0; D3D12_RESOURCE_DESC resDesc = {}; resDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D; @@ -1962,23 +1962,23 @@ CHECK_BOOL(alloc0->GetHeap() == alloc1->GetHeap()); // Note these asserts may fail if you use D3D12MA_USE_SMALL_RESOURCE_PLACEMENT_ALIGNMENT=2. - const UINT64 expectedAlignment = belowThreshold ? smallAlignment : largeAlignment; - CHECK_BOOL((alloc0->GetOffset() % expectedAlignment) == 0); - CHECK_BOOL((alloc1->GetOffset() % expectedAlignment) == 0); - if (belowThreshold) - { - const UINT64 nonZeroOffset = alloc0->GetOffset() > 0 ? alloc0->GetOffset() : alloc1->GetOffset(); - wprintf(L" Small alignment case: format=%u msaa=%u size=%llux%u offset=%llu -> small alignment %s\n", - (UINT)textureCase.Format, - isMsaa ? 1u : 0u, - resDesc.Width, - resDesc.Height, - nonZeroOffset, - nonZeroOffset < largeAlignment ? L"YES" : L"NO"); - } - - alloc1.Reset(); - alloc0.Reset(); + const UINT64 expectedAlignment = belowThreshold ? smallAlignment : largeAlignment; + CHECK_BOOL((alloc0->GetOffset() % expectedAlignment) == 0); + CHECK_BOOL((alloc1->GetOffset() % expectedAlignment) == 0); + if (belowThreshold) + { + const UINT64 nonZeroOffset = alloc0->GetOffset() > 0 ? alloc0->GetOffset() : alloc1->GetOffset(); + wprintf(L" Small alignment case: format=%u msaa=%u size=%llux%u offset=%llu -> small alignment %s\n", + (UINT)textureCase.Format, + isMsaa ? 1u : 0u, + resDesc.Width, + resDesc.Height, + nonZeroOffset, + nonZeroOffset < largeAlignment ? L"YES" : L"NO"); + } + + alloc1.Reset(); + alloc0.Reset(); } } @@ -3574,6 +3574,7 @@ // Use a custom pool to make sure our small buffers are not created as committed. POOL_DESC poolDesc = {}; + poolDesc.HeapFlags = D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS; poolDesc.BlockSize = MEGABYTE; poolDesc.MinBlockCount = poolDesc.MaxBlockCount = 1;