Fixed bug in AllocatorPimpl::CalculateStats
Also added debug macro D3D12MA_FORCE_RESOURCE_HEAP_TIER.
Fixes #10
diff --git a/src/D3D12MemAlloc.cpp b/src/D3D12MemAlloc.cpp
index 90e1872..c78a5ca 100644
--- a/src/D3D12MemAlloc.cpp
+++ b/src/D3D12MemAlloc.cpp
@@ -82,6 +82,12 @@
#define D3D12MA_DEBUG_GLOBAL_MUTEX (0)
#endif
+/*
+Define this macro for debugging purposes only to force specific D3D12_RESOURCE_HEAP_TIER,
+especially to test compatibility with D3D12_RESOURCE_HEAP_TIER_1 on modern GPUs.
+*/
+//#define D3D12MA_FORCE_RESOURCE_HEAP_TIER D3D12_RESOURCE_HEAP_TIER_1
+
#ifndef D3D12MA_DEFAULT_BLOCK_SIZE
/// Default size of a block allocated as single ID3D12Heap.
#define D3D12MA_DEFAULT_BLOCK_SIZE (256ull * 1024 * 1024)
@@ -4275,6 +4281,9 @@
{
return hr;
}
+#ifdef D3D12MA_FORCE_RESOURCE_HEAP_TIER
+ m_D3D12Options.ResourceHeapTier = (D3D12MA_FORCE_RESOURCE_HEAP_TIER);
+#endif
const UINT defaultPoolCount = CalcDefaultPoolCount();
for(UINT i = 0; i < defaultPoolCount; ++i)
@@ -5398,11 +5407,27 @@
}
// Process deafult pools.
- for(size_t i = 0; i < HEAP_TYPE_COUNT; ++i)
+
+ if(SupportsResourceHeapTier2())
{
- BlockVector* const pBlockVector = m_BlockVectors[i];
- D3D12MA_ASSERT(pBlockVector);
- pBlockVector->AddStats(outStats);
+ for(size_t heapTypeIndex = 0; heapTypeIndex < HEAP_TYPE_COUNT; ++heapTypeIndex)
+ {
+ BlockVector* const pBlockVector = m_BlockVectors[heapTypeIndex];
+ D3D12MA_ASSERT(pBlockVector);
+ pBlockVector->AddStats(outStats);
+ }
+ }
+ else
+ {
+ for(size_t heapTypeIndex = 0; heapTypeIndex < HEAP_TYPE_COUNT; ++heapTypeIndex)
+ {
+ for(size_t heapSubType = 0; heapSubType < 3; ++heapSubType)
+ {
+ BlockVector* const pBlockVector = m_BlockVectors[heapTypeIndex * 3 + heapSubType];
+ D3D12MA_ASSERT(pBlockVector);
+ pBlockVector->AddStats(outStats);
+ }
+ }
}
// Process custom pools