Skip to content

Commit 920bfbe

Browse files
Bumped recording file format version to 1.5.
(Partial cherry pick from branch sparse_binding_example.)
1 parent 0d601d8 commit 920bfbe

5 files changed

Lines changed: 79 additions & 37 deletions

File tree

docs/Recording file format.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Formats with only minor version incremented are backward compatible.
2323
VmaReplay application supports all older versions.
2424
Current version is:
2525

26-
1,4
26+
1,5
2727

2828
# Configuration
2929

@@ -230,10 +230,14 @@ If `VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT` was used with the allocatio
230230
It may contain additional commas.
231231
It should not contain end-of-line characters - results are then undefined.
232232

233+
**list of (...)** (min format version: 1.5)
234+
235+
An ordered sequence of values of some type, separated by single space.
236+
233237
# Example file
234238

235239
Vulkan Memory Allocator,Calls recording
236-
1,4
240+
1,5
237241
Config,Begin
238242
PhysicalDevice,apiVersion,4198477
239243
PhysicalDevice,driverVersion,8388653

src/VmaReplay/Common.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
11
#include "Common.h"
22

3+
bool StrRangeToPtrList(const StrRange& s, std::vector<uint64_t>& out)
4+
{
5+
out.clear();
6+
StrRange currRange = { s.beg, nullptr };
7+
while(currRange.beg < s.end)
8+
{
9+
currRange.end = currRange.beg;
10+
while(currRange.end < s.end && *currRange.end != ' ')
11+
{
12+
++currRange.end;
13+
}
14+
15+
uint64_t ptr = 0;
16+
if(!StrRangeToPtr(currRange, ptr))
17+
{
18+
return false;
19+
}
20+
out.push_back(ptr);
21+
22+
currRange.beg = currRange.end + 1;
23+
}
24+
return true;
25+
}
26+
327
////////////////////////////////////////////////////////////////////////////////
428
// LineSplit class
529

src/VmaReplay/Common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ inline bool StrRangeToBool(const StrRange& s, bool& out)
111111

112112
return true;
113113
}
114+
bool StrRangeToPtrList(const StrRange& s, std::vector<uint64_t>& out);
114115

115116
class LineSplit
116117
{

src/VmaReplay/VmaReplay.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static size_t g_DefragmentAfterLineNextIndex = 0;
150150
static bool ValidateFileVersion()
151151
{
152152
if(GetVersionMajor(g_FileVersion) == 1 &&
153-
GetVersionMinor(g_FileVersion) <= 4)
153+
GetVersionMinor(g_FileVersion) <= 5)
154154
{
155155
return true;
156156
}
@@ -200,7 +200,7 @@ class Statistics
200200
void RegisterCreateImage(uint32_t usage, uint32_t tiling);
201201
void RegisterCreateBuffer(uint32_t usage);
202202
void RegisterCreatePool();
203-
void RegisterCreateAllocation();
203+
void RegisterCreateAllocation(size_t allocCount = 1);
204204

205205
void UpdateMemStats(const VmaStats& currStats);
206206

@@ -369,9 +369,9 @@ void Statistics::RegisterCreatePool()
369369
++m_PoolCreationCount;
370370
}
371371

372-
void Statistics::RegisterCreateAllocation()
372+
void Statistics::RegisterCreateAllocation(size_t allocCount)
373373
{
374-
++m_AllocationCreationCount;
374+
m_AllocationCreationCount += allocCount;
375375
}
376376

377377
void Statistics::UpdateMemStats(const VmaStats& currStats)
@@ -966,10 +966,10 @@ class Player
966966
};
967967
struct Allocation
968968
{
969-
uint32_t allocationFlags;
970-
VmaAllocation allocation;
971-
VkBuffer buffer;
972-
VkImage image;
969+
uint32_t allocationFlags = 0;
970+
VmaAllocation allocation = VK_NULL_HANDLE;
971+
VkBuffer buffer = VK_NULL_HANDLE;
972+
VkImage image = VK_NULL_HANDLE;
973973
};
974974
std::unordered_map<uint64_t, Pool> m_Pools;
975975
std::unordered_map<uint64_t, Allocation> m_Allocations;
@@ -1014,10 +1014,10 @@ class Player
10141014
void ExecuteDestroyPool(size_t lineNumber, const CsvSplit& csvSplit);
10151015
void ExecuteSetAllocationUserData(size_t lineNumber, const CsvSplit& csvSplit);
10161016
void ExecuteCreateBuffer(size_t lineNumber, const CsvSplit& csvSplit);
1017-
void ExecuteDestroyBuffer(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::DestroyBuffer); DestroyAllocation(lineNumber, csvSplit); }
1017+
void ExecuteDestroyBuffer(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::DestroyBuffer); DestroyAllocation(lineNumber, csvSplit, "vmaDestroyBuffer"); }
10181018
void ExecuteCreateImage(size_t lineNumber, const CsvSplit& csvSplit);
1019-
void ExecuteDestroyImage(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::DestroyImage); DestroyAllocation(lineNumber, csvSplit); }
1020-
void ExecuteFreeMemory(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::FreeMemory); DestroyAllocation(lineNumber, csvSplit); }
1019+
void ExecuteDestroyImage(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::DestroyImage); DestroyAllocation(lineNumber, csvSplit, "vmaDestroyImage"); }
1020+
void ExecuteFreeMemory(size_t lineNumber, const CsvSplit& csvSplit) { m_Stats.RegisterFunctionCall(VMA_FUNCTION::FreeMemory); DestroyAllocation(lineNumber, csvSplit, "vmaFreeMemory"); }
10211021
void ExecuteCreateLostAllocation(size_t lineNumber, const CsvSplit& csvSplit);
10221022
void ExecuteAllocateMemory(size_t lineNumber, const CsvSplit& csvSplit);
10231023
void ExecuteAllocateMemoryForBufferOrImage(size_t lineNumber, const CsvSplit& csvSplit, OBJECT_TYPE objType);
@@ -1030,7 +1030,7 @@ class Player
10301030
void ExecuteMakePoolAllocationsLost(size_t lineNumber, const CsvSplit& csvSplit);
10311031
void ExecuteResizeAllocation(size_t lineNumber, const CsvSplit& csvSplit);
10321032

1033-
void DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit);
1033+
void DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit, const char* functionName);
10341034

10351035
void PrintStats(const VmaStats& stats, const char* suffix);
10361036
void PrintStatInfo(const VmaStatInfo& info);
@@ -1135,45 +1135,45 @@ void Player::ExecuteLine(size_t lineNumber, const StrRange& line)
11351135
// Nothing.
11361136
}
11371137
}
1138-
else if(StrRangeEq(functionName, "vmaCreatePool"))
1138+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::CreatePool]))
11391139
ExecuteCreatePool(lineNumber, csvSplit);
1140-
else if(StrRangeEq(functionName, "vmaDestroyPool"))
1140+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::DestroyPool]))
11411141
ExecuteDestroyPool(lineNumber, csvSplit);
1142-
else if(StrRangeEq(functionName, "vmaSetAllocationUserData"))
1142+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::SetAllocationUserData]))
11431143
ExecuteSetAllocationUserData(lineNumber, csvSplit);
1144-
else if(StrRangeEq(functionName, "vmaCreateBuffer"))
1144+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::CreateBuffer]))
11451145
ExecuteCreateBuffer(lineNumber, csvSplit);
1146-
else if(StrRangeEq(functionName, "vmaDestroyBuffer"))
1146+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::DestroyBuffer]))
11471147
ExecuteDestroyBuffer(lineNumber, csvSplit);
1148-
else if(StrRangeEq(functionName, "vmaCreateImage"))
1148+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::CreateImage]))
11491149
ExecuteCreateImage(lineNumber, csvSplit);
1150-
else if(StrRangeEq(functionName, "vmaDestroyImage"))
1150+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::DestroyImage]))
11511151
ExecuteDestroyImage(lineNumber, csvSplit);
1152-
else if(StrRangeEq(functionName, "vmaFreeMemory"))
1152+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::FreeMemory]))
11531153
ExecuteFreeMemory(lineNumber, csvSplit);
1154-
else if(StrRangeEq(functionName, "vmaCreateLostAllocation"))
1154+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::CreateLostAllocation]))
11551155
ExecuteCreateLostAllocation(lineNumber, csvSplit);
1156-
else if(StrRangeEq(functionName, "vmaAllocateMemory"))
1156+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::AllocateMemory]))
11571157
ExecuteAllocateMemory(lineNumber, csvSplit);
1158-
else if(StrRangeEq(functionName, "vmaAllocateMemoryForBuffer"))
1158+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::AllocateMemoryForBuffer]))
11591159
ExecuteAllocateMemoryForBufferOrImage(lineNumber, csvSplit, OBJECT_TYPE::BUFFER);
1160-
else if(StrRangeEq(functionName, "vmaAllocateMemoryForImage"))
1160+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::AllocateMemoryForImage]))
11611161
ExecuteAllocateMemoryForBufferOrImage(lineNumber, csvSplit, OBJECT_TYPE::IMAGE);
1162-
else if(StrRangeEq(functionName, "vmaMapMemory"))
1162+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::MapMemory]))
11631163
ExecuteMapMemory(lineNumber, csvSplit);
1164-
else if(StrRangeEq(functionName, "vmaUnmapMemory"))
1164+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::UnmapMemory]))
11651165
ExecuteUnmapMemory(lineNumber, csvSplit);
1166-
else if(StrRangeEq(functionName, "vmaFlushAllocation"))
1166+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::FlushAllocation]))
11671167
ExecuteFlushAllocation(lineNumber, csvSplit);
1168-
else if(StrRangeEq(functionName, "vmaInvalidateAllocation"))
1168+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::InvalidateAllocation]))
11691169
ExecuteInvalidateAllocation(lineNumber, csvSplit);
1170-
else if(StrRangeEq(functionName, "vmaTouchAllocation"))
1170+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::TouchAllocation]))
11711171
ExecuteTouchAllocation(lineNumber, csvSplit);
1172-
else if(StrRangeEq(functionName, "vmaGetAllocationInfo"))
1172+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::GetAllocationInfo]))
11731173
ExecuteGetAllocationInfo(lineNumber, csvSplit);
1174-
else if(StrRangeEq(functionName, "vmaMakePoolAllocationsLost"))
1174+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::MakePoolAllocationsLost]))
11751175
ExecuteMakePoolAllocationsLost(lineNumber, csvSplit);
1176-
else if(StrRangeEq(functionName, "vmaResizeAllocation"))
1176+
else if(StrRangeEq(functionName, VMA_FUNCTION_NAMES[(uint32_t)VMA_FUNCTION::ResizeAllocation]))
11771177
ExecuteResizeAllocation(lineNumber, csvSplit);
11781178
else
11791179
{
@@ -2241,7 +2241,7 @@ void Player::ExecuteCreateBuffer(size_t lineNumber, const CsvSplit& csvSplit)
22412241
}
22422242
}
22432243

2244-
void Player::DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit)
2244+
void Player::DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit, const char* functionName)
22452245
{
22462246
if(ValidateFunctionParameterCount(lineNumber, csvSplit, 1, false))
22472247
{
@@ -2271,7 +2271,7 @@ void Player::DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit)
22712271
{
22722272
if(IssueWarning())
22732273
{
2274-
printf("Line %zu: Invalid parameters for vmaDestroyBuffer.\n", lineNumber);
2274+
printf("Line %zu: Invalid parameters for %s.\n", lineNumber, functionName);
22752275
}
22762276
}
22772277
}

src/vk_mem_alloc.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6397,6 +6397,7 @@ class VmaRecorder
63976397
int64_t m_StartCounter;
63986398

63996399
void GetBasicParams(CallParams& outParams);
6400+
void PrintPointerList(uint64_t count, const VmaAllocation* pItems);
64006401
void Flush();
64016402
};
64026403

@@ -13235,7 +13236,7 @@ VkResult VmaRecorder::Init(const VmaRecordSettings& settings, bool useMutex)
1323513236

1323613237
// Write header.
1323713238
fprintf(m_File, "%s\n", "Vulkan Memory Allocator,Calls recording");
13238-
fprintf(m_File, "%s\n", "1,4");
13239+
fprintf(m_File, "%s\n", "1,5");
1323913240

1324013241
return VK_SUCCESS;
1324113242
}
@@ -13682,6 +13683,18 @@ void VmaRecorder::GetBasicParams(CallParams& outParams)
1368213683
outParams.time = (double)(counter.QuadPart - m_StartCounter) / (double)m_Freq;
1368313684
}
1368413685

13686+
void VmaRecorder::PrintPointerList(uint64_t count, const VmaAllocation* pItems)
13687+
{
13688+
if(count)
13689+
{
13690+
fprintf(m_File, "%p", pItems[0]);
13691+
for(uint64_t i = 1; i < count; ++i)
13692+
{
13693+
fprintf(m_File, " %p", pItems[i]);
13694+
}
13695+
}
13696+
}
13697+
1368513698
void VmaRecorder::Flush()
1368613699
{
1368713700
if((m_Flags & VMA_RECORD_FLUSH_AFTER_CALL_BIT) != 0)

0 commit comments

Comments
 (0)