Implemented vmaCalculateVirtualBlockStats
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 @@
     {

         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 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 @@
     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;