UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UniqueRequestList.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Containers/HashTable.h"
7#include "VirtualTexturing.h"
11
32static_assert(sizeof(FMappingRequest) == sizeof(uint64), "Bad packing");
33inline bool operator==(const FMappingRequest& Lhs, const FMappingRequest& Rhs) { return Lhs.PackedValue == Rhs.PackedValue; }
34inline bool operator!=(const FMappingRequest& Lhs, const FMappingRequest& Rhs) { return Lhs.PackedValue != Rhs.PackedValue; }
35
59static_assert(sizeof(FDirectMappingRequest) == sizeof(uint32) * 3, "Bad packing");
60inline bool operator==(const FDirectMappingRequest& Lhs, const FDirectMappingRequest& Rhs) { return Lhs.PackedValue[0] == Rhs.PackedValue[0] && Lhs.PackedValue[1] == Rhs.PackedValue[1] && Lhs.PackedValue[2] == Rhs.PackedValue[2]; }
61inline bool operator!=(const FDirectMappingRequest& Lhs, const FDirectMappingRequest& Rhs) { return !operator==(Lhs, Rhs); }
62
64{
65public:
67 : LoadRequestHash(NoInit)
68 , MappingRequestHash(NoInit)
69 , DirectMappingRequestHash(NoInit)
70 , LoadRequests(Allocator.CreateArray<FVirtualTextureLocalTileRequest>(LoadRequestCapacity))
71 , MappingRequests(Allocator.CreateArray<FMappingRequest>(MappingRequestCapacity))
72 , DirectMappingRequests(Allocator.CreateArray<FDirectMappingRequest>(DirectMappingRequestCapacity))
73 , ContinuousUpdateRequests(Allocator.CreateArray<FVirtualTextureLocalTileRequest>(LoadRequestCapacity))
74 , AdaptiveAllocationsRequests(Allocator.MallocArray<uint32>(LoadRequestCapacity))
75 , LoadRequestCount(Allocator.MallocArray<uint16>(LoadRequestCapacity))
76 , LoadRequestGroupMask(Allocator.MallocArray<uint8>(LoadRequestCapacity))
77 , LoadRequestFlags(Allocator.MallocArray<FLoadRequestFlags>(LoadRequestCapacity))
78 , NumLoadRequests(0u)
79 , NumLockRequests(0u)
80 , NumNonStreamingLoadRequests(0u)
81 , NumMappingRequests(0u)
82 , NumDirectMappingRequests(0u)
83 , NumContinuousUpdateRequests(0u)
84 , NumAdaptiveAllocationRequests(0u)
85 {
86 }
87
88 inline void Initialize()
89 {
90 LoadRequestHash.Clear();
91 MappingRequestHash.Clear();
92 DirectMappingRequestHash.Clear();
93 ContinuousUpdateRequestHash.Clear();
94 }
95
96 inline void Reset(bool bResetContinousUpdates)
97 {
98 LoadRequestHash.Clear();
99 MappingRequestHash.Clear();
100 DirectMappingRequestHash.Clear();
101 NumLoadRequests = 0;
102 NumLockRequests = 0;
103 NumNonStreamingLoadRequests = 0;
104 NumMappingRequests = 0;
105 NumDirectMappingRequests = 0;
106 NumAdaptiveAllocationRequests = 0;
107
109 {
110 NumContinuousUpdateRequests = 0;
111 ContinuousUpdateRequestHash.Clear();
112 }
113 }
114
115 inline uint32 GetNumLoadRequests() const { return NumLoadRequests; }
116 inline uint32 GetNumNonStreamingLoadRequests() const { return NumNonStreamingLoadRequests; }
117 inline uint32 GetNumMappingRequests() const { return NumMappingRequests; }
118 inline uint32 GetNumDirectMappingRequests() const { return NumDirectMappingRequests; }
119 inline uint32 GetNumContinuousUpdateRequests() const { return NumContinuousUpdateRequests; }
120 inline uint32 GetNumAdaptiveAllocationRequests() const { return NumAdaptiveAllocationRequests; }
121
122 inline const FVirtualTextureLocalTileRequest& GetLoadRequest(uint32 i) const { checkSlow(i < NumLoadRequests); return LoadRequests[i]; }
123 inline const FMappingRequest& GetMappingRequest(uint32 i) const { checkSlow(i < NumMappingRequests); return MappingRequests[i]; }
124 inline const FDirectMappingRequest& GetDirectMappingRequest(uint32 i) const { checkSlow(i < NumDirectMappingRequests); return DirectMappingRequests[i]; }
125 inline const FVirtualTextureLocalTileRequest& GetContinuousUpdateRequest(uint32 i) const { checkSlow(i < NumContinuousUpdateRequests); return ContinuousUpdateRequests[i]; }
126 inline const uint32& GetAdaptiveAllocationRequest(uint32 i) const { checkSlow(i < NumAdaptiveAllocationRequests); return AdaptiveAllocationsRequests[i]; }
127
128 inline uint8 GetGroupMask(uint32 i) const { checkSlow(i < NumLoadRequests); return LoadRequestGroupMask[i]; }
129 inline bool IsLocked(uint32 i) const { checkSlow(i < NumLoadRequests); return i < NumLockRequests; }
130
133
134 void AddMappingRequest(uint16 LoadRequestIndex, uint8 ProducerPhysicalGroupIndex, uint8 SpaceID, uint8 PageTableLayerIndex, uint32 MaxLevel, uint32 vAddress, uint8 vLevel, uint8 Local_vLevel);
135
138
140
142
144
146
147private:
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;
153
158
160 FMappingRequest* MappingRequests;
161 FDirectMappingRequest* DirectMappingRequests;
162 FVirtualTextureLocalTileRequest* ContinuousUpdateRequests;
163 uint32* AdaptiveAllocationsRequests;
164
165 uint16* LoadRequestCount;
166 uint8* LoadRequestGroupMask;
167
168 struct FLoadRequestFlags
169 {
170 uint8 bLocked : 1;
171 uint8 bStreaming : 1;
172 uint8 Padding : 6;
173
174 FLoadRequestFlags(bool bInLocked, bool bInStreaming)
175 : bLocked(bInLocked)
176 , bStreaming(bInStreaming)
177 {}
178 };
179 FLoadRequestFlags* LoadRequestFlags;
180
181 uint32 NumLoadRequests;
182 uint32 NumLockRequests;
183 uint32 NumNonStreamingLoadRequests;
184 uint32 NumMappingRequests;
185 uint32 NumDirectMappingRequests;
186 uint32 NumContinuousUpdateRequests;
187 uint32 NumAdaptiveAllocationRequests;
188};
189
191{
192 const uint16 Hash = TileRequest.GetMurmurHash();
193 check(GroupMask != 0u);
194 for (uint16 Index = LoadRequestHash.First(Hash); LoadRequestHash.IsValid(Index); Index = LoadRequestHash.Next(Index))
195 {
196 if (TileRequest == LoadRequests[Index])
197 {
198 LoadRequests[Index].MergeWith(TileRequest);
199
200 check(LoadRequestFlags[Index].bStreaming == bStreamingRequest);
201
202 LoadRequestCount[Index] = FMath::Min<uint32>((uint32)LoadRequestCount[Index] + Count, MAX_uint16);
203 LoadRequestGroupMask[Index] |= GroupMask;
204 return Index;
205 }
206 }
207
208 if (NumLoadRequests < LoadRequestCapacity)
209 {
210 const uint32 Index = NumLoadRequests++;
211 LoadRequestHash.Add(Hash, Index);
212 LoadRequests[Index] = TileRequest;
213 LoadRequestCount[Index] = Count;
214 LoadRequestGroupMask[Index] = GroupMask;
215 LoadRequestFlags[Index] = FLoadRequestFlags(/*bInLocked = */false, bStreamingRequest);
216 return Index;
217 }
218 return 0xffff;
219}
220
222{
223 const uint16 Hash = TileRequest.GetMurmurHash();
224 check(GroupMask != 0u);
225
226 for (uint16 Index = LoadRequestHash.First(Hash); LoadRequestHash.IsValid(Index); Index = LoadRequestHash.Next(Index))
227 {
228 if (TileRequest == LoadRequests[Index])
229 {
230 LoadRequests[Index].MergeWith(TileRequest);
231
232 FLoadRequestFlags& Flags = LoadRequestFlags[Index];
233 check(bStreamingRequest == Flags.bStreaming);
234
235 if (!Flags.bLocked)
236 {
237 Flags.bLocked = true;
238 LoadRequestCount[Index] = MAX_uint16;
239 ++NumLockRequests;
240 }
241 LoadRequestGroupMask[Index] |= GroupMask;
242 return Index;
243 }
244 }
245
246 if (NumLoadRequests < LoadRequestCapacity)
247 {
248 const uint32 Index = NumLoadRequests++;
249 LoadRequestHash.Add(Hash, Index);
250 LoadRequests[Index] = TileRequest;
251 LoadRequestCount[Index] = MAX_uint16;
252 LoadRequestGroupMask[Index] = GroupMask;
253 LoadRequestFlags[Index] = FLoadRequestFlags(/*bInLocked = */true, bStreamingRequest);
254 ++NumLockRequests;
255 return Index;
256 }
257
258 return 0xffff;
259}
260
261void FUniqueRequestList::AddMappingRequest(uint16 LoadRequestIndex, uint8 ProducerPhysicalGroupIndex, uint8 SpaceID, uint8 PageTableLayerIndex, uint32 MaxLevel, uint32 vAddress, uint8 vLevel, uint8 Local_vLevel)
262{
263 check(LoadRequestIndex < NumLoadRequests);
264 const FMappingRequest Request(LoadRequestIndex, ProducerPhysicalGroupIndex, SpaceID, PageTableLayerIndex, MaxLevel, vAddress, vLevel, Local_vLevel);
265 const uint16 Hash = static_cast<uint16>(MurmurFinalize64(Request.PackedValue));
266
267 for (uint16 Index = MappingRequestHash.First(Hash); MappingRequestHash.IsValid(Index); Index = MappingRequestHash.Next(Index))
268 {
269 if (Request == MappingRequests[Index])
270 {
271 return;
272 }
273 }
274
275 if (NumMappingRequests < MappingRequestCapacity)
276 {
277 const uint32 Index = NumMappingRequests++;
278 MappingRequestHash.Add(Hash, Index);
279 MappingRequests[Index] = Request;
280 }
281}
282
288
290{
291 const uint16 Hash = Murmur32({ Request.PackedValue[0], Request.PackedValue[1], Request.PackedValue[2] });
292 for (uint16 Index = DirectMappingRequestHash.First(Hash); DirectMappingRequestHash.IsValid(Index); Index = DirectMappingRequestHash.Next(Index))
293 {
294 if (Request == DirectMappingRequests[Index])
295 {
296 return;
297 }
298 }
299
300 if (NumDirectMappingRequests < DirectMappingRequestCapacity)
301 {
302 const uint32 Index = NumDirectMappingRequests++;
303 DirectMappingRequestHash.Add(Hash, Index);
304 DirectMappingRequests[Index] = Request;
305 }
306}
307
309{
310 const uint16 Hash = Request.GetMurmurHash();
311 for (uint16 Index = ContinuousUpdateRequestHash.First(Hash); ContinuousUpdateRequestHash.IsValid(Index); Index = ContinuousUpdateRequestHash.Next(Index))
312 {
313 if (Request == ContinuousUpdateRequests[Index])
314 {
315 ContinuousUpdateRequests[Index].MergeWith(Request);
316 return;
317 }
318 }
319
320 if (NumContinuousUpdateRequests < ContinuousUpdateRequestCapacity)
321 {
322 const uint32 Index = NumContinuousUpdateRequests++;
323 ContinuousUpdateRequestHash.Add(Hash, Index);
324 ContinuousUpdateRequests[Index] = Request;
325 }
326}
327
329{
330 if (NumAdaptiveAllocationRequests < AdaptiveAllocationRequestCapacity)
331 {
332 AdaptiveAllocationsRequests[NumAdaptiveAllocationRequests++] = Request;
333 }
334}
335
337{
338 uint16* LoadRequestIndexRemap = Allocator.MallocArray<uint16>(Other->NumLoadRequests);
339
340 for (uint32 Index = 0u; Index < Other->NumLoadRequests; ++Index)
341 {
342 if (Other->IsLocked(Index))
343 {
344 LoadRequestIndexRemap[Index] = LockLoadRequest(Other->GetLoadRequest(Index), Other->LoadRequestGroupMask[Index], Other->LoadRequestFlags[Index].bStreaming);
345 }
346 else
347 {
348 LoadRequestIndexRemap[Index] = AddLoadRequest(Other->GetLoadRequest(Index), Other->LoadRequestGroupMask[Index], Other->LoadRequestCount[Index], Other->LoadRequestFlags[Index].bStreaming);
349 }
350 }
351
352 for (uint32 Index = 0u; Index < Other->NumMappingRequests; ++Index)
353 {
354 const FMappingRequest& Request = Other->GetMappingRequest(Index);
355 check(Request.LoadRequestIndex < Other->NumLoadRequests);
356 const uint16 LoadRequestIndex = LoadRequestIndexRemap[Request.LoadRequestIndex];
357 if (LoadRequestIndex != 0xffff)
358 {
359 AddMappingRequest(LoadRequestIndex, Request.ProducerPhysicalGroupIndex, Request.SpaceID, Request.PageTableLayerIndex, Request.MaxLevel, Request.vAddress, Request.vLevel, Request.Local_vLevel);
360 }
361 }
362
363 for (uint32 Index = 0u; Index < Other->NumDirectMappingRequests; ++Index)
364 {
365 AddDirectMappingRequest(Other->GetDirectMappingRequest(Index));
366 }
367
368 for (uint32 Index = 0u; Index < Other->NumContinuousUpdateRequests; ++Index)
369 {
370 AddContinuousUpdateRequest(Other->GetContinuousUpdateRequest(Index));
371 }
372
373 for (uint32 Index = 0u; Index < Other->NumAdaptiveAllocationRequests; ++Index)
374 {
375 AddAdaptiveAllocationRequest(Other->GetAdaptiveAllocationRequest(Index));
376 }
377}
378
380{
382 {
385 }
386
387 // Compute priority of each load request
391
392 FVTRequestPriorityAndIndex* SortedKeys = Allocator.CreateArray<FVTRequestPriorityAndIndex>(NumLoadRequests);
393 for (uint32 i = 0u; i < NumLoadRequests; ++i)
394 {
395 const uint32 Count = LoadRequestCount[i];
396 const FLoadRequestFlags Flags = LoadRequestFlags[i];
397
398 // Try to load higher mips first
400 const uint32 PagePriority = (Count * (1u + LoadRequest.GetTile().Local_vLevel));
401
402 const bool bStreaming = !bUseCombinedLimit && Flags.bStreaming;
403 if (Flags.bLocked)
404 {
405 NumNonStreamingLockRequests += bStreaming ? 0 : 1;
407 }
408 else if (bStreaming)
409 {
411 }
412 SortedKeys[i] = FVTRequestPriorityAndIndex(
413 i,
414 /*bInLocked = */(Flags.bLocked != 0),
415 /*bInStreaming = */bStreaming,
416 bSortByPriority ? LoadRequest.GetProducerPriority() : static_cast<EVTProducerPriority>(0),
417 bSortByPriority ? LoadRequest.GetInvalidatePriority() : static_cast<EVTInvalidatePriority>(0),
418 PagePriority);
419 }
420 checkSlow(CheckNumLockRequests == NumLockRequests);
421
422 // Sort so highest priority requests are at the front of the list.
423 // Important note : the rest of the algorithm assumes locked requests come first, then streaming requests, then the rest :
424 Algo::Sort(MakeArrayView(SortedKeys, NumLoadRequests));
425
426 // Clamp number of load requests to maximum, but also ensure all lock requests are considered
429 const uint32 NumNonStreamingRequests = NumLoadRequests - NumStreamingRequests;
430
434
435 // Re-index load request list, using sorted indices
438 FLoadRequestFlags* SortedFlags = Allocator.MallocArray<FLoadRequestFlags>(NewNumLoadRequests);
439 uint16* LoadIndexToSortedLoadIndex = Allocator.MallocArray<uint16>(NumLoadRequests);
440 FMemory::Memset(LoadIndexToSortedLoadIndex, 0xff, NumLoadRequests * sizeof(uint16));
441
442 uint32 WriteIndex = 0;
444 {
445 const uint32 OldIndex = SortedKeys[SortedIndex].Index;
446 checkSlow(OldIndex < NumLoadRequests);
447
448 SortedLoadRequests[WriteIndex] = LoadRequests[OldIndex];
449 SortedGroupMask[WriteIndex] = LoadRequestGroupMask[OldIndex];
450 SortedFlags[WriteIndex] = LoadRequestFlags[OldIndex];
451 LoadIndexToSortedLoadIndex[OldIndex] = WriteIndex;
452
453 ++WriteIndex;
454 };
455
456 for (uint32 SortedIndex = 0u; SortedIndex < NumLockRequests; ++SortedIndex)
457 {
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"));
460 }
461
463 {
464 const uint32 SortedIndex = NumLockRequests + i;
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"));
467 }
468
470 {
471 const uint32 SortedIndex = NumLockRequests + NumStreamingNonLockRequests + i;
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"));
474 }
475
476 check(NewNumLoadRequests == WriteIndex);
477 LoadRequests = SortedLoadRequests;
478 LoadRequestGroupMask = SortedGroupMask;
479 LoadRequestFlags = SortedFlags;
480
481 // Remap LoadRequest indices for all the mapping requests
482 // Can discard any mapping request that refers to a LoadRequest that's no longer being performed this frame
484 for (uint32 i = 0u; i < NumMappingRequests; ++i)
485 {
487 checkSlow(Request.LoadRequestIndex < NumLoadRequests);
488 const uint16 SortedLoadIndex = LoadIndexToSortedLoadIndex[Request.LoadRequestIndex];
489 if (SortedLoadIndex != 0xffff)
490 {
492 Request.LoadRequestIndex = SortedLoadIndex;
493 MappingRequests[NewNumMappingRequests++] = Request;
494 }
495 }
496
497 NumLoadRequests = NewNumLoadRequests;
498 NumNonStreamingLoadRequests = NewNumNonStreamingRequests;
499 check(!bUseCombinedLimit || NumLoadRequests == NumNonStreamingLoadRequests);
500 NumMappingRequests = NewNumMappingRequests;
501}
502
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
#define TEXT(x)
Definition Platform.h:1272
#define RESTRICT
Definition Platform.h:706
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
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
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
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