6#include "Containers/HashTable.h"
68 , MappingRequestHash(
NoInit)
69 , DirectMappingRequestHash(
NoInit)
74 , AdaptiveAllocationsRequests(
Allocator.MallocArray<
uint32>(LoadRequestCapacity))
76 , LoadRequestGroupMask(
Allocator.MallocArray<
uint8>(LoadRequestCapacity))
77 , LoadRequestFlags(
Allocator.MallocArray<FLoadRequestFlags>(LoadRequestCapacity))
80 , NumNonStreamingLoadRequests(0u)
81 , NumMappingRequests(0u)
82 , NumDirectMappingRequests(0u)
83 , NumContinuousUpdateRequests(0u)
84 , NumAdaptiveAllocationRequests(0u)
90 LoadRequestHash.
Clear();
91 MappingRequestHash.
Clear();
92 DirectMappingRequestHash.
Clear();
93 ContinuousUpdateRequestHash.
Clear();
98 LoadRequestHash.
Clear();
99 MappingRequestHash.
Clear();
100 DirectMappingRequestHash.
Clear();
103 NumNonStreamingLoadRequests = 0;
104 NumMappingRequests = 0;
105 NumDirectMappingRequests = 0;
106 NumAdaptiveAllocationRequests = 0;
110 NumContinuousUpdateRequests = 0;
111 ContinuousUpdateRequestHash.
Clear();
148 static const uint32 LoadRequestCapacity = 4u * 1024;
149 static const uint32 MappingRequestCapacity = 8u * 1024 - 256u;
150 static const uint32 DirectMappingRequestCapacity = MappingRequestCapacity;
151 static const uint32 ContinuousUpdateRequestCapacity = LoadRequestCapacity;
152 static const uint32 AdaptiveAllocationRequestCapacity = LoadRequestCapacity;
163 uint32* AdaptiveAllocationsRequests;
166 uint8* LoadRequestGroupMask;
168 struct FLoadRequestFlags
171 uint8 bStreaming : 1;
179 FLoadRequestFlags* LoadRequestFlags;
183 uint32 NumNonStreamingLoadRequests;
184 uint32 NumMappingRequests;
185 uint32 NumDirectMappingRequests;
186 uint32 NumContinuousUpdateRequests;
187 uint32 NumAdaptiveAllocationRequests;
193 check(GroupMask != 0u);
203 LoadRequestGroupMask[
Index] |= GroupMask;
208 if (NumLoadRequests < LoadRequestCapacity)
214 LoadRequestGroupMask[
Index] = GroupMask;
224 check(GroupMask != 0u);
232 FLoadRequestFlags&
Flags = LoadRequestFlags[
Index];
237 Flags.bLocked =
true;
241 LoadRequestGroupMask[
Index] |= GroupMask;
246 if (NumLoadRequests < LoadRequestCapacity)
252 LoadRequestGroupMask[
Index] = GroupMask;
263 check(LoadRequestIndex < NumLoadRequests);
264 const FMappingRequest Request(LoadRequestIndex, ProducerPhysicalGroupIndex, SpaceID, PageTableLayerIndex, MaxLevel, vAddress, vLevel, Local_vLevel);
269 if (Request == MappingRequests[
Index])
275 if (NumMappingRequests < MappingRequestCapacity)
279 MappingRequests[
Index] = Request;
291 const uint16 Hash =
Murmur32({ Request.PackedValue[0], Request.PackedValue[1], Request.PackedValue[2] });
294 if (Request == DirectMappingRequests[
Index])
300 if (NumDirectMappingRequests < DirectMappingRequestCapacity)
304 DirectMappingRequests[
Index] = Request;
313 if (Request == ContinuousUpdateRequests[
Index])
320 if (NumContinuousUpdateRequests < ContinuousUpdateRequestCapacity)
322 const uint32 Index = NumContinuousUpdateRequests++;
324 ContinuousUpdateRequests[
Index] = Request;
330 if (NumAdaptiveAllocationRequests < AdaptiveAllocationRequestCapacity)
332 AdaptiveAllocationsRequests[NumAdaptiveAllocationRequests++] = Request;
355 check(Request.LoadRequestIndex <
Other->NumLoadRequests);
357 if (LoadRequestIndex != 0xffff)
359 AddMappingRequest(LoadRequestIndex, Request.ProducerPhysicalGroupIndex, Request.SpaceID, Request.PageTableLayerIndex, Request.MaxLevel, Request.vAddress, Request.vLevel, Request.Local_vLevel);
393 for (
uint32 i = 0u; i < NumLoadRequests; ++i)
396 const FLoadRequestFlags
Flags = LoadRequestFlags[i];
414 (
Flags.bLocked != 0),
450 SortedFlags[WriteIndex] = LoadRequestFlags[OldIndex];
459 checkfSlow((SortedKeys[
SortedIndex].GetPriorityKey().
Locked != 0) &&
SortedFlags[WriteIndex - 1].bLocked,
TEXT(
"If this asserts, then the sorting is invalid : the code assumes locked requests are the ones at the beginning of the sorted list"));
466 checkfSlow((SortedKeys[
SortedIndex].GetPriorityKey().
Streaming != 0) && !
SortedFlags[WriteIndex - 1].bLocked,
TEXT(
"If this asserts, then the sorting is invalid : the code assumes locked requests are the ones at the beginning of the sorted list"));
473 checkfSlow((SortedKeys[
SortedIndex].GetPriorityKey().
Streaming == 0) && !
SortedFlags[WriteIndex - 1].bLocked,
TEXT(
"If this asserts, then the sorting is invalid : the code assumes locked requests are the ones at the beginning of the sorted list"));
484 for (
uint32 i = 0u; i < NumMappingRequests; ++i)
487 checkSlow(Request.LoadRequestIndex < NumLoadRequests);
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define checkfSlow(expr, format,...)
Definition AssertionMacros.h:333
#define check(expr)
Definition AssertionMacros.h:314
@ NoInit
Definition CoreMiscDefines.h:158
uint64 MurmurFinalize64(uint64 Hash)
Definition HashTable.h:33
uint32 Murmur32(std::initializer_list< uint32 > InitList)
Definition HashTable.h:43
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define MAX_uint16
Definition NumericLimits.h:20
bool operator!=(const FMappingRequest &Lhs, const FMappingRequest &Rhs)
Definition UniqueRequestList.h:34
bool operator==(const FMappingRequest &Lhs, const FMappingRequest &Rhs)
Definition UniqueRequestList.h:33
EVTProducerPriority
Definition VirtualTextureEnum.h:11
EVTInvalidatePriority
Definition VirtualTextureEnum.h:29
TVTTilePriorityAndIndex< FVTRequestPriority > FVTRequestPriorityAndIndex
Definition VirtualTextureShared.h:158
Definition UniqueRequestList.h:64
FUniqueRequestList(FConcurrentLinearBulkObjectAllocator &Allocator)
Definition UniqueRequestList.h:66
uint32 GetNumNonStreamingLoadRequests() const
Definition UniqueRequestList.h:116
uint8 GetGroupMask(uint32 i) const
Definition UniqueRequestList.h:128
void AddMappingRequest(uint16 LoadRequestIndex, uint8 ProducerPhysicalGroupIndex, uint8 SpaceID, uint8 PageTableLayerIndex, uint32 MaxLevel, uint32 vAddress, uint8 vLevel, uint8 Local_vLevel)
Definition UniqueRequestList.h:261
uint32 GetNumLoadRequests() const
Definition UniqueRequestList.h:115
const FVirtualTextureLocalTileRequest & GetContinuousUpdateRequest(uint32 i) const
Definition UniqueRequestList.h:125
const FVirtualTextureLocalTileRequest & GetLoadRequest(uint32 i) const
Definition UniqueRequestList.h:122
uint16 AddLoadRequest(const FVirtualTextureLocalTileRequest &TileRequest, uint8 GroupMask, uint16 Count, bool bStreamingRequest)
Definition UniqueRequestList.h:190
uint32 GetNumMappingRequests() const
Definition UniqueRequestList.h:117
void AddDirectMappingRequest(uint8 InSpaceID, uint16 InPhysicalSpaceID, uint8 InPageTableLayerIndex, uint32 MaxLevel, uint32 InAddress, uint8 InLevel, uint8 InLocalLevel, uint16 InPhysicalAddress)
Definition UniqueRequestList.h:283
uint32 GetNumDirectMappingRequests() const
Definition UniqueRequestList.h:118
void Initialize()
Definition UniqueRequestList.h:88
void AddContinuousUpdateRequest(const FVirtualTextureLocalTileRequest &Request)
Definition UniqueRequestList.h:308
const FMappingRequest & GetMappingRequest(uint32 i) const
Definition UniqueRequestList.h:123
void MergeRequests(const FUniqueRequestList *RESTRICT Other, FConcurrentLinearBulkObjectAllocator &Allocator)
Definition UniqueRequestList.h:336
uint32 GetNumAdaptiveAllocationRequests() const
Definition UniqueRequestList.h:120
bool IsLocked(uint32 i) const
Definition UniqueRequestList.h:129
uint32 GetNumContinuousUpdateRequests() const
Definition UniqueRequestList.h:119
const uint32 & GetAdaptiveAllocationRequest(uint32 i) const
Definition UniqueRequestList.h:126
uint16 LockLoadRequest(const FVirtualTextureLocalTileRequest &TileRequest, uint8 GroupMask, bool bStreamingRequest)
Definition UniqueRequestList.h:221
void AddAdaptiveAllocationRequest(uint32 Request)
Definition UniqueRequestList.h:328
void Reset(bool bResetContinousUpdates)
Definition UniqueRequestList.h:96
void SortRequests(FVirtualTextureProducerCollection &Producers, FConcurrentLinearBulkObjectAllocator &Allocator, uint32 MaxNonStreamingLoadRequests, uint32 MaxStreamingLoadRequests, bool bUseCombinedLimit, bool bSortByPriority)
Definition UniqueRequestList.h:379
const FDirectMappingRequest & GetDirectMappingRequest(uint32 i) const
Definition UniqueRequestList.h:124
Definition VirtualTextureProducer.h:62
Definition HashTable.h:94
bool IsValid(uint16 Index) const
Definition HashTable.h:153
void Clear()
Definition HashTable.h:131
uint16 Next(uint16 Index) const
Definition HashTable.h:146
void Add(uint16 Key, uint16 Index)
Definition HashTable.h:159
uint16 First(uint16 Key) const
Definition HashTable.h:138
UE_REWRITE void Sort(RangeType &&Range)
Definition Sort.h:16
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition UniqueRequestList.h:37
uint32 Pad
Definition UniqueRequestList.h:56
uint32 pAddress
Definition UniqueRequestList.h:50
uint32 PhysicalSpaceID
Definition UniqueRequestList.h:51
uint32 Local_vLevel
Definition UniqueRequestList.h:52
uint32 PageTableLayerIndex
Definition UniqueRequestList.h:55
uint32 MaxLevel
Definition UniqueRequestList.h:53
uint32 vLevel
Definition UniqueRequestList.h:47
FDirectMappingRequest()
Definition UniqueRequestList.h:38
uint32 SpaceID
Definition UniqueRequestList.h:48
FDirectMappingRequest(uint8 InSpaceID, uint16 InPhysicalSpaceID, uint8 InPageTableLayerIndex, uint32 InMaxLevel, uint32 InAddress, uint8 InLevel, uint8 InLocalLevel, uint16 InPhysicalAddress)
Definition UniqueRequestList.h:39
uint32 PackedValue[3]
Definition UniqueRequestList.h:43
uint32 vAddress
Definition UniqueRequestList.h:46
Definition UniqueRequestList.h:13
uint32 SpaceID
Definition UniqueRequestList.h:24
uint64 PackedValue
Definition UniqueRequestList.h:19
uint32 Local_vLevel
Definition UniqueRequestList.h:26
FMappingRequest()
Definition UniqueRequestList.h:14
FMappingRequest(uint16 InLoadIndex, uint8 InPhysicalGroupIndex, uint8 InSpaceID, uint8 InPageTableLayerIndex, uint32 InMaxLevel, uint32 InAddress, uint8 InLevel, uint8 InLocalLevel)
Definition UniqueRequestList.h:15
uint32 ProducerPhysicalGroupIndex
Definition UniqueRequestList.h:27
uint32 vLevel
Definition UniqueRequestList.h:23
uint32 PageTableLayerIndex
Definition UniqueRequestList.h:28
uint32 vAddress
Definition UniqueRequestList.h:22
uint32 LoadRequestIndex
Definition UniqueRequestList.h:25
uint32 MaxLevel
Definition UniqueRequestList.h:29
Definition VirtualTexturing.h:533
FVirtualTextureLocalTileRequest & MergeWith(const FVirtualTextureLocalTileRequest &InOther)
Definition VirtualTexturing.h:548
Definition VirtualTextureShared.h:60
uint64 Index
Definition VirtualTextureShared.h:83