Added 'LinearAlgorithm' member to JSON dump format and its usage in VmaDumpVis.py.
diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h
index aed94c5..73e72ae 100644
--- a/src/vk_mem_alloc.h
+++ b/src/vk_mem_alloc.h
@@ -4927,7 +4927,6 @@
     ~VmaPool_T();

 

     uint32_t GetId() const { return m_Id; }

-    uint32_t GetFlags() const { return m_Flags; }

     void SetId(uint32_t id) { VMA_ASSERT(m_Id == 0); m_Id = id; }

 

 #if VMA_STATS_STRING_ENABLED

@@ -4936,7 +4935,6 @@
 

 private:

     uint32_t m_Id;

-    uint32_t m_Flags;

 };

 

 class VmaDefragmentator

@@ -9205,8 +9203,7 @@
         createInfo.frameInUseCount,

         true, // isCustomPool

         (createInfo.flags & VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT) != 0), // linearAlgorithm

-    m_Id(0),

-    m_Flags(createInfo.flags)

+    m_Id(0)

 {

 }

 

@@ -9798,6 +9795,12 @@
             json.WriteString("FrameInUseCount");

             json.WriteNumber(m_FrameInUseCount);

         }

+

+        if(m_LinearAlgorithm)

+        {

+            json.WriteString("LinearAlgorithm");

+            json.WriteBool(true);

+        }

     }

     else

     {

@@ -12165,6 +12168,7 @@
         }

     }

 

+    // Custom pools

     {

         VmaMutexLock lock(m_PoolsMutex, m_UseMutex);

         const size_t poolCount = m_Pools.size();

diff --git a/tools/VmaDumpVis/VmaDumpVis.py b/tools/VmaDumpVis/VmaDumpVis.py
index f16913b..e81e085 100644
--- a/tools/VmaDumpVis/VmaDumpVis.py
+++ b/tools/VmaDumpVis/VmaDumpVis.py
@@ -46,10 +46,12 @@
 data = {}

 

 

-def ProcessBlock(dstBlockList, iBlockId, objBlock):

+def ProcessBlock(dstBlockList, iBlockId, objBlock, bLinearAlgorithm):

     iBlockSize = int(objBlock['TotalBytes'])

     arrSuballocs  = objBlock['Suballocations']

     dstBlockObj = {'ID': iBlockId, 'Size':iBlockSize, 'Suballocations':[]}

+    if bLinearAlgorithm:

+    	dstBlockObj['LinearAlgorithm'] = True

     dstBlockList.append(dstBlockObj)

     for objSuballoc in arrSuballocs:

         dstBlockObj['Suballocations'].append((objSuballoc['Type'], int(objSuballoc['Size']), int(objSuballoc['Usage']) if ('Usage' in objSuballoc) else 0))

@@ -182,16 +184,18 @@
         iType = int(sType[5:])

         typeData = GetDataForMemoryType(iType)

         for sBlockId, objBlock in tType[1]['Blocks'].items():

-            ProcessBlock(typeData['DefaultPoolBlocks'], int(sBlockId), objBlock)

+            ProcessBlock(typeData['DefaultPoolBlocks'], int(sBlockId), objBlock, False)

 if 'Pools' in jsonSrc:

     objPools = jsonSrc['Pools']

     for sPoolId, objPool in objPools.items():

         iType = int(objPool['MemoryTypeIndex'])

         typeData = GetDataForMemoryType(iType)

         objBlocks = objPool['Blocks']

+        bLinearAlgorithm = 'LinearAlgorithm' in objPool and objPool['LinearAlgorithm']

         for sBlockId, objBlock in objBlocks.items():

-            typeData['CustomPools'][int(sPoolId)] = []

-            ProcessBlock(typeData['CustomPools'][int(sPoolId)], int(sBlockId), objBlock)

+            dstBlockArray = []

+            typeData['CustomPools'][int(sPoolId)] = dstBlockArray

+            ProcessBlock(dstBlockArray, int(sBlockId), objBlock, bLinearAlgorithm)

 

 iImgSizeY, fPixelsPerByte = CalcParams()

 

@@ -240,7 +244,11 @@
     index = 0

     for iPoolId, listPool in dictMemType['CustomPools'].items():

         for objBlock in listPool:

-          draw.text((IMG_MARGIN, y), "Custom pool %d block %d" % (iPoolId, objBlock['ID']), fill=COLOR_TEXT_H2, font=font)

+          if 'LinearAlgorithm' in objBlock:

+              linearAlgorithmStr = ' (linear algorithm)';

+          else:

+              linearAlgorithmStr = '';

+          draw.text((IMG_MARGIN, y), "Custom pool %d%s block %d" % (iPoolId, linearAlgorithmStr, objBlock['ID']), fill=COLOR_TEXT_H2, font=font)

           y += FONT_SIZE + IMG_MARGIN

           DrawBlock(draw, y, objBlock)

           y += MAP_SIZE + IMG_MARGIN

@@ -262,5 +270,6 @@
   - Key is integer pool ID. Value is list of objects, each containing dictionary with:

     - Fixed key 'ID'. Value is int.

     - Fixed key 'Size'. Value is int.

+    - Fixed key 'LinearAlgorithm'. Optional. Value is True.

     - Fixed key 'Suballocations'. Value is list of tuples as above.

 """