mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-29 18:04:34 +00:00
Fixed incorrect accounting of memory budget.
Code by @medranSolus Fixes #241
This commit is contained in:
parent
ab75719ee0
commit
6a63f2cb4e
@ -11889,7 +11889,7 @@ VmaAllocation_T::~VmaAllocation_T()
|
|||||||
VMA_ASSERT(m_MapCount == 0 && "Allocation was not unmapped before destruction.");
|
VMA_ASSERT(m_MapCount == 0 && "Allocation was not unmapped before destruction.");
|
||||||
|
|
||||||
// Check if owned string was freed.
|
// Check if owned string was freed.
|
||||||
VMA_ASSERT(m_pUserData == VMA_NULL);
|
VMA_ASSERT((IsUserDataString() && m_pUserData == VMA_NULL) || !IsUserDataString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VmaAllocation_T::InitBlockAllocation(
|
void VmaAllocation_T::InitBlockAllocation(
|
||||||
@ -12326,14 +12326,8 @@ VkResult VmaBlockVector::Allocate(
|
|||||||
if (res != VK_SUCCESS)
|
if (res != VK_SUCCESS)
|
||||||
{
|
{
|
||||||
// Free all already created allocations.
|
// Free all already created allocations.
|
||||||
const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
|
|
||||||
while (allocIndex--)
|
while (allocIndex--)
|
||||||
{
|
Free(pAllocations[allocIndex]);
|
||||||
VmaAllocation_T* const alloc = pAllocations[allocIndex];
|
|
||||||
const VkDeviceSize allocSize = alloc->GetSize();
|
|
||||||
Free(alloc);
|
|
||||||
m_hAllocator->m_Budget.RemoveAllocation(heapIndex, allocSize);
|
|
||||||
}
|
|
||||||
memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
|
memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12618,6 +12612,9 @@ void VmaBlockVector::Free(
|
|||||||
pBlockToDelete->Destroy(m_hAllocator);
|
pBlockToDelete->Destroy(m_hAllocator);
|
||||||
vma_delete(m_hAllocator, pBlockToDelete);
|
vma_delete(m_hAllocator, pBlockToDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_hAllocator->m_Budget.RemoveAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), hAllocation->GetSize());
|
||||||
|
m_hAllocator->m_AllocationObjectAllocator.Free(hAllocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const
|
VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const
|
||||||
@ -14467,7 +14464,6 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
|
|||||||
|
|
||||||
FreeVulkanMemory(memTypeIndex, currAlloc->GetSize(), hMemory);
|
FreeVulkanMemory(memTypeIndex, currAlloc->GetSize(), hMemory);
|
||||||
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc->GetSize());
|
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc->GetSize());
|
||||||
currAlloc->SetUserData(this, VMA_NULL);
|
|
||||||
m_AllocationObjectAllocator.Free(currAlloc);
|
m_AllocationObjectAllocator.Free(currAlloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14874,10 +14870,6 @@ void VmaAllocator_T::FreeMemory(
|
|||||||
default:
|
default:
|
||||||
VMA_ASSERT(0);
|
VMA_ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
|
|
||||||
allocation->SetUserData(this, VMA_NULL);
|
|
||||||
m_AllocationObjectAllocator.Free(allocation);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -15478,6 +15470,9 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
|
|||||||
|
|
||||||
FreeVulkanMemory(memTypeIndex, allocation->GetSize(), hMemory);
|
FreeVulkanMemory(memTypeIndex, allocation->GetSize(), hMemory);
|
||||||
|
|
||||||
|
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
|
||||||
|
m_AllocationObjectAllocator.Free(allocation);
|
||||||
|
|
||||||
VMA_DEBUG_LOG(" Freed DedicatedMemory MemoryTypeIndex=%u", memTypeIndex);
|
VMA_DEBUG_LOG(" Freed DedicatedMemory MemoryTypeIndex=%u", memTypeIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7731,11 +7731,11 @@ void Test()
|
|||||||
|
|
||||||
WriteMainTestResultHeader(file);
|
WriteMainTestResultHeader(file);
|
||||||
PerformMainTests(file);
|
PerformMainTests(file);
|
||||||
//PerformCustomMainTest(file);
|
PerformCustomMainTest(file);
|
||||||
|
|
||||||
WritePoolTestResultHeader(file);
|
WritePoolTestResultHeader(file);
|
||||||
PerformPoolTests(file);
|
PerformPoolTests(file);
|
||||||
//PerformCustomPoolTest(file);
|
PerformCustomPoolTest(file);
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
#endif // #if defined(VMA_DEBUG_MARGIN) && VMA_DEBUG_MARGIN > 0
|
#endif // #if defined(VMA_DEBUG_MARGIN) && VMA_DEBUG_MARGIN > 0
|
||||||
|
Loading…
Reference in New Issue
Block a user