31 #include "VariableSizeAllocationsManager.h" 32 #include "STDAllocator.h" 38 class VariableSizeGPUAllocationsManager :
public VariableSizeAllocationsManager
41 struct StaleAllocationAttribs
46 StaleAllocationAttribs(OffsetType _Offset, OffsetType _Size,
Uint64 _FenceValue) :
47 Offset(_Offset), Size(_Size), FenceValue(_FenceValue)
52 VariableSizeGPUAllocationsManager(OffsetType MaxSize, IMemoryAllocator &Allocator) :
53 VariableSizeAllocationsManager(MaxSize, Allocator),
54 m_StaleAllocations(0, StaleAllocationAttribs(0,0,0), STD_ALLOCATOR_RAW_MEM(StaleAllocationAttribs, Allocator,
"Allocator for deque<StaleAllocationAttribs>" ))
57 ~VariableSizeGPUAllocationsManager()
59 VERIFY(m_StaleAllocations.empty(),
"Not all stale allocations released");
60 VERIFY(m_StaleAllocationsSize == 0,
"Not all stale allocations released");
64 VariableSizeGPUAllocationsManager(VariableSizeGPUAllocationsManager&& rhs) :
65 VariableSizeAllocationsManager(
std::move(rhs)),
66 m_StaleAllocations(
std::move(rhs.m_StaleAllocations)),
67 m_StaleAllocationsSize(rhs.m_StaleAllocationsSize)
69 rhs.m_StaleAllocationsSize = 0;
72 VariableSizeGPUAllocationsManager& operator = (VariableSizeGPUAllocationsManager&& rhs) =
delete;
73 VariableSizeGPUAllocationsManager(
const VariableSizeGPUAllocationsManager&) =
delete;
74 VariableSizeGPUAllocationsManager& operator = (
const VariableSizeGPUAllocationsManager&) =
delete;
76 void Free(OffsetType Offset, OffsetType Size,
Uint64 FenceValue)
80 m_StaleAllocations.emplace_back(Offset, Size, FenceValue);
81 m_StaleAllocationsSize += Size;
88 void ReleaseStaleAllocations(
Uint64 LastCompletedFenceValue)
91 while(!m_StaleAllocations.empty() && m_StaleAllocations.front().FenceValue <= LastCompletedFenceValue)
93 auto &OldestAllocation = m_StaleAllocations.front();
94 VariableSizeAllocationsManager::Free(OldestAllocation.Offset, OldestAllocation.Size);
95 m_StaleAllocationsSize -= OldestAllocation.Size;
96 m_StaleAllocations.pop_front();
100 size_t GetStaleAllocationsSize()
const {
return m_StaleAllocationsSize; }
103 std::deque< StaleAllocationAttribs, STDAllocatorRawMem<StaleAllocationAttribs> > m_StaleAllocations;
104 size_t m_StaleAllocationsSize = 0;
Graphics engine namespace.
Definition: AdaptiveFixedBlockAllocator.h:30
Definition: AdvancedMath.h:316
uint64_t Uint64
64-bit unsigned integer
Definition: BasicTypes.h:38