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.
"""