mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
synced 2024-11-26 05:50:05 +00:00
Fixed budget management in VmaBlockVector::Allocate for cases when some of multi-page allocations fail
This commit is contained in:
parent
7e56c486fa
commit
a420c3d752
@ -547,7 +547,7 @@ void TestSparseBinding()
|
||||
|
||||
RandomNumberGenerator rand(4652467);
|
||||
|
||||
for(uint32_t i = 0; i < frameCount; ++i)
|
||||
for(uint32_t frameIndex = 0; frameIndex < frameCount; ++frameIndex)
|
||||
{
|
||||
// Bump frame index.
|
||||
++g_FrameIndex;
|
||||
@ -562,11 +562,11 @@ void TestSparseBinding()
|
||||
images.push_back(std::move(imageInfo));
|
||||
|
||||
// Delete all images that expired.
|
||||
for(size_t i = images.size(); i--; )
|
||||
for(size_t imageIndex = images.size(); imageIndex--; )
|
||||
{
|
||||
if(g_FrameIndex >= images[i].endFrame)
|
||||
if(g_FrameIndex >= images[imageIndex].endFrame)
|
||||
{
|
||||
images.erase(images.begin() + i);
|
||||
images.erase(images.begin() + imageIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user