mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
synced 2024-11-22 20:30: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);
|
RandomNumberGenerator rand(4652467);
|
||||||
|
|
||||||
for(uint32_t i = 0; i < frameCount; ++i)
|
for(uint32_t frameIndex = 0; frameIndex < frameCount; ++frameIndex)
|
||||||
{
|
{
|
||||||
// Bump frame index.
|
// Bump frame index.
|
||||||
++g_FrameIndex;
|
++g_FrameIndex;
|
||||||
@ -562,11 +562,11 @@ void TestSparseBinding()
|
|||||||
images.push_back(std::move(imageInfo));
|
images.push_back(std::move(imageInfo));
|
||||||
|
|
||||||
// Delete all images that expired.
|
// 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)
|
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user