4#include "Containers/Array.h"
60 bool IsHead()
const {
return GetAllocationType() == EAllocationType::Head; }
61 bool IsFree()
const {
return GetAllocationType() == EAllocationType::Free; }
62 bool IsAllocated()
const {
return GetAllocationType() == EAllocationType::Allocated; }
79 bool IsLocked()
const {
return (Locked == 1); }
96 enum class EAllocationType :
uint8
103 EAllocationType GetAllocationType()
const {
return (EAllocationType) Type; }
277#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
ERHIPoolResourceTypes
Resource type supported by the pools (can be any or all)
Definition RHIPoolAllocator.h:27
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
Definition RHICommandList.h:455
Definition RHIResources.h:5541
Pool which stores for each allocation the previous and next allocation. Each block is either free or ...
Definition RHIPoolAllocator.h:135
uint32 GetAllocatedBlocks() const
Definition RHIPoolAllocator.h:165
RHICORE_API void RemoveFromFreeBlocks(FRHIPoolAllocationData *InFreeBlock)
Definition RHIPoolAllocator.cpp:507
uint32 GetAlignmentWaste() const
Definition RHIPoolAllocator.h:164
ERHIPoolResourceTypes GetSupportedResourceTypes() const
Definition RHIPoolAllocator.h:166
static RHICORE_API uint32 GetAlignedSize(uint32 InSizeInBytes, uint32 InPoolAlignment, uint32 InAllocationAlignment)
Definition RHIPoolAllocator.cpp:251
uint32 AllocatedBlocks
Definition RHIPoolAllocator.h:199
int16 PoolIndex
Definition RHIPoolAllocator.h:190
TArray< FRHIPoolAllocationData * > AllocationDataPool
Definition RHIPoolAllocator.h:208
RHICORE_API int32 FindFreeBlock(uint32 InSizeInBytes, uint32 InAllocationAlignment) const
Definition RHIPoolAllocator.cpp:464
virtual RHICORE_API void Init()
Definition RHIPoolAllocator.cpp:310
int16 GetPoolIndex() const
Definition RHIPoolAllocator.h:160
static RHICORE_API uint32 GetAlignedOffset(uint32 InOffset, uint32 InPoolAlignment, uint32 InAllocationAlignment)
Definition RHIPoolAllocator.cpp:261
RHICORE_API void Validate()
Definition RHIPoolAllocator.cpp:591
virtual RHICORE_API void Destroy()
Definition RHIPoolAllocator.cpp:334
const uint64 PoolSize
Definition RHIPoolAllocator.h:191
bool IsResourceTypeSupported(ERHIPoolResourceTypes InType) const
Definition RHIPoolAllocator.h:167
uint64 GetPoolSize() const
Definition RHIPoolAllocator.h:161
uint64 AligmnentWaste
Definition RHIPoolAllocator.h:198
RHICORE_API bool TryAllocate(uint32 InSizeInBytes, uint32 InAllocationAlignment, ERHIPoolResourceTypes InAllocationResourceType, FRHIPoolAllocationData &AllocationData)
Definition RHIPoolAllocator.cpp:352
RHICORE_API void ReleaseAllocationData(FRHIPoolAllocationData *InData)
Definition RHIPoolAllocator.cpp:577
EFreeListOrder
Definition RHIPoolAllocator.h:139
bool IsEmpty() const
Definition RHIPoolAllocator.h:168
virtual RHICORE_API ~FRHIMemoryPool()
Definition RHIPoolAllocator.cpp:294
RHICORE_API void TryClear(FRHIContextArray const &Contexts, FRHIPoolAllocator *InAllocator, uint32 InMaxCopySize, uint32 &CopySize, const TArray< FRHIMemoryPool * > &InTargetPools)
Definition RHIPoolAllocator.cpp:424
bool IsFull() const
Definition RHIPoolAllocator.h:169
const EFreeListOrder FreeListOrder
Definition RHIPoolAllocator.h:194
FRHIPoolAllocationData HeadBlock
Definition RHIPoolAllocator.h:202
RHICORE_API FRHIPoolAllocationData * GetNewAllocationData()
Definition RHIPoolAllocator.cpp:571
RHICORE_API void Deallocate(FRHIPoolAllocationData &AllocationData)
Definition RHIPoolAllocator.cpp:399
uint64 FreeSize
Definition RHIPoolAllocator.h:197
uint64 GetUsedSize() const
Definition RHIPoolAllocator.h:163
RHICORE_API FRHIPoolAllocationData * AddToFreeBlocks(FRHIPoolAllocationData *InFreeBlock)
Definition RHIPoolAllocator.cpp:520
uint64 GetFreeSize() const
Definition RHIPoolAllocator.h:162
const uint32 PoolAlignment
Definition RHIPoolAllocator.h:192
const ERHIPoolResourceTypes SupportedResourceTypes
Definition RHIPoolAllocator.h:193
TArray< FRHIPoolAllocationData * > FreeBlocks
Definition RHIPoolAllocator.h:205
Manages an array of FRHIMemoryPool and supports defragmentation between multiple pools.
Definition RHIPoolAllocator.h:220
int32 LastDefragPoolIndex
Definition RHIPoolAllocator.h:266
const uint64 DefaultPoolSize
Definition RHIPoolAllocator.h:253
RHICORE_API bool TryAllocateInternal(uint32 InSizeInBytes, uint32 InAllocationAlignment, ERHIPoolResourceTypes InAllocationResourceType, FRHIPoolAllocationData &AllocationData)
Definition RHIPoolAllocator.cpp:691
RHICORE_API void UpdateMemoryStats(uint32 &IOMemoryAllocated, uint32 &IOMemoryUsed, uint32 &IOMemoryFree, uint32 &IOMemoryEndFree, uint32 &IOAlignmentWaste, uint32 &IOAllocatedPageCount, uint32 &IOFullPageCount)
Definition RHIPoolAllocator.cpp:888
TArray< FRHIMemoryPool * > Pools
Definition RHIPoolAllocator.h:263
FCriticalSection CS
Definition RHIPoolAllocator.h:260
virtual bool HandleDefragRequest(FRHIContextArray const &Contexts, FRHIPoolAllocationData *InSourceBlock, FRHIPoolAllocationData &InTmpTargetBlock)=0
RHICORE_API void Initialize()
Definition RHIPoolAllocator.cpp:670
const uint32 PoolAlignment
Definition RHIPoolAllocator.h:254
const uint64 MaxAllocationSize
Definition RHIPoolAllocator.h:255
TArray< uint32 > PoolAllocationOrder
Definition RHIPoolAllocator.h:270
virtual FRHIMemoryPool * CreateNewPool(int16 InPoolIndex, uint32 InMinimumAllocationSize, ERHIPoolResourceTypes InAllocationResourceType)=0
RHICORE_API void DeallocateInternal(FRHIPoolAllocationData &AllocationData)
Definition RHIPoolAllocator.cpp:734
RHICORE_API void SortPools()
Definition RHIPoolAllocator.cpp:744
RHICORE_API void Defrag(FRHIContextArray const &Contexts, uint32 InMaxCopySize, uint32 &CurrentCopySize)
Definition RHIPoolAllocator.cpp:773
const bool bDefragEnabled
Definition RHIPoolAllocator.h:257
const FRHIMemoryPool::EFreeListOrder FreeListOrder
Definition RHIPoolAllocator.h:256
RHICORE_API void Destroy()
Definition RHIPoolAllocator.cpp:675
virtual RHICORE_API ~FRHIPoolAllocator()
Definition RHIPoolAllocator.cpp:664
uint32 TotalAllocatedBlocks
Definition RHIPoolAllocator.h:273
Owner of the pool allocation data which needs to handle memory move operations.
Definition RHIPoolAllocator.h:19
Pool allocator internal data.
Definition RHIPoolAllocator.h:39
FRHIPoolAllocationData * GetNext() const
Definition RHIPoolAllocator.h:71
FRHIPoolResource * GetOwner() const
Definition RHIPoolAllocator.h:76
RHICORE_API void RemoveAlias()
Definition RHIPoolAllocator.cpp:202
RHICORE_API void MoveFrom(FRHIPoolAllocationData &InAllocated, bool InLocked)
Definition RHIPoolAllocator.cpp:88
RHICORE_API void InitAsAllocated(uint32 InSize, uint32 InPoolAlignment, uint32 InAllocationAlignment, FRHIPoolAllocationData *InFree)
Definition RHIPoolAllocator.cpp:68
bool IsLocked() const
Definition RHIPoolAllocator.h:79
RHICORE_API void AddAlias(FRHIPoolAllocationData *InOther)
Definition RHIPoolAllocator.cpp:188
int16 GetPoolIndex() const
Definition RHIPoolAllocator.h:68
RHICORE_API void InitAsFree(int16 InPoolIndex, uint32 InSize, uint32 InAlignment, uint32 InOffset)
Definition RHIPoolAllocator.cpp:56
FRHIPoolAllocationData * GetPrev() const
Definition RHIPoolAllocator.h:72
uint32 GetSize() const
Definition RHIPoolAllocator.h:65
bool IsAllocated() const
Definition RHIPoolAllocator.h:62
bool IsFree() const
Definition RHIPoolAllocator.h:61
void SetOwner(FRHIPoolResource *InOwner)
Definition RHIPoolAllocator.h:75
uint32 GetOffset() const
Definition RHIPoolAllocator.h:67
RHICORE_API void MarkFree(uint32 InPoolAlignment, uint32 InAllocationAlignment)
Definition RHIPoolAllocator.cpp:133
void Unlock()
Definition RHIPoolAllocator.h:80
RHICORE_API void Reset()
Definition RHIPoolAllocator.cpp:31
RHICORE_API void InitAsHead(int16 InPoolIndex)
Definition RHIPoolAllocator.cpp:46
FRHIPoolAllocationData * GetFirstAlias() const
Definition RHIPoolAllocator.h:57
bool IsHead() const
Definition RHIPoolAllocator.h:60
uint32 GetAlignment() const
Definition RHIPoolAllocator.h:66
Definition ContainerAllocationPolicies.h:242