From 49defd6056193eabce6b9a1b220cadc600ce4c5e Mon Sep 17 00:00:00 2001 From: Adam Sawicki Date: Mon, 18 Nov 2019 11:45:30 +0100 Subject: [PATCH] Further development of custom pool names --- src/Tests.cpp | 2 -- src/vk_mem_alloc.h | 27 ++++++++++++++++----------- tools/VmaDumpVis/VmaDumpVis.py | 13 +++++++++---- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Tests.cpp b/src/Tests.cpp index 3481028..a46d441 100644 --- a/src/Tests.cpp +++ b/src/Tests.cpp @@ -3113,8 +3113,6 @@ static void TestPool_SameSize() vmaGetPoolName(g_hAllocator, pool, &fetchedPoolName); TEST(strcmp(fetchedPoolName, POOL_NAME) == 0); - SaveAllocatorStatsToFile(L"TEST.json");//DELME - vmaSetPoolName(g_hAllocator, pool, nullptr); } diff --git a/src/vk_mem_alloc.h b/src/vk_mem_alloc.h index e6ceda2..d0fcdee 100644 --- a/src/vk_mem_alloc.h +++ b/src/vk_mem_alloc.h @@ -2512,14 +2512,21 @@ Possible return values: */ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(VmaAllocator allocator, VmaPool pool); -/** TODO +/** \brief Retrieves name of a custom pool. + +After the call `ppName` is either null or points to an internally-owned null-terminated string +containing name of the pool that was previously set. The pointer becomes invalid when the pool is +destroyed or its name is changed using vmaSetPoolName(). */ VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolName( VmaAllocator allocator, VmaPool pool, const char** ppName); -/* TODO +/* \brief Sets name of a custom pool. + +`pName` can be either null or pointer to a null-terminated string with new name for the pool. +Function makes internal copy of the string, so it can be changed or freed immediately after this call. */ VMA_CALL_PRE void VMA_CALL_POST vmaSetPoolName( VmaAllocator allocator, @@ -12418,6 +12425,13 @@ void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json) if(m_IsCustomPool) { + const char* poolName = m_hParentPool->GetName(); + if(poolName != VMA_NULL && poolName[0] != '\0') + { + json.WriteString("Name"); + json.WriteString(poolName); + } + json.WriteString("MemoryTypeIndex"); json.WriteNumber(m_MemoryTypeIndex); @@ -15819,15 +15833,6 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json) { json.BeginString(); json.ContinueString(m_Pools[poolIndex]->GetId()); - const char* poolName = m_Pools[poolIndex]->GetName(); - if(poolName != VMA_NULL && poolName[0] != '\0') - { - json.ContinueString(" "); - json.ContinueString(poolName); - } - else - { - } json.EndString(); m_Pools[poolIndex]->m_BlockVector.PrintDetailedMap(json); diff --git a/tools/VmaDumpVis/VmaDumpVis.py b/tools/VmaDumpVis/VmaDumpVis.py index 6bec3ee..c71d04b 100644 --- a/tools/VmaDumpVis/VmaDumpVis.py +++ b/tools/VmaDumpVis/VmaDumpVis.py @@ -189,13 +189,18 @@ if 'DefaultPools' in jsonSrc: ProcessBlock(typeData['DefaultPoolBlocks'], int(sBlockId), objBlock, '') if 'Pools' in jsonSrc: objPools = jsonSrc['Pools'] - for sPoolName, objPool in objPools.items(): + for sPoolId, objPool in objPools.items(): iType = int(objPool['MemoryTypeIndex']) typeData = GetDataForMemoryType(iType) objBlocks = objPool['Blocks'] sAlgorithm = objPool.get('Algorithm', '') + sName = objPool.get('Name', None) + if sName: + sFullName = sPoolId + ' "' + sName + '"' + else: + sFullName = sPoolId dstBlockArray = [] - typeData['CustomPools'][sPoolName] = dstBlockArray + typeData['CustomPools'][sFullName] = dstBlockArray for sBlockId, objBlock in objBlocks.items(): ProcessBlock(dstBlockArray, int(sBlockId), objBlock, sAlgorithm) @@ -255,7 +260,7 @@ for iMemTypeIndex in sorted(data.keys()): sAlgorithm = ' (Algorithm: %s)' % (objBlock['Algorithm']) else: sAlgorithm = '' - draw.text((IMG_MARGIN, y), "Custom pool \"%s\"%s block %d" % (sPoolName, sAlgorithm, objBlock['ID']), fill=COLOR_TEXT_H2, font=font) + draw.text((IMG_MARGIN, y), "Custom pool %s%s block %d" % (sPoolName, sAlgorithm, objBlock['ID']), fill=COLOR_TEXT_H2, font=font) y += FONT_SIZE + IMG_MARGIN DrawBlock(draw, y, objBlock) y += MAP_SIZE + IMG_MARGIN @@ -274,7 +279,7 @@ Main data structure - variable `data` - is a dictionary. Key is integer - memory - Fixed key 'Size'. Value is int. - Fixed key 'Suballocations'. Value is list of tuples as above. - Fixed key 'CustomPools'. Value is dictionary. - - Key is string with pool name. Value is list of objects representing memory blocks, each containing dictionary with: + - Key is string with pool ID/name. Value is list of objects representing memory blocks, each containing dictionary with: - Fixed key 'ID'. Value is int. - Fixed key 'Size'. Value is int. - Fixed key 'Algorithm'. Optional. Value is string.