Improved handling of destruction calls with null handle, in vk_mem_alloc as well as VmaReplay.

This commit is contained in:
Adam Sawicki 2018-08-13 12:22:37 +02:00
parent 5b48b5efcf
commit db1f73fee4
2 changed files with 41 additions and 22 deletions

View File

@ -765,17 +765,20 @@ void Player::ExecuteDestroyPool(size_t lineNumber, const CsvSplit& csvSplit)
if(StrRangeToPtr(csvSplit.GetRange(FIRST_PARAM_INDEX), origPtr)) if(StrRangeToPtr(csvSplit.GetRange(FIRST_PARAM_INDEX), origPtr))
{ {
const auto it = m_Pools.find(origPtr); if(origPtr != 0)
if(it != m_Pools.end())
{ {
vmaDestroyPool(m_Allocator, it->second.pool); const auto it = m_Pools.find(origPtr);
m_Pools.erase(it); if(it != m_Pools.end())
}
else
{
if(IssueWarning())
{ {
printf("Line %zu: Pool %llX not found.\n", lineNumber, origPtr); vmaDestroyPool(m_Allocator, it->second.pool);
m_Pools.erase(it);
}
else
{
if(IssueWarning())
{
printf("Line %zu: Pool %llX not found.\n", lineNumber, origPtr);
}
} }
} }
} }
@ -867,17 +870,20 @@ void Player::DestroyAllocation(size_t lineNumber, const CsvSplit& csvSplit)
if(StrRangeToPtr(csvSplit.GetRange(FIRST_PARAM_INDEX), origAllocPtr)) if(StrRangeToPtr(csvSplit.GetRange(FIRST_PARAM_INDEX), origAllocPtr))
{ {
const auto it = m_Allocations.find(origAllocPtr); if(origAllocPtr != 0)
if(it != m_Allocations.end())
{ {
Destroy(it->second); const auto it = m_Allocations.find(origAllocPtr);
m_Allocations.erase(it); if(it != m_Allocations.end())
}
else
{
if(IssueWarning())
{ {
printf("Line %zu: Allocation %llX not found.\n", lineNumber, origAllocPtr); Destroy(it->second);
m_Allocations.erase(it);
}
else
{
if(IssueWarning())
{
printf("Line %zu: Allocation %llX not found.\n", lineNumber, origAllocPtr);
}
} }
} }
} }

View File

@ -9929,6 +9929,11 @@ void vmaFreeMemory(
{ {
VMA_ASSERT(allocator); VMA_ASSERT(allocator);
if(allocation == VK_NULL_HANDLE)
{
return;
}
{ {
VmaMutexLock lock(g_FileMutex, true); VmaMutexLock lock(g_FileMutex, true);
EnsureFile(); EnsureFile();
@ -9943,10 +9948,7 @@ void vmaFreeMemory(
VMA_DEBUG_LOG("vmaFreeMemory"); VMA_DEBUG_LOG("vmaFreeMemory");
VMA_DEBUG_GLOBAL_MUTEX_LOCK VMA_DEBUG_GLOBAL_MUTEX_LOCK
if(allocation != VK_NULL_HANDLE) allocator->FreeMemory(allocation);
{
allocator->FreeMemory(allocation);
}
} }
void vmaGetAllocationInfo( void vmaGetAllocationInfo(
@ -10232,6 +10234,11 @@ void vmaDestroyBuffer(
{ {
VMA_ASSERT(allocator); VMA_ASSERT(allocator);
if(buffer == VK_NULL_HANDLE && allocation == VK_NULL_HANDLE)
{
return;
}
{ {
VmaMutexLock lock(g_FileMutex, true); VmaMutexLock lock(g_FileMutex, true);
EnsureFile(); EnsureFile();
@ -10356,6 +10363,12 @@ void vmaDestroyImage(
{ {
VMA_ASSERT(allocator); VMA_ASSERT(allocator);
if(image == VK_NULL_HANDLE && allocation == VK_NULL_HANDLE)
{
return;
}
{ {
VmaMutexLock lock(g_FileMutex, true); VmaMutexLock lock(g_FileMutex, true);
EnsureFile(); EnsureFile();