Fixed budget management in VmaBlockVector::Allocate for cases when some of multi-page allocations fail

This commit is contained in:
Adam Sawicki 2021-02-23 18:21:42 +01:00
parent 7e56c486fa
commit a420c3d752
2 changed files with 9 additions and 5 deletions

View file

@ -12773,9 +12773,13 @@ VkResult VmaBlockVector::Allocate(
if(res != VK_SUCCESS)
{
// Free all already created allocations.
const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
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);
}