diff --git a/include/vk_mem_alloc.h b/include/vk_mem_alloc.h index 53da44e..25f72a5 100644 --- a/include/vk_mem_alloc.h +++ b/include/vk_mem_alloc.h @@ -6891,6 +6891,10 @@ public: { m_Metadata->SetAllocationUserData(offset, userData); } + void CalculateStats(VmaStatInfo& outStatInfo) const + { + m_Metadata->CalcAllocationStatInfo(outStatInfo); + } private: VmaBlockMetadata* m_Metadata; @@ -18403,7 +18407,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStats(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaStatInfo* VMA_NOT_NULL pStatInfo) { - VMA_ASSERT(0 && "TODO implement"); + VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStatInfo != VMA_NULL); + VMA_DEBUG_LOG("vmaCalculateVirtualBlockStats"); + VMA_DEBUG_GLOBAL_MUTEX_LOCK; + virtualBlock->CalculateStats(*pStatInfo); } VMA_CALL_PRE void VMA_CALL_POST vmaBuildVirtualBlockStatsString(VmaVirtualBlock VMA_NOT_NULL virtualBlock, diff --git a/src/Tests.cpp b/src/Tests.cpp index def6c9f..2c85b76 100644 --- a/src/Tests.cpp +++ b/src/Tests.cpp @@ -2747,16 +2747,16 @@ static void TestVirtualBlocks() TEST(alloc2Offset < blockSize); TEST(alloc2Offset + 4 * MEGABYTE <= alloc0Offset || alloc0Offset + 8 * MEGABYTE <= alloc2Offset); // Check if they don't overlap. -#if 0 // # Calculate statistics - StatInfo statInfo = {}; - block->CalculateStats(&statInfo); - CHECK_BOOL(statInfo.AllocationCount == 2); - CHECK_BOOL(statInfo.BlockCount == 1); - CHECK_BOOL(statInfo.UsedBytes == blockSize); - CHECK_BOOL(statInfo.UnusedBytes + statInfo.UsedBytes == blockSize); + VmaStatInfo statInfo = {}; + vmaCalculateVirtualBlockStats(block, &statInfo); + TEST(statInfo.allocationCount == 2); + TEST(statInfo.blockCount == 1); + TEST(statInfo.usedBytes == blockSize); + TEST(statInfo.unusedBytes + statInfo.usedBytes == blockSize); +#if 0 // # Generate JSON dump WCHAR* json = nullptr;