mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-23 07:14:34 +00:00
Implemented vmaMakePoolAllocationsLost for pools with linear allocator.
This commit is contained in:
parent
8cfe05fad9
commit
0ebdf0c63e
@ -1733,7 +1733,7 @@ static void TestLinearAllocator()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allocate number of buffers until pool is full again.
|
// Allocate number of buffers until pool is full again.
|
||||||
// This way we make sure ring buffers wraps around.
|
// This way we make sure ring buffers wraps around, front in in the middle.
|
||||||
res = VK_SUCCESS;
|
res = VK_SUCCESS;
|
||||||
for(size_t i = 0; res == VK_SUCCESS; ++i)
|
for(size_t i = 0; res == VK_SUCCESS; ++i)
|
||||||
{
|
{
|
||||||
@ -1786,6 +1786,35 @@ static void TestLinearAllocator()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete buffers that are lost.
|
||||||
|
for(size_t i = bufInfo.size(); i--; )
|
||||||
|
{
|
||||||
|
vmaGetAllocationInfo(g_hAllocator, bufInfo[i].Allocation, &allocInfo);
|
||||||
|
if(allocInfo.deviceMemory == VK_NULL_HANDLE)
|
||||||
|
{
|
||||||
|
vmaDestroyBuffer(g_hAllocator, bufInfo[i].Buffer, bufInfo[i].Allocation);
|
||||||
|
bufInfo.erase(bufInfo.begin() + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test vmaMakePoolAllocationsLost
|
||||||
|
{
|
||||||
|
vmaSetCurrentFrameIndex(g_hAllocator, ++g_FrameIndex);
|
||||||
|
|
||||||
|
size_t lostAllocCount = SIZE_MAX;
|
||||||
|
vmaMakePoolAllocationsLost(g_hAllocator, pool, &lostAllocCount);
|
||||||
|
assert(lostAllocCount > 0);
|
||||||
|
|
||||||
|
size_t realLostAllocCount = 0;
|
||||||
|
for(size_t i = 0; i < bufInfo.size(); ++i)
|
||||||
|
{
|
||||||
|
vmaGetAllocationInfo(g_hAllocator, bufInfo[i].Allocation, &allocInfo);
|
||||||
|
if(allocInfo.deviceMemory == VK_NULL_HANDLE)
|
||||||
|
++realLostAllocCount;
|
||||||
|
}
|
||||||
|
assert(realLostAllocCount == lostAllocCount);
|
||||||
|
}
|
||||||
|
|
||||||
// Destroy all the buffers in forward order.
|
// Destroy all the buffers in forward order.
|
||||||
for(size_t i = 0; i < bufInfo.size(); ++i)
|
for(size_t i = 0; i < bufInfo.size(); ++i)
|
||||||
vmaDestroyBuffer(g_hAllocator, bufInfo[i].Buffer, bufInfo[i].Allocation);
|
vmaDestroyBuffer(g_hAllocator, bufInfo[i].Buffer, bufInfo[i].Allocation);
|
||||||
|
@ -8504,8 +8504,44 @@ bool VmaBlockMetadata_Linear::MakeRequestedAllocationsLost(
|
|||||||
|
|
||||||
uint32_t VmaBlockMetadata_Linear::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
|
uint32_t VmaBlockMetadata_Linear::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
|
||||||
{
|
{
|
||||||
VMA_ASSERT(0 && "TODO");
|
uint32_t lostAllocationCount = 0;
|
||||||
return 0;
|
|
||||||
|
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
|
||||||
|
for(size_t i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i < count; ++i)
|
||||||
|
{
|
||||||
|
VmaSuballocation& suballoc = suballocations1st[i];
|
||||||
|
if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &&
|
||||||
|
suballoc.hAllocation->CanBecomeLost() &&
|
||||||
|
suballoc.hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
|
||||||
|
{
|
||||||
|
suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
|
||||||
|
suballoc.hAllocation = VK_NULL_HANDLE;
|
||||||
|
++m_1stNullItemsMiddleCount;
|
||||||
|
++lostAllocationCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
|
||||||
|
for(size_t i = 0, count = suballocations2nd.size(); i < count; ++i)
|
||||||
|
{
|
||||||
|
VmaSuballocation& suballoc = suballocations2nd[i];
|
||||||
|
if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &&
|
||||||
|
suballoc.hAllocation->CanBecomeLost() &&
|
||||||
|
suballoc.hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
|
||||||
|
{
|
||||||
|
suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
|
||||||
|
suballoc.hAllocation = VK_NULL_HANDLE;
|
||||||
|
++m_2ndNullItemsCount;
|
||||||
|
++lostAllocationCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(lostAllocationCount)
|
||||||
|
{
|
||||||
|
CleanupAfterFree();
|
||||||
|
}
|
||||||
|
|
||||||
|
return lostAllocationCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
|
VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
|
||||||
|
Loading…
Reference in New Issue
Block a user