mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
synced 2024-11-14 04:11:48 +00:00
parent
0790b5f0a9
commit
96ec5ce4e7
@ -5217,9 +5217,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef T* iterator;
|
typedef T* iterator;
|
||||||
|
typedef const T* const_iterator;
|
||||||
|
|
||||||
iterator begin() { return m_pArray; }
|
iterator begin() { return m_pArray; }
|
||||||
iterator end() { return m_pArray + m_Count; }
|
iterator end() { return m_pArray + m_Count; }
|
||||||
|
const_iterator cbegin() const { return m_pArray; }
|
||||||
|
const_iterator cend() const { return m_pArray + m_Count; }
|
||||||
|
const_iterator begin() const { return cbegin(); }
|
||||||
|
const_iterator end() const { return cend(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AllocatorT m_Allocator;
|
AllocatorT m_Allocator;
|
||||||
@ -6041,6 +6046,9 @@ public:
|
|||||||
const_iterator cbegin() const { return const_iterator(&m_RawList, m_RawList.Front()); }
|
const_iterator cbegin() const { return const_iterator(&m_RawList, m_RawList.Front()); }
|
||||||
const_iterator cend() const { return const_iterator(&m_RawList, VMA_NULL); }
|
const_iterator cend() const { return const_iterator(&m_RawList, VMA_NULL); }
|
||||||
|
|
||||||
|
const_iterator begin() const { return cbegin(); }
|
||||||
|
const_iterator end() const { return cend(); }
|
||||||
|
|
||||||
void clear() { m_RawList.Clear(); }
|
void clear() { m_RawList.Clear(); }
|
||||||
void push_back(const T& value) { m_RawList.PushBack(value); }
|
void push_back(const T& value) { m_RawList.PushBack(value); }
|
||||||
void erase(iterator it) { m_RawList.Remove(it.m_pItem); }
|
void erase(iterator it) { m_RawList.Remove(it.m_pItem); }
|
||||||
@ -9377,12 +9385,8 @@ bool VmaBlockMetadata_Generic::Validate() const
|
|||||||
// True if previous visited suballocation was free.
|
// True if previous visited suballocation was free.
|
||||||
bool prevFree = false;
|
bool prevFree = false;
|
||||||
|
|
||||||
for(VmaSuballocationList::const_iterator suballocItem = m_Suballocations.cbegin();
|
for(const auto& subAlloc : m_Suballocations)
|
||||||
suballocItem != m_Suballocations.cend();
|
|
||||||
++suballocItem)
|
|
||||||
{
|
{
|
||||||
const VmaSuballocation& subAlloc = *suballocItem;
|
|
||||||
|
|
||||||
// Actual offset of this suballocation doesn't match expected one.
|
// Actual offset of this suballocation doesn't match expected one.
|
||||||
VMA_VALIDATE(subAlloc.offset == calculatedOffset);
|
VMA_VALIDATE(subAlloc.offset == calculatedOffset);
|
||||||
|
|
||||||
@ -9476,11 +9480,8 @@ void VmaBlockMetadata_Generic::CalcAllocationStatInfo(VmaStatInfo& outInfo) cons
|
|||||||
outInfo.unusedRangeSizeMin = UINT64_MAX;
|
outInfo.unusedRangeSizeMin = UINT64_MAX;
|
||||||
outInfo.unusedRangeSizeMax = 0;
|
outInfo.unusedRangeSizeMax = 0;
|
||||||
|
|
||||||
for(VmaSuballocationList::const_iterator suballocItem = m_Suballocations.cbegin();
|
for(const auto& suballoc : m_Suballocations)
|
||||||
suballocItem != m_Suballocations.cend();
|
|
||||||
++suballocItem)
|
|
||||||
{
|
{
|
||||||
const VmaSuballocation& suballoc = *suballocItem;
|
|
||||||
if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
|
if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
|
||||||
{
|
{
|
||||||
outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
|
outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
|
||||||
@ -9515,17 +9516,15 @@ void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json) const
|
|||||||
m_FreeCount); // unusedRangeCount
|
m_FreeCount); // unusedRangeCount
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
for(VmaSuballocationList::const_iterator suballocItem = m_Suballocations.cbegin();
|
for(const auto& suballoc : m_Suballocations)
|
||||||
suballocItem != m_Suballocations.cend();
|
|
||||||
++suballocItem, ++i)
|
|
||||||
{
|
{
|
||||||
if(suballocItem->type == VMA_SUBALLOCATION_TYPE_FREE)
|
if(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)
|
||||||
{
|
{
|
||||||
PrintDetailedMap_UnusedRange(json, suballocItem->offset, suballocItem->size);
|
PrintDetailedMap_UnusedRange(json, suballoc.offset, suballoc.size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrintDetailedMap_Allocation(json, suballocItem->offset, suballocItem->hAllocation);
|
PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9750,18 +9749,16 @@ uint32_t VmaBlockMetadata_Generic::MakeAllocationsLost(uint32_t currentFrameInde
|
|||||||
|
|
||||||
VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData)
|
VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData)
|
||||||
{
|
{
|
||||||
for(VmaSuballocationList::iterator it = m_Suballocations.begin();
|
for(auto& suballoc : m_Suballocations)
|
||||||
it != m_Suballocations.end();
|
|
||||||
++it)
|
|
||||||
{
|
{
|
||||||
if(it->type != VMA_SUBALLOCATION_TYPE_FREE)
|
if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
|
||||||
{
|
{
|
||||||
if(!VmaValidateMagicValue(pBlockData, it->offset - VMA_DEBUG_MARGIN))
|
if(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))
|
||||||
{
|
{
|
||||||
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!");
|
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!");
|
||||||
return VK_ERROR_VALIDATION_FAILED_EXT;
|
return VK_ERROR_VALIDATION_FAILED_EXT;
|
||||||
}
|
}
|
||||||
if(!VmaValidateMagicValue(pBlockData, it->offset + it->size))
|
if(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
|
||||||
{
|
{
|
||||||
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
|
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
|
||||||
return VK_ERROR_VALIDATION_FAILED_EXT;
|
return VK_ERROR_VALIDATION_FAILED_EXT;
|
||||||
@ -10295,14 +10292,12 @@ bool VmaBlockMetadata_Generic::IsBufferImageGranularityConflictPossible(
|
|||||||
|
|
||||||
VkDeviceSize minAlignment = VK_WHOLE_SIZE;
|
VkDeviceSize minAlignment = VK_WHOLE_SIZE;
|
||||||
bool typeConflictFound = false;
|
bool typeConflictFound = false;
|
||||||
for(VmaSuballocationList::const_iterator it = m_Suballocations.cbegin();
|
for(const auto& suballoc : m_Suballocations)
|
||||||
it != m_Suballocations.cend();
|
|
||||||
++it)
|
|
||||||
{
|
{
|
||||||
const VmaSuballocationType suballocType = it->type;
|
const VmaSuballocationType suballocType = suballoc.type;
|
||||||
if(suballocType != VMA_SUBALLOCATION_TYPE_FREE)
|
if(suballocType != VMA_SUBALLOCATION_TYPE_FREE)
|
||||||
{
|
{
|
||||||
minAlignment = VMA_MIN(minAlignment, it->hAllocation->GetAlignment());
|
minAlignment = VMA_MIN(minAlignment, suballoc.hAllocation->GetAlignment());
|
||||||
if(VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))
|
if(VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))
|
||||||
{
|
{
|
||||||
typeConflictFound = true;
|
typeConflictFound = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user