UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LumenSceneData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
9#include "Lumen/Lumen.h"
15#include "LumenDefinitions.h"
17#include "RenderTransform.h"
19#include "UnifiedBuffer.h"
20#include "Tasks/Task.h"
21#include "Math/DoubleFloat.h"
22
31
36class FLumenMeshCards;
37class FLumenViewState;
43
45 SHADER_PARAMETER(uint32, NumCards)
50 SHADER_PARAMETER(FVector2f, PhysicalAtlasSize)
59 SHADER_PARAMETER_RDG_BUFFER_SRV(ByteAddressBuffer, SceneInstanceIndexToMeshCardsIndexBuffer)
66
80
81namespace Lumen
82{
84
87
89};
90
92{
93 static constexpr uint64 InvalidPackedValue = -1;
94
96 struct
97 {
103 };
104
105 FLumenCardId() = default;
106
123
124 bool operator<(const FLumenCardId& Other) const
125 {
126 return PackedValue < Other.PackedValue;
127 }
128
129 bool operator<=(const FLumenCardId& Other) const
130 {
131 return PackedValue <= Other.PackedValue;
132 }
133
134 bool operator==(const FLumenCardId& Other) const
135 {
136 return PackedValue == Other.PackedValue;
137 }
138
139 bool operator!=(const FLumenCardId& Other) const
140 {
141 return PackedValue != Other.PackedValue;
142 }
143
144 bool IsValid() const
145 {
147 }
148
150 {
152 }
153
154 static constexpr FLumenCardId GetInvalidId()
155 {
158 return Id;
159 }
160};
161
162static_assert(sizeof(FLumenCardId) == sizeof(uint64), "Unexpected size of FLumenCardId");
163
165{
166 return GetTypeHash(Key.PackedValue);
167}
168
183
205
235
237{
242
245 bool bLocked = false;
246
247 bool IsAllocated() const
248 {
249 return PageTableSpanSize > 0;
250 }
251
253 {
255 }
256
257 int32 GetPageTableIndex(int32 LocalPageIndex) const
258 {
259 return PageTableSpanOffset + LocalPageIndex;
260 }
261};
262
272
274{
275public:
276 FLumenCard();
277 ~FLumenCard();
278
282
283 bool bVisible = false;
284 bool bHeightfield = false;
285 bool bAxisXFlipped = false;
286
288
289 // First and last allocated mip map
292
293 // Requested res level based on distance. Actual allocated res level may be lower if atlas is out of space.
295
296 // Surface cache allocations per mip map, indexed by [ResLevel - Lumen::MinResLevel]
298
303 float ResolutionScale = 1.0f;
304
305 // Initial WorldOBB.Extent.X / WorldOBB.Extent.Y, which can't change during reallocation
306 float CardAspect = 1.0f;
307
310
311 void Initialize(
312 float InResolutionScale,
313 uint32 CustomId,
314 const FMatrix& LocalToWorld,
316 const FLumenCardBuildData& CardBuildData,
320
321 void SetTransform(const FMatrix& LocalToWorld, const FLumenMeshCards& MeshCards);
322
324
325 bool IsAllocated() const
326 {
328 }
329
338
339 void GetSurfaceStats(const TSparseSpanArray<FLumenPageTableEntry>& PageTable, FSurfaceStats& Stats) const;
340
342 {
343 const int32 MipIndex = ResLevel - Lumen::MinResLevel;
344 check(MipIndex >= 0 && MipIndex < UE_ARRAY_COUNT(SurfaceMipMaps));
345 return SurfaceMipMaps[MipIndex];
346 }
347
349 void GetMipMapDesc(int32 ResLevel, FLumenMipMapDesc& Desc) const;
350
351 const FLumenSurfaceMipMap& GetMipMap(int32 ResLevel) const
352 {
353 const int32 MipIndex = ResLevel - Lumen::MinResLevel;
354 check(MipIndex >= 0 && MipIndex < UE_ARRAY_COUNT(SurfaceMipMaps));
355 return SurfaceMipMaps[MipIndex];
356 }
357};
358
360{
361public:
363
364 // Must not be dereferenced after creation, the primitive was removed from the scene and deleted
365 // Value of the pointer is still useful for map lookups
367
368 // Need to copy by value as this is a deferred remove and Primitive may be already destroyed
371};
372
373// Defines a group of scene primitives for a given LOD level
406
448
450{
451 // Allocated physical page data
453
454 // Allows to point to a sub-allocation inside a shared physical page
456
457 // Sampling data, can point to a coarser page
463
464 // CardPage for atlas operations
468
470
471 bool IsSubAllocation() const
472 {
473 return SubAllocationSize.X >= 0 || SubAllocationSize.Y >= 0;
474 }
475
476 bool IsMapped() const
477 {
478 return PhysicalPageCoord.X >= 0 && PhysicalPageCoord.Y >= 0;
479 }
480
485
487 {
488 return IsMapped() ? PhysicalAtlasRect.Area() : 0;
489 }
490};
491
493{
494public:
498 float Distance = 0.0f;
499
500 bool IsLockedMip() const { return LocalPageIndex == UINT16_MAX; }
501};
502
518
519// Physical page allocator, which routes sub page sized allocations to a bin allocator
521{
522public:
524 {
525 // Allocated physical page data
527
528 // Allows to point to a sub-allocation inside a shared physical page
530 };
531
538
549
551 void Allocate(const FLumenPageTableEntry& Page, FAllocation& Allocation);
552 void Free(const FLumenPageTableEntry& Page);
553 bool IsSpaceAvailable(const FLumenCard& Card, int32 ResLevel, bool bSinglePage) const;
554 void GetStats(FStats& Stats) const;
555
556private:
557
558 // Data structure overview
559 // -----------------------
560 // * The atlas is divided in to pages
561 // * Each page is 128x128
562 // * Each page can be divided into sub-allocation to hold smaller element size (e..g 8x8, 8x16, 8x32, ...)
563 //
564 // * Card elements are allocated into these pages.
565 // * Card elements are allocated into page with the correct sub-allocation size
566 //
567 // Data structures:
568 // * FPageBin - Holds reference to all the page allocations for a given element size. Due to this, there is at max. 64 FPageBin E.g.:
569 // * 1 FPageBin for 8x8 allocation,
570 // * 1 FPageBin for 8x16 allocation,
571 // * 1 FPageBin for 8x32 allocation,
572 // * ...
573 // A PageBin holds reference to several PageBinAllocation, one per physical page. There can be a large quantity of FPageBinAllocation
574 // * FPageBinAllocation - Tracks the sub-allocation within a single physical page. A physical page (128x128) will be broken into 32x32 sub-allocation for
575 // an element size of 8x8. The sub-allocation is tracked with a bitfield to indicate which slot is available or not
576 // * FPageBinLookup - Lookup table to fast retrivable of FPageBin based on the desired element size. The lookup is a 8x8 table, so there is at max 64 FPageBin
577 struct FPageBinAllocation
578 {
579 public:
581 {
582 static_assert(Lumen::MinResLevel == 3);
583 static_assert(Lumen::PhysicalPageSize == 128);
584
585 PageCoord = InPageCoord;
586 PageSizeInElements = InPageSizeInElements;
587 SubPageFreeCount = InPageSizeInElements.X * InPageSizeInElements.Y;
588 SubPageList.SetNum(SubPageFreeCount, false);
589 }
590
591 FIntPoint Add()
592 {
593 const int32 Index = SubPageList.FindAndSetFirstZeroBit();
595 --SubPageFreeCount;
596 return FIntPoint(Index % PageSizeInElements.X, Index / PageSizeInElements.X);
597 }
598
599 void Remove(const FIntPoint& In)
600 {
601 const int32 Index = In.X + PageSizeInElements.X * In.Y;
602 checkSlow(SubPageList.IsValidIndex(Index));
603 ++SubPageFreeCount;
604 SubPageList[Index] = false;
605 }
606
607 uint32 GetSubPageFreeCount() const
608 {
609 return SubPageFreeCount;
610 }
611
612 bool HasFreeElements() const
613 {
614 return SubPageFreeCount > 0;
615 }
616
617 bool IsEmpty() const
618 {
619 return SubPageFreeCount == PageSizeInElements.X * PageSizeInElements.Y;
620 }
621
622 FIntPoint PageCoord;
623 FIntPoint PageSizeInElements;
624 private:
625 // 256 bits for storing sub-page elements
626 // * MinPage size is 2^Lumen::MinResLevel=8
627 // * Physical page is Lumen::PhysicalPageSize=128
628 // * Max sub-allocation within a physical page is (128/8)^2 = 16x16 = 256
629 // Values -> 0:free 1:used
631 int32 SubPageFreeCount = 0;
632 };
633
634 // There is only a single FPageBin per element size (8x8, 8x16, 8x32, 8x64, 128x64)
635 // At max there should be 64 FPageBin elements
636 struct FPageBin
637 {
638 FPageBin(const FIntPoint& InElementSize);
639
640 int32 GetSubPageCount() const
641 {
642 return PageSizeInElements.X * PageSizeInElements.Y;
643 }
644
645 uint32 GetBinAllocationCount() const
646 {
647 return BinAllocations.Num();
648 }
649
650 uint32 GetSubPageFreeCount() const
651 {
652 uint32 Count = 0;
653 for (auto& BinAllocation : BinAllocations)
654 {
655 Count += BinAllocation.GetSubPageFreeCount();
656 }
657 return Count;
658 }
659
660 bool HasFreeElements() const
661 {
662 // Ideally, make a 0(1) lookup for this
663 for (auto& BinAllocation : BinAllocations)
664 {
665 if (BinAllocation.HasFreeElements())
666 {
667 return true;
668 }
669 }
670 return false;
671 }
672
673 FPageBinAllocation* GetBinAllocation()
674 {
675 // Ideally, make a 0(1) lookup for this
676 for (auto& BinAllocation : BinAllocations)
677 {
678 if (BinAllocation.HasFreeElements())
679 {
680 return &BinAllocation;
681 }
682 }
683 return nullptr;
684 }
685
686 FPageBinAllocation* AddBinAllocation(const FIntPoint& InPageCoord)
687 {
688 FPageBinAllocation& NewBinAllocation = BinAllocations.AddDefaulted_GetRef();
689 NewBinAllocation.Init(InPageCoord, PageSizeInElements);
690 return &NewBinAllocation;
691 }
692
693 // Return true if the bin is now completely empty (and can be deleted), false otherwise.
694 bool RemoveBinAllocation(const FLumenPageTableEntry& Page)
695 {
696 // Ideally, make a 0(1) lookup for this
697 for (uint32 BinAllocIt = 0, BinAllocCount = BinAllocations.Num(); BinAllocIt < BinAllocCount; ++BinAllocIt)
698 {
699 FPageBinAllocation& BinAllocation = BinAllocations[BinAllocIt];
700 if (BinAllocation.PageCoord == Page.PhysicalPageCoord)
701 {
702 const FIntPoint ElementCoord = (Page.PhysicalAtlasRect.Min - BinAllocation.PageCoord * Lumen::PhysicalPageSize) / ElementSize;
704 const bool bIsEmpty = BinAllocation.IsEmpty();
705 if (bIsEmpty)
706 {
707 BinAllocations.RemoveAtSwap(BinAllocIt);
708 }
709 return bIsEmpty;
710 }
711 }
712 check(false); // Shouldn't reach this
713 return false;
714 }
715
716 FIntPoint ElementSize = FIntPoint(0, 0);
717 FIntPoint PageSizeInElements = FIntPoint(0, 0);
718 private:
720 };
721
722 // Physical pages
723 FIntPoint AllocatePhysicalAtlasPage();
724 void FreePhysicalAtlasPage(const FIntPoint& PageCoord);
725 // Stored into a bitfield (0:free,1:used)
726 // Mapping from page coord to bit is using simple linear remapping
727 TBitArray<TInlineAllocator<32>> PhysicalPageList;
728 int32 PhysicalPageFreeCount = 0;
729 FIntPoint PageAtlasSizeInPages = FIntPoint::ZeroValue;
730
731 TArray<FPageBin> PageBins;
732
733 // Bin lookups are stored as 2D mapping (8x8 - [1-128]x[1-128])
734 // This mapping indexes PageX dim. and PageY dim.
735 // As an example, a 8x16 SubPage allocator will be stored at [3,4] (i.e., [log2(8),log2(16)] )
736 // 0 1 2 3 4 5 6 7
737 // --------------------
738 // 1 2 4 8 16 32 64 128
739 // 0 | 1
740 // 1 | 2 X
741 // 2 | 4
742 // 3 | 8 X
743 // 4 | 16
744 // 5 | 32 X
745 // 6 | 64 X
746 // 7 | 128
747 static const uint8 InvalidPageBinIndex = 0xFF;
748 typedef TStaticArray<uint8, 64u> FPageBinLookup;
749 FPageBinLookup PageBinLookup;
750 bool bInitPageBinLookup = true;
751
752 uint8 GetLookupIndex(const FIntPoint& InRes) const
753 {
756 const uint32 OutIndex = FMath::FloorLog2(InRes.X) + FMath::FloorLog2(InRes.Y) * 8u;
757 //check(OutIndex < 64u);
758 return (uint8)OutIndex;
759 }
760
761 const FPageBin* GetBin(const FIntPoint& InRes) const
762 {
763 const uint8 LookupIndex = GetLookupIndex(InRes);
764 const uint8 BinIndex = PageBinLookup[LookupIndex];
765 if (BinIndex != InvalidPageBinIndex)
766 {
767 return &PageBins[BinIndex];
768 }
769 return nullptr;
770 }
771
772 FPageBin* GetBin(const FIntPoint& InRes)
773 {
774 const uint8 LookupIndex = GetLookupIndex(InRes);
775 const uint8 BinIndex = PageBinLookup[LookupIndex];
776 if (BinIndex != InvalidPageBinIndex)
777 {
778 return &PageBins[BinIndex];
779 }
780 return nullptr;
781 }
782
783 FPageBin* GetOrAddBin(const FIntPoint& InRes)
784 {
785 const uint8 LookupIndex = GetLookupIndex(InRes);
786 const uint8 BinIndex = PageBinLookup[LookupIndex];
787 if (BinIndex == InvalidPageBinIndex)
788 {
789 PageBinLookup[LookupIndex] = PageBins.Num();
790 PageBins.Add(FPageBin(InRes));
791
792 // There can't be more than 64 PageBins, as the sub-allocation resolution within
793 // a 128x128 physical page is bound to 64 (8x8, 8x16, 8x32, ..., 128x64, 128x128).
794 check(PageBins.Num() <= 64);
795 return &PageBins.Last();
796 }
797 else
798 {
799 return &PageBins[BinIndex];
800 }
801 }
802};
803
811
813
815{
816public:
818
820 {
821 return RenderTarget;
822 }
823
824private:
825 FRDGTextureRef RenderTarget = nullptr;
826};
827
828// Unique view origin. Typically one per view, but for the case of cube captures, a single view origin is shared.
829// The advantage of sharing an origin is that Lumen scene data can be shared and updated once. In the future, we could
830// allow origins to be shared for other use cases, such as nDisplay inner frustums, or imagine a sim with a wide angle
831// view across three monitors, where the three views share an origin.
833{
834 void Init(const FViewInfo& View);
835
837 {
838 return OrthoMaxDimension == 0.0f;
839 }
840
842
846
847 // Matrix used for frustum clipping tests in Lumen. For typical views, this is set to WorldToClip, while cube captures
848 // have an omnidirectional projection, and use a trivial matrix that will pass any point as in-frustum.
851
852 float OrthoMaxDimension; // If orthographic projection, max dimension, otherwise zero
853 float LastEyeAdaptationExposure; // Shared origin views share exposure
854 float MaxTraceDistance; // Shared origin views share post process settings, which control these values
857
858 // Ideally this structure would contain a mirror of all view origin specific data, so Lumen scene updates don't end up with
859 // dependencies on FViewInfo, but there are still some code paths that pull data from the FViewInfo structure, which are messy
860 // to refactor. So this reference view is included to allow fetching an FViewInfo to send to those code paths.
861 //
862 // The first is the "GetDeferredLightParameters" utility function, which uses a bunch of data from the FViewInfo structure, which
863 // will be invariant across shared origin views in practice. This includes fields originally copied from CVars, post process
864 // settings, and projection type. In the future, we could add an API variation that takes those all values as loose parameters.
865 //
866 // The View uniform buffer is used to access some data assumed to be invariant for views that share an origin:
867 // View.StateFrameIndex shared origin views are created on same frame and always render together
868 // View.StateFrameIndexMod8 ""
869 // View.PreExposure shared origin views share exposure
870 // View.OneOverPreExposure ""
871 //
872 // The Substrate global uniform buffer is accessed from FViewInfo, but doesn't include any view dependent data. Looking at
873 // InitialiseSubstrateViewData, it uses SceneTexturesConfig.Extent (as opposed to a view rect), and View.GetShaderPlatform().
874 // The Substrate uniforms aren't initialized until mid render, while the view origin is created early in render. We could
875 // copy those into the Lumen view origin later, but it works well enough to grab it from the view when it's needed.
876 //
877 // Messier are the uses of FViewInfo in FDeferredShadingSceneRenderer::RenderDirectLightingForLumenScene, where view specific
878 // forward lighting data, volumetric cloud shadows, ray tracing TLAS, miscellaneous post process settings, shader map, view
879 // family, feature level, and FScene are referenced. Basically a ton of stuff. To share all that, we probably need to refactor
880 // things so there is a formal concept of shared origin views (FViewSharedOrigin?) at a higher level in the scene renderer
881 // itself. Then we could pull all of the above into that structure. But that goes well beyond the scope of adding Lumen support
882 // for cube maps, which is the immediate goal.
883 //
884 // There may be rendering artifacts with forward lighting, volumetric cloud shadows, and ray tracing, given that the code that
885 // generates those may not be completely shared origin view friendly. Forward lighting pulls in lights from the frustum, so that
886 // definitely seems like it should be modified to take into account the frustums of all shared origin views. It's less clear if
887 // volumetric cloud shadows and ray tracing are view direction or just view origin aware (offhand, they look origin aware, but I
888 // haven't done a deep dive).
889 //
891};
892
893// Temporaries valid only in a single frame
895{
897
898 // Current frame's buffers for writing feedback
900
906
914
923
926
929
931
935
937 bool bReallocateAtlas = false;
938
940
942
943 // Targets shared per view, but can't be shared per pass
947
960
970
973
977
978 // Optional debug data enabled with stats visualization
979 // Contains cursor point cards information
981};
982
983// Tracks scene-wide lighting state whose changes we should propagate quickly by flushing various lighting caches
1000
1002{
1003public:
1004 // Clear all cached state like surface cache atlas. Including extra state like final lighting. Used only for debugging.
1006
1007 // Whether we allow sharing cards between primitive groups
1008 bool bAllowCardSharing = false;
1009 // Whether we allow cards to downsample from self when lowering resolutions
1011
1012 // Whether we should re-upload entire Lumen Scene on next update
1014
1019
1020 // Primitive groups
1025
1026 // Maps RayTracingGroupId to a specific Primitive Group Index
1028
1029 // List of landscape primitives added to the Lumen scene
1031
1032 // Mesh Cards
1039
1040 // Heightfields
1045
1046 // Page Table
1051
1052 // GPUScene instance index to MeshCards mapping
1056
1057 // Single card tile per FLumenPageTableEntry. Used for various atlas update operations
1060
1061 // Last frame index when this page was sampled from. Used to controlling page update rate
1064
1065 // Captured from the triangle scene
1071
1072 // Generated
1078
1079 // Radiosity probes
1085
1086 // Direct lighting denoising
1089
1090 // Lumen Scene readback for handling GPU driven updates
1092
1093 // Virtual surface cache feedback
1095
1097
1102
1108
1109 // Scale factor to adjust atlas size for tuning memory usage
1111
1112 // Multi-view multi-GPU information
1113 bool bViewSpecific = false;
1114#if WITH_MGPU
1115 bool bViewSpecificMaskInitialized = false;
1117#endif
1118
1119 FLumenSceneData(EShaderPlatform ShaderPlatform, EWorldType::Type WorldType);
1122
1123 void UpdatePrimitiveInstanceOffset(int32 PrimitiveIndex);
1124 void ResetAndConsolidate();
1125
1126 void AddMeshCards(int32 PrimitiveGroupIndex);
1127 void UpdateMeshCards(const FMatrix& LocalToWorld, int32 MeshCardsIndex, const FMeshCardsBuildData& MeshCardsBuildData);
1128 void InvalidateSurfaceCache(FRHIGPUMask GPUMask, int32 MeshCardsIndex);
1129 void RemoveMeshCards(int32 PrimitiveGroupIndex, bool bUpdateCullingInfo = true);
1130
1131 void RemoveCardFromAtlas(int32 CardIndex);
1132
1134 {
1135 return PendingAddOperations.Num() > 0 || PendingUpdateOperations.Num() > 0 || PendingRemoveOperations.Num() > 0;
1136 }
1137
1139 bool UpdateAtlasSize();
1140 void ReleaseAtlas();
1141 void RemoveAllMeshCards();
1143
1145
1147 void ReallocVirtualSurface(FLumenCard& Card, int32 CardIndex, int32 ResLevel, bool bLockPages);
1149
1151
1152 bool IsPhysicalSpaceAvailable(const FLumenCard& Card, int32 ResLevel, bool bSinglePage) const
1153 {
1154 return SurfaceCacheAllocator.IsSpaceAvailable(Card, ResLevel, bSinglePage);
1155 }
1156
1157 void ForceEvictEntireCache();
1159
1162
1163 const FLumenPageTableEntry& GetPageTableEntry(int32 PageTableIndex) const { return PageTable[PageTableIndex]; }
1164 FLumenPageTableEntry& GetPageTableEntry(int32 PageTableIndex) { return PageTable[PageTableIndex]; }
1165 void MapSurfaceCachePage(const FLumenSurfaceMipMap& MipMap, int32 PageTableIndex, FRHIGPUMask GPUMask);
1166 int32 GetNumCardPages() const { return PageTable.Num(); }
1167 FIntPoint GetPhysicalAtlasSize() const { return PhysicalAtlasSize; }
1173 ESurfaceCacheCompression GetPhysicalAtlasCompression() const { return PhysicalAtlasCompression; }
1174
1176 {
1177 const uint32* Data = nullptr;
1179 };
1180
1182
1184 const FViewInfo& MainView,
1187 FLumenCardRenderer& LumenCardRenderer,
1188 FRHIGPUMask GPUMask,
1189 const TArray<FSurfaceCacheRequest, SceneRenderingAllocator>& SurfaceCacheRequests);
1190
1191 int32 GetMeshCardsIndex(const FPrimitiveSceneInfo* PrimitiveSceneInfo, int32 InstanceIndex) const;
1192
1197
1198 // Copy initial data from default Lumen scene data to a view specific Lumen scene data
1200#if WITH_MGPU
1202#endif
1203
1204 uint64 GetGPUSizeBytes(bool bLogSizes) const;
1205
1206private:
1207
1208 void AddMeshCardsFromBuildData(int32 PrimitiveGroupIndex, const FMatrix& LocalToWorld, const FMeshCardsBuildData& MeshCardsBuildData, FLumenPrimitiveGroup& PrimitiveGroup);
1209
1210 void UnmapSurfaceCachePage(bool bLocked, FLumenPageTableEntry& Page, int32 PageIndex);
1211 bool RecaptureCardPage(const FViewInfo& MainView, FLumenCardRenderer& LumenCardRenderer, FLumenSurfaceCacheAllocator& CaptureAtlasAllocator, FRHIGPUMask GPUMask, int32 PageTableIndex);
1212
1213 // Try to find a card with the same ID and has a MinAllocatedResLevel >= ResLevel
1214 const FLumenCardSharingInfo* FindMatchingCardForCopy(const FLumenCardId& CardId, uint32 ResLevel) const;
1215
1216 // Called per frame right after we are done querying CardSharingInfoMap
1217 void FlushPendingCardSharingInfos();
1218
1219 // Frame index used to time-splice various surface cache update operations
1220 // 0 is a special value, and means that surface contains default data
1221 uint32 SurfaceCacheUpdateFrameIndex = 1;
1222
1223 // Used to detect change in data format
1224 EPixelFormat CurrentLightingDataFormat = PF_Unknown;
1225 float CurrentCachedLightingPreExposure = 0.0f;
1226
1227 // Virtual surface cache page table
1228 FIntPoint PhysicalAtlasSize = FIntPoint(0, 0);
1229 ESurfaceCacheCompression PhysicalAtlasCompression;
1230 FLumenSurfaceCacheAllocator SurfaceCacheAllocator;
1231
1232 // List of high res allocated physical pages which can be deallocated on demand, ordered by last used frame
1233 // FeedbackFrameIndex, PageTableIndex
1234 FBinaryHeap<uint32, uint32> UnlockedAllocationHeap;
1235
1236 // List of pages for forced recapture, ordered by request frame index
1237 // RequestSurfaceCacheFrameIndex, PageTableIndex
1238 FBinaryHeap<uint32, uint32> PagesToRecaptureHeap[MAX_NUM_GPUS];
1239
1240 // List of pages ordered by last captured frame used to periodically recapture pages, or for multi-GPU scenarios,
1241 // to track that a page is uninitialized on a particular GPU, and needs to be captured for the first time (indicated
1242 // by a CapturedSurfaceCacheFrameIndex value of zero).
1243 // CapturedSurfaceCacheFrameIndex, PageTableIndex
1244 FBinaryHeap<uint32, uint32> LastCapturedPageHeap[MAX_NUM_GPUS];
1245
1246 // Data structures needed to support sharing cards between primitive groups
1248 TArray<FLumenCardSharingInfoPendingRemove> PendingRemoveCardSharingInfos;
1249 TArray<FLumenCardSharingInfoPendingAdd> PendingAddCardSharingInfos;
1250};
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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
void Init()
Definition LockFreeList.h:4
ESurfaceCacheCompression
Definition LumenSceneData.h:805
ESurfaceCacheCompression GetSurfaceCacheCompression()
Definition LumenSurfaceCache.cpp:57
uint32 GetTypeHash(const FLumenCardId &Key)
Definition LumenSceneData.h:164
ELumenReflectionPass
Definition LumenSceneData.h:24
FInt32Point FIntPoint
Definition MathFwd.h:124
ELumenCardDilationMode
Definition MeshCardRepresentation.h:17
#define MAX_NUM_GPUS
Definition MultiGPU.h:25
#define MAX_uint8
Definition NumericLimits.h:19
EPixelFormat
Definition PixelFormat.h:16
@ PF_Unknown
Definition PixelFormat.h:17
EShaderPlatform
Definition RHIShaderPlatform.h:11
ERDGTextureFlags
Definition RenderGraphDefinitions.h:185
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define SHADER_PARAMETER_RDG_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1752
#define SHADER_PARAMETER_TEXTURE(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1708
#define END_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1669
#define SHADER_PARAMETER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1720
#define SHADER_PARAMETER_SAMPLER(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1740
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define BEGIN_GLOBAL_SHADER_PARAMETER_STRUCT
Definition ShaderParameterMacros.h:1663
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
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 RobinHoodHashTable.h:72
bool IsValid() const
Definition RobinHoodHashTable.h:82
Definition RobinHoodHashTable.h:1135
Definition BinaryHeap.h:20
Definition ScenePrivate.h:2071
Definition MeshCardBuild.h:23
Definition DeferredShadingRenderer.h:88
Definition LumenSceneData.h:274
float ResolutionScale
Definition LumenSceneData.h:303
bool bVisible
Definition LumenSceneData.h:283
uint8 AxisAlignedDirectionIndex
Definition LumenSceneData.h:302
FLumenSurfaceMipMap SurfaceMipMaps[Lumen::NumResLevels]
Definition LumenSceneData.h:297
void SetTransform(const FMatrix &LocalToWorld, const FLumenMeshCards &MeshCards)
Definition LumenMeshCards.cpp:1210
void GetSurfaceStats(const TSparseSpanArray< FLumenPageTableEntry > &PageTable, FSurfaceStats &Stats) const
Definition LumenMeshCards.cpp:1290
ELumenCardDilationMode DilationMode
Definition LumenSceneData.h:287
FLumenSurfaceMipMap & GetMipMap(int32 ResLevel)
Definition LumenSceneData.h:341
int32 IndexInMeshCards
Definition LumenSceneData.h:300
bool IsAllocated() const
Definition LumenSceneData.h:325
FLumenCardOBBf MeshCardsOBB
Definition LumenSceneData.h:281
int32 MeshCardsIndex
Definition LumenSceneData.h:299
FLumenCard()
Definition LumenMeshCards.cpp:1161
void GetMipMapDesc(int32 ResLevel, FLumenMipMapDesc &Desc) const
Definition LumenMeshCards.cpp:1255
const FLumenSurfaceMipMap & GetMipMap(int32 ResLevel) const
Definition LumenSceneData.h:351
bool bHeightfield
Definition LumenSceneData.h:284
uint8 MinAllocatedResLevel
Definition LumenSceneData.h:290
FLumenCardId CardSharingId
Definition LumenSceneData.h:308
bool bAxisXFlipped
Definition LumenSceneData.h:285
FLumenCardOBBd WorldOBB
Definition LumenSceneData.h:280
void UpdateMinMaxAllocatedLevel()
Definition LumenMeshCards.cpp:1221
uint8 IndexInBuildData
Definition LumenSceneData.h:301
~FLumenCard()
Definition LumenMeshCards.cpp:1170
uint8 MaxAllocatedResLevel
Definition LumenSceneData.h:291
FLumenCardOBBf LocalOBB
Definition LumenSceneData.h:279
FIntPoint ResLevelToResLevelXYBias() const
Definition LumenMeshCards.cpp:1236
uint8 DesiredLockedResLevel
Definition LumenSceneData.h:294
int32 CardSharingListIndex
Definition LumenSceneData.h:309
float CardAspect
Definition LumenSceneData.h:306
Definition LumenSceneData.h:985
bool bDirectionalLightValid
Definition LumenSceneData.h:989
FLinearColor SkyLightColor
Definition LumenSceneData.h:988
FLumenGlobalLightingState()
Definition LumenSceneData.h:992
FLinearColor DirectionalLightColor
Definition LumenSceneData.h:987
bool bSkyLightValid
Definition LumenSceneData.h:990
Definition LumenMeshCards.h:29
Definition LumenSceneData.h:360
const FPrimitiveSceneInfo * Primitive
Definition LumenSceneData.h:366
int32 PrimitiveIndex
Definition LumenSceneData.h:369
TArray< int32, TInlineAllocator< 1 > > LumenPrimitiveGroupIndices
Definition LumenSceneData.h:370
Definition LumenSceneData.h:375
uint8 bFarField
Definition LumenSceneData.h:389
bool HasMergedInstances() const
Definition LumenScene.cpp:326
Experimental::FHashElementId RayTracingGroupMapElementId
Definition LumenSceneData.h:385
uint8 bEmissiveLightSource
Definition LumenSceneData.h:391
float CardResolutionScale
Definition LumenSceneData.h:386
int32 PrimitiveInstanceIndex
Definition LumenSceneData.h:378
int32 HeightfieldIndex
Definition LumenSceneData.h:380
uint8 bValidMeshCards
Definition LumenSceneData.h:388
TArray< FPrimitiveSceneInfo *, TInlineAllocator< 1 > > Primitives
Definition LumenSceneData.h:377
bool HasMergedPrimitives() const
Definition LumenSceneData.h:401
uint8 bHeightfield
Definition LumenSceneData.h:390
int32 MeshCardsIndex
Definition LumenSceneData.h:379
uint8 bLandscape
Definition LumenSceneData.h:395
int32 PrimitiveCullingInfoIndex
Definition LumenSceneData.h:381
uint8 LightingChannelMask
Definition LumenSceneData.h:397
int32 InstanceCullingInfoIndex
Definition LumenSceneData.h:382
uint32 CustomId
Definition LumenSceneData.h:383
uint8 bOpaqueOrMasked
Definition LumenSceneData.h:392
Definition LumenSceneData.h:1002
FUniqueIndexList PrimitivesToUpdateMeshCards
Definition LumenSceneData.h:1053
void InvalidateSurfaceCache(FRHIGPUMask GPUMask, int32 MeshCardsIndex)
Definition LumenMeshCards.cpp:1116
bool bViewSpecific
Definition LumenSceneData.h:1113
bool bTrackAllPrimitives
Definition LumenSceneData.h:1103
bool bAllowCardDownsampleFromSelf
Definition LumenSceneData.h:1010
int32 NumMeshCardsToAdd
Definition LumenSceneData.h:1099
FUniqueIndexList HeightfieldIndicesToUpdateInBuffer
Definition LumenSceneData.h:1041
bool IsPhysicalSpaceAvailable(const FLumenCard &Card, int32 ResLevel, bool bSinglePage) const
Definition LumenSceneData.h:1152
void ReallocVirtualSurface(FLumenCard &Card, int32 CardIndex, int32 ResLevel, bool bLockPages)
Definition LumenScene.cpp:1548
TRefCountPtr< IPooledRenderTarget > RadiosityProbeSHBlueAtlas
Definition LumenSceneData.h:1084
TSparseSpanArray< FLumenHeightfield > Heightfields
Definition LumenSceneData.h:1042
void RemovePrimitiveGroupCullingInfo(FLumenPrimitiveGroup &PrimitiveGroup)
Definition LumenMeshCards.cpp:614
void UpdateSurfaceCacheFeedback(FFeedbackData Data, const TArray< FVector, TInlineAllocator< 2 > > &LumenSceneCameraOrigins, TArray< FSurfaceCacheRequest > &MeshCardsUpdate, const FViewFamilyInfo &ViewFamily, int32 RequestHistogram[Lumen::NumDistanceBuckets])
Definition LumenSurfaceCacheFeedback.cpp:301
TRefCountPtr< IPooledRenderTarget > RadiosityProbeSHRedAtlas
Definition LumenSceneData.h:1082
FRDGAsyncScatterUploadBuffer PrimitiveGroupUploadBuffer
Definition LumenSceneData.h:1024
FIntPoint GetCardCaptureAtlasSizeInPages() const
Definition LumenSceneRendering.cpp:2359
FLumenPrimitiveGroupCullingInfo & GetPrimitiveGroupCullingInfo(const FLumenPrimitiveGroup &PrimitiveGroup, bool bForcePrimitiveLevel=false)
Definition LumenMeshCards.cpp:596
FRDGAsyncScatterUploadBuffer HeightfieldUploadBuffer
Definition LumenSceneData.h:1044
void AddMeshCards(int32 PrimitiveGroupIndex)
Definition LumenMeshCards.cpp:848
TSparseSpanArray< FLumenCard > Cards
Definition LumenSceneData.h:1015
FUniqueIndexList CardIndicesToUpdateInBuffer
Definition LumenSceneData.h:1016
TRefCountPtr< IPooledRenderTarget > FinalLightingAtlas
Definition LumenSceneData.h:1076
bool bReuploadSceneRequest
Definition LumenSceneData.h:1013
bool bFinalLightingAtlasContentsValid
Definition LumenSceneData.h:1098
TRefCountPtr< FRDGPooledBuffer > CardPageLastUsedBuffer
Definition LumenSceneData.h:1062
FIntPoint GetPhysicalAtlasSize() const
Definition LumenSceneData.h:1167
TRefCountPtr< FRDGPooledBuffer > CardBuffer
Definition LumenSceneData.h:1017
void UpdateCardMipMapHierarchy(FLumenCard &Card)
Definition LumenScene.cpp:1717
void UploadPageTable(FRDGBuilder &GraphBuilder, FRDGScatterUploadBuilder &UploadBuilder, FLumenSceneFrameTemporaries &FrameTemporaries)
Definition LumenScene.cpp:519
void UpdatePrimitiveGroupCullingInfo(const FLumenPrimitiveGroup &PrimitiveGroup, const FRenderBounds &NewWorldBounds, bool bForcePrimitiveLevel=false)
Definition LumenMeshCards.cpp:646
FRDGAsyncScatterUploadBuffer CardUploadBuffer
Definition LumenSceneData.h:1018
FLumenPageTableEntry & GetPageTableEntry(int32 PageTableIndex)
Definition LumenSceneData.h:1164
TSparseSpanArray< FLumenMeshCards > MeshCards
Definition LumenSceneData.h:1034
void RemoveMeshCards(int32 PrimitiveGroupIndex, bool bUpdateCullingInfo=true)
Definition LumenMeshCards.cpp:1051
TSet< FPrimitiveSceneInfo * > PendingUpdateOperations
Definition LumenSceneData.h:1105
TRefCountPtr< FRDGPooledBuffer > PageTableBuffer
Definition LumenSceneData.h:1049
~FLumenSceneData()
Definition LumenScene.cpp:671
TSparseSpanArray< FLumenPrimitiveGroupCullingInfo > InstanceCullingInfos
Definition LumenSceneData.h:1035
void IncrementSurfaceCacheUpdateFrameIndex()
Definition LumenSceneRendering.cpp:346
FRDGAsyncScatterUploadBuffer PageTableUploadBuffer
Definition LumenSceneData.h:1050
void ReleaseAtlas()
Definition LumenScene.cpp:1343
TRefCountPtr< IPooledRenderTarget > RadiosityProbeSHGreenAtlas
Definition LumenSceneData.h:1083
TRefCountPtr< IPooledRenderTarget > DiffuseLightingAndSecondMomentHistoryAtlas
Definition LumenSceneData.h:1087
TArray< FLumenPrimitiveGroupRemoveInfo > PendingRemoveOperations
Definition LumenSceneData.h:1107
FIntPoint GetCardCaptureAtlasSize() const
Definition LumenSceneRendering.cpp:2388
TRefCountPtr< IPooledRenderTarget > OpacityAtlas
Definition LumenSceneData.h:1067
TRefCountPtr< IPooledRenderTarget > NumFramesAccumulatedHistoryAtlas
Definition LumenSceneData.h:1088
void ForceEvictEntireCache()
Definition LumenScene.cpp:1954
uint32 GetSurfaceCacheUpdateFrameIndex() const
Definition LumenSceneRendering.cpp:341
uint64 GetGPUSizeBytes(bool bLogSizes) const
Definition SceneViewState.cpp:292
FUniqueIndexList MeshCardsIndicesToUpdateInBuffer
Definition LumenSceneData.h:1033
FLumenSurfaceCacheFeedback SurfaceCacheFeedback
Definition LumenSceneData.h:1094
uint32 GetCardCaptureRefreshNumTexels() const
Definition LumenSceneRendering.cpp:2393
int32 NumHiResPagesToAdd
Definition LumenSceneData.h:1101
void FillFrameTemporaries(FRDGBuilder &GraphBuilder, FLumenSceneFrameTemporaries &FrameTemporaries)
Definition LumenSceneRendering.cpp:1926
TRefCountPtr< IPooledRenderTarget > AlbedoAtlas
Definition LumenSceneData.h:1066
Experimental::TRobinHoodHashMap< int32, int32 > RayTracingGroups
Definition LumenSceneData.h:1027
bool HasPendingOperations() const
Definition LumenSceneData.h:1133
TRefCountPtr< IPooledRenderTarget > NormalAtlas
Definition LumenSceneData.h:1068
float SurfaceCacheResolution
Definition LumenSceneData.h:1110
TRefCountPtr< FRDGPooledBuffer > TileShadowDownsampleFactorAtlas
Definition LumenSceneData.h:1077
int32 GetMeshCardsIndex(const FPrimitiveSceneInfo *PrimitiveSceneInfo, int32 InstanceIndex) const
Definition LumenMeshCards.cpp:582
void RemoveAllMeshCards()
Definition LumenScene.cpp:1370
bool bAllowCardSharing
Definition LumenSceneData.h:1008
TArray< const FPrimitiveSceneInfo * > LandscapePrimitives
Definition LumenSceneData.h:1030
void CopyInitialData(const FLumenSceneData &SourceSceneData)
Definition LumenScene.cpp:1788
void MapSurfaceCachePage(const FLumenSurfaceMipMap &MipMap, int32 PageTableIndex, FRHIGPUMask GPUMask)
Definition LumenScene.cpp:1411
bool bDebugClearAllCachedState
Definition LumenSceneData.h:1005
int32 GetNumCardPages() const
Definition LumenSceneData.h:1166
void UpdateMeshCards(const FMatrix &LocalToWorld, int32 MeshCardsIndex, const FMeshCardsBuildData &MeshCardsBuildData)
Definition LumenMeshCards.cpp:1096
TRefCountPtr< FRDGPooledBuffer > CardPageHighResLastUsedBuffer
Definition LumenSceneData.h:1063
FRDGAsyncScatterUploadBuffer CardPageUploadBuffer
Definition LumenSceneData.h:1059
TRefCountPtr< IPooledRenderTarget > RadiosityTraceHitDistanceAtlas
Definition LumenSceneData.h:1081
const FLumenPageTableEntry & GetPageTableEntry(int32 PageTableIndex) const
Definition LumenSceneData.h:1163
TRefCountPtr< IPooledRenderTarget > EmissiveAtlas
Definition LumenSceneData.h:1069
TChunkedSparseArray< FLumenPrimitiveGroup > PrimitiveGroups
Definition LumenSceneData.h:1022
TArray< int32 > PageTableIndicesToUpdateInBuffer
Definition LumenSceneData.h:1048
void FreeVirtualSurface(FLumenCard &Card, uint8 FromResLevel, uint8 ToResLevel)
Definition LumenScene.cpp:1666
void AllocateCardAtlases(FRDGBuilder &GraphBuilder, FLumenSceneFrameTemporaries &FrameTemporaries, const FSceneViewFamily *ViewFamily)
Definition LumenSurfaceCache.cpp:238
TSet< FPrimitiveSceneInfo * > PendingAddOperations
Definition LumenSceneData.h:1104
TSparseArray< FLumenPrimitiveGroupCullingInfo > PrimitiveCullingInfos
Definition LumenSceneData.h:1036
int32 NumLockedCardsToUpdate
Definition LumenSceneData.h:1100
FLumenGlobalLightingState GlobalLightingState
Definition LumenSceneData.h:1096
FRDGAsyncScatterUploadBuffer SceneInstanceIndexToMeshCardsIndexUploadBuffer
Definition LumenSceneData.h:1055
TRefCountPtr< IPooledRenderTarget > RadiosityTraceRadianceAtlas
Definition LumenSceneData.h:1080
void ProcessLumenSurfaceCacheRequests(const FViewInfo &MainView, float MaxCardUpdateDistanceFromCamera, int32 MaxTileCapturesPerFrame, FLumenCardRenderer &LumenCardRenderer, FRHIGPUMask GPUMask, const TArray< FSurfaceCacheRequest, SceneRenderingAllocator > &SurfaceCacheRequests)
Definition LumenSceneRendering.cpp:876
ESurfaceCacheCompression GetPhysicalAtlasCompression() const
Definition LumenSceneData.h:1173
void ResetAndConsolidate()
Definition LumenScene.cpp:845
TRefCountPtr< FRDGPooledBuffer > CardPageBuffer
Definition LumenSceneData.h:1058
TRefCountPtr< IPooledRenderTarget > RadiosityNumFramesAccumulatedAtlas
Definition LumenSceneData.h:1075
TSparseSpanArray< FLumenPageTableEntry > PageTable
Definition LumenSceneData.h:1047
void RemoveCardFromAtlas(int32 CardIndex)
Definition LumenMeshCards.cpp:1153
bool EvictOldestAllocation(uint32 MaxFramesSinceLastUsed, TSparseUniqueList< int32, SceneRenderingAllocator > &DirtyCards)
Definition LumenScene.cpp:1970
TRefCountPtr< IPooledRenderTarget > DepthAtlas
Definition LumenSceneData.h:1070
uint32 GetCardCaptureRefreshNumPages() const
Definition LumenSceneRendering.cpp:2406
TRefCountPtr< FRDGPooledBuffer > SceneInstanceIndexToMeshCardsIndexBuffer
Definition LumenSceneData.h:1054
TRefCountPtr< FRDGPooledBuffer > HeightfieldBuffer
Definition LumenSceneData.h:1043
FUniqueIndexList PrimitiveGroupIndicesToUpdateInBuffer
Definition LumenSceneData.h:1021
void UpdatePrimitiveInstanceOffset(int32 PrimitiveIndex)
Definition LumenScene.cpp:865
FRDGAsyncScatterUploadBuffer MeshCardsUploadBuffer
Definition LumenSceneData.h:1038
FIntPoint GetRadiosityAtlasSize() const
Definition LumenRadiosity.cpp:268
FLumenSceneReadback SceneReadback
Definition LumenSceneData.h:1091
TRefCountPtr< IPooledRenderTarget > DirectLightingAtlas
Definition LumenSceneData.h:1073
TSet< FPrimitiveSceneInfo * > PendingSurfaceCacheInvalidationOperations
Definition LumenSceneData.h:1106
TRefCountPtr< IPooledRenderTarget > IndirectLightingAtlas
Definition LumenSceneData.h:1074
TRefCountPtr< FRDGPooledBuffer > PrimitiveGroupBuffer
Definition LumenSceneData.h:1023
bool UpdateAtlasSize()
Definition LumenScene.cpp:1388
void DumpStats(const FDistanceFieldSceneData &DistanceFieldSceneData, bool bDumpMeshDistanceFields, bool bDumpPrimitiveCullingInfos, bool bDumpPrimitiveGroups)
Definition LumenScene.cpp:1995
TRefCountPtr< FRDGPooledBuffer > MeshCardsBuffer
Definition LumenSceneData.h:1037
Definition LumenSceneGPUDrivenUpdate.h:14
Definition LumenSceneData.h:815
FRDGTextureRef CreateSharedRT(FRDGBuilder &Builder, const FRDGTextureDesc &Desc, FIntPoint VisibleExtent, const TCHAR *Name, ERDGTextureFlags Flags=ERDGTextureFlags::None)
Definition LumenSceneRendering.cpp:3136
FRDGTextureRef GetRenderTarget() const
Definition LumenSceneData.h:819
Definition LumenSceneData.h:521
void Allocate(const FLumenPageTableEntry &Page, FAllocation &Allocation)
Definition LumenScene.cpp:389
bool IsSpaceAvailable(const FLumenCard &Card, int32 ResLevel, bool bSinglePage) const
Definition LumenScene.cpp:445
void GetStats(FStats &Stats) const
Definition LumenScene.cpp:470
Definition LumenSurfaceCacheFeedback.h:26
Definition LumenSurfaceCacheFeedback.h:20
Definition LumenViewState.h:327
Definition MeshCardBuild.h:94
Definition PrimitiveSceneInfo.h:266
Definition UnifiedBuffer.h:371
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition UnifiedBuffer.h:391
Definition RenderGraphResources.h:571
Definition RHIGPUReadback.h:116
Definition SceneView.h:2212
Definition ScenePrivate.h:2875
Definition LumenSceneData.h:493
uint16 ResLevel
Definition LumenSceneData.h:496
uint16 LocalPageIndex
Definition LumenSceneData.h:497
float Distance
Definition LumenSceneData.h:498
int32 CardIndex
Definition LumenSceneData.h:495
bool IsLockedMip() const
Definition LumenSceneData.h:500
Definition SceneRendering.h:1970
Definition SceneRendering.h:1132
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT ElementType & Last(SizeType IndexFromTheEnd=0) UE_LIFETIMEBOUND
Definition Array.h:1263
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition BitArray.h:350
Definition LumenSparseSpanArray.h:210
Definition UnrealString.h.inl:34
Definition RenderGraphResources.h:251
Definition RefCounting.h:454
Definition ContainerAllocationPolicies.h:894
Definition SparseArray.h:524
Definition LumenSparseSpanArray.h:16
int32 Num() const
Definition LumenSparseSpanArray.h:18
Definition StaticArray.h:26
Type
Definition EngineTypes.h:1264
Definition DeferredShadingRenderer.cpp:316
uint32 GetFeedbackBufferSize(const FViewFamilyInfo &ViewFamily)
Definition LumenSurfaceCacheFeedback.cpp:68
constexpr uint32 MinResLevel
Definition Lumen.h:41
constexpr uint32 NumResLevels
Definition Lumen.h:44
bool SetLandscapeHeightSamplingParameters(const FVector &LumenSceneViewOrigin, const FScene *Scene, FLumenLandscapeHeightSamplingParameters &OutParameters)
Definition LumenScene.cpp:111
constexpr uint32 NumDistanceBuckets
Definition Lumen.h:47
constexpr uint32 PhysicalPageSize
Definition Lumen.h:38
constexpr uint32 VirtualPageSize
Definition Lumen.h:39
constexpr uint32 FeedbackBufferElementStride
Definition LumenSceneData.h:83
uint32 GetCompactedFeedbackBufferSize()
Definition LumenSurfaceCacheFeedback.cpp:76
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition DoubleFloat.h:75
Definition Color.h:48
static CORE_API const FLinearColor Black
Definition Color.h:458
Definition LumenSceneData.h:207
FLumenCardId CardId
Definition LumenSceneData.h:208
uint8 MinAllocatedResLevel
Definition LumenSceneData.h:210
FLumenCardSharingInfoPendingAdd(FLumenCardId InCardId, int32 InCardIndex, uint8 InMinAllocatedResLevel, bool bInAxisXFlipped)
Definition LumenSceneData.h:215
bool bAxisXFlipped
Definition LumenSceneData.h:211
bool operator<(const FLumenCardSharingInfoPendingAdd &Other) const
Definition LumenSceneData.h:222
int32 CardIndex
Definition LumenSceneData.h:209
Definition LumenSceneData.h:185
FLumenCardSharingInfoPendingRemove(FLumenCardId InCardId, int32 InCardSharingListIndex)
Definition LumenSceneData.h:191
FLumenCardId CardId
Definition LumenSceneData.h:186
int32 CardSharingListIndex
Definition LumenSceneData.h:187
bool operator<(const FLumenCardSharingInfoPendingRemove &Other) const
Definition LumenSceneData.h:196
Definition LumenSceneData.h:170
FLumenCardSharingInfo(uint32 InCardIndex, uint8 InMinAllocatedResLevel, bool bInAxisXFlipped)
Definition LumenSceneData.h:177
uint32 MinAllocatedResLevel
Definition LumenSceneData.h:172
FLumenCardSharingInfo()=default
uint32 CardIndex
Definition LumenSceneData.h:171
uint32 bAxisXFlipped
Definition LumenSceneData.h:173
Definition LumenSceneData.h:331
uint32 DroppedResLevels
Definition LumenSceneData.h:336
uint32 NumVirtualTexels
Definition LumenSceneData.h:332
uint32 NumPhysicalTexels
Definition LumenSceneData.h:334
uint32 NumLockedVirtualTexels
Definition LumenSceneData.h:333
uint32 NumLockedPhysicalTexels
Definition LumenSceneData.h:335
Definition LumenSceneData.h:264
uint16 ResLevelY
Definition LumenSceneData.h:269
FIntPoint PageResolution
Definition LumenSceneData.h:267
uint16 ResLevelX
Definition LumenSceneData.h:268
FIntPoint SizeInPages
Definition LumenSceneData.h:266
FIntPoint Resolution
Definition LumenSceneData.h:265
bool bSubAllocation
Definition LumenSceneData.h:270
Definition LumenSceneData.h:450
FIntPoint SubAllocationSize
Definition LumenSceneData.h:469
uint32 SamplePageIndex
Definition LumenSceneData.h:458
uint32 GetNumVirtualTexels() const
Definition LumenSceneData.h:481
uint16 SampleCardResLevelY
Definition LumenSceneData.h:462
uint8 ResLevel
Definition LumenSceneData.h:466
uint16 SampleAtlasBiasX
Definition LumenSceneData.h:459
bool IsSubAllocation() const
Definition LumenSceneData.h:471
FIntPoint PhysicalPageCoord
Definition LumenSceneData.h:452
FIntRect PhysicalAtlasRect
Definition LumenSceneData.h:455
uint16 SampleCardResLevelX
Definition LumenSceneData.h:461
uint32 GetNumPhysicalTexels() const
Definition LumenSceneData.h:486
FVector4f CardUVRect
Definition LumenSceneData.h:467
int32 CardIndex
Definition LumenSceneData.h:465
uint16 SampleAtlasBiasY
Definition LumenSceneData.h:460
bool IsMapped() const
Definition LumenSceneData.h:476
Definition LumenSceneData.h:408
uint32 bValidMeshCards
Definition LumenSceneData.h:410
FLumenPrimitiveGroupCullingInfo(const FRenderBounds &Bounds, const FLumenPrimitiveGroup &PrimitiveGroup, int32 InPrimitiveGroupIndex)
Definition LumenSceneData.h:426
int32 PrimitiveGroupIndex
Definition LumenSceneData.h:418
uint32 bVisible
Definition LumenSceneData.h:409
FRenderBounds WorldSpaceBoundingBox
Definition LumenSceneData.h:422
uint32 bOpaqueOrMasked
Definition LumenSceneData.h:413
uint32 NumInstances
Definition LumenSceneData.h:414
uint32 bFarField
Definition LumenSceneData.h:411
FLumenPrimitiveGroupCullingInfo(const FRenderBounds &Bounds, int32 InInstanceCullingInfoOffset, uint32 InNumInstances, bool bInFarField)
Definition LumenSceneData.h:437
int32 InstanceCullingInfoOffset
Definition LumenSceneData.h:419
uint32 bEmissiveLightSource
Definition LumenSceneData.h:412
Definition LumenSceneData.h:1176
const uint32 * Data
Definition LumenSceneData.h:1177
uint32 NumElements
Definition LumenSceneData.h:1178
Definition LumenSceneData.h:895
FLumenSharedRT DownsampledSceneDepth2x2
Definition LumenSceneData.h:968
FRDGBufferSRV * HeightfieldBufferSRV
Definition LumenSceneData.h:917
FRDGBufferUAV * CardPageHighResLastUsedBufferUAV
Definition LumenSceneData.h:927
FRDGTextureRef DirectLightingAtlas
Definition LumenSceneData.h:907
FRDGBufferSRVRef DebugData
Definition LumenSceneData.h:980
FRDGTextureRef FinalLightingAtlas
Definition LumenSceneData.h:910
FRDGTextureRef DepthAtlas
Definition LumenSceneData.h:905
FRDGBufferSRV * CardBufferSRV
Definition LumenSceneData.h:915
FRDGTextureRef NumFramesAccumulatedHistoryAtlas
Definition LumenSceneData.h:913
FRDGBufferSRV * CardPageBufferSRV
Definition LumenSceneData.h:921
UE::Tasks::FTask UpdateSceneTask
Definition LumenSceneData.h:936
FRDGTextureRef RadiosityNumFramesAccumulatedAtlas
Definition LumenSceneData.h:909
FLumenSharedRT MegaLightsTileBitmask
Definition LumenSceneData.h:972
FLumenSharedRT DiffuseIndirect
Definition LumenSceneData.h:948
FLumenSharedRT NewHistoryFastUpdateMode_NumFramesAccumulated
Definition LumenSceneData.h:956
FRDGTextureRef NormalAtlas
Definition LumenSceneData.h:903
FRDGBufferRef TileShadowDownsampleFactorAtlas
Definition LumenSceneData.h:911
FRHIGPUBufferReadback * SceneRemoveOpsReadbackBuffer
Definition LumenSceneData.h:933
FRHIGPUBufferReadback * SurfaceCacheFeedbackBuffer
Definition LumenSceneData.h:934
FRDGTextureRef DiffuseLightingAndSecondMomentHistoryAtlas
Definition LumenSceneData.h:912
FRDGBufferSRV * SceneInstanceIndexToMeshCardsIndexBufferSRV
Definition LumenSceneData.h:919
FLumenSharedRT ResolveVariance
Definition LumenSceneData.h:952
FRHIGPUBufferReadback * SceneAddOpsReadbackBuffer
Definition LumenSceneData.h:932
TRDGUniformBufferRef< FLumenCardScene > LumenCardSceneUniformBuffer
Definition LumenSceneData.h:930
FLumenSharedRT ReflectNumHistoryFrames[(uint32) ELumenReflectionPass::MAX]
Definition LumenSceneData.h:945
FRDGTextureRef OpacityAtlas
Definition LumenSceneData.h:902
FRDGBufferUAV * CardPageBufferUAV
Definition LumenSceneData.h:922
FLumenSharedRT NewDiffuseIndirect
Definition LumenSceneData.h:953
FLumenSharedRT ReservoirTraceRadiance
Definition LumenSceneData.h:962
FRDGBufferSRV * CardPageLastUsedBufferSRV
Definition LumenSceneData.h:925
FRDGBufferSRV * MeshCardsBufferSRV
Definition LumenSceneData.h:916
FLumenSharedRT NewResolveVariance
Definition LumenSceneData.h:957
FLumenSharedRT LightIsMoving
Definition LumenSceneData.h:949
FLumenSharedRT ReservoirTraceHitDistance
Definition LumenSceneData.h:963
TArray< FLumenViewOrigin, TFixedAllocator< LUMEN_MAX_VIEWS > > ViewOrigins
Definition LumenSceneData.h:939
FLumenSharedRT EncodedReprojectionVector
Definition LumenSceneData.h:974
FLumenSharedRT DepthHistory
Definition LumenSceneData.h:958
FLumenSharedRT DownsampledSceneDepth2x1
Definition LumenSceneData.h:966
FIntPoint ViewExtent
Definition LumenSceneData.h:941
FRDGBufferSRV * CardPageHighResLastUsedBufferSRV
Definition LumenSceneData.h:928
FRDGTextureRef IndirectLightingAtlas
Definition LumenSceneData.h:908
FLumenSharedRT DownsampledWorldNormal2x2
Definition LumenSceneData.h:969
FLumenSharedRT NewRoughSpecularIndirect
Definition LumenSceneData.h:955
FLumenSharedRT NormalHistory
Definition LumenSceneData.h:959
FRDGTextureRef AlbedoAtlas
Definition LumenSceneData.h:901
FLumenSharedRT LumenTileBitmask
Definition LumenSceneData.h:971
bool bReallocateAtlas
Definition LumenSceneData.h:937
FLumenSurfaceCacheFeedback::FFeedbackResources SurfaceCacheFeedbackResources
Definition LumenSceneData.h:899
FLumenSharedRT RoughSpecularIndirect
Definition LumenSceneData.h:951
FLumenSharedRT LumenPackedPixelData
Definition LumenSceneData.h:975
FRDGBufferSRV * PageTableBufferSRV
Definition LumenSceneData.h:920
FLumenSharedRT ReservoirRayDirection
Definition LumenSceneData.h:961
FLumenSharedRT NewBackfaceDiffuseIndirect
Definition LumenSceneData.h:954
FLumenSharedRT DownsampledWorldNormal2x1
Definition LumenSceneData.h:967
FLumenSharedRT ReflectSpecularIndirect[(uint32) ELumenReflectionPass::MAX]
Definition LumenSceneData.h:944
FLumenSharedRT ReflectResolveVariance[(uint32) ELumenReflectionPass::MAX]
Definition LumenSceneData.h:946
FLumenSharedRT MegaLightsPackedPixelData
Definition LumenSceneData.h:976
FRDGTextureRef EmissiveAtlas
Definition LumenSceneData.h:904
FLumenSharedRT BackfaceDiffuseIndirect
Definition LumenSceneData.h:950
FLumenSharedRT ReservoirTraceHitNormal
Definition LumenSceneData.h:964
FRDGBufferUAV * CardPageLastUsedBufferUAV
Definition LumenSceneData.h:924
FLumenSharedRT ReservoirWeights
Definition LumenSceneData.h:965
FRDGBufferSRV * PrimitiveGroupBufferSRV
Definition LumenSceneData.h:918
Definition LumenSceneData.h:524
FIntRect PhysicalAtlasRect
Definition LumenSceneData.h:529
FIntPoint PhysicalPageCoord
Definition LumenSceneData.h:526
Definition LumenSceneData.h:533
FIntPoint ElementSize
Definition LumenSceneData.h:534
int32 NumAllocations
Definition LumenSceneData.h:535
int32 NumPages
Definition LumenSceneData.h:536
Definition LumenSceneData.h:540
uint32 BinNumPages
Definition LumenSceneData.h:543
uint32 NumFreePages
Definition LumenSceneData.h:541
uint32 BinPageFreeTexels
Definition LumenSceneData.h:545
uint32 BinNumWastedPages
Definition LumenSceneData.h:544
TArray< FBinStats > Bins
Definition LumenSceneData.h:547
Definition LumenSceneData.h:237
FIntPoint GetSizeInPages() const
Definition LumenSceneData.h:252
bool bLocked
Definition LumenSceneData.h:245
uint8 ResLevelY
Definition LumenSceneData.h:241
uint8 SizeInPagesX
Definition LumenSceneData.h:238
bool IsAllocated() const
Definition LumenSceneData.h:247
uint16 PageTableSpanSize
Definition LumenSceneData.h:244
int32 PageTableSpanOffset
Definition LumenSceneData.h:243
uint8 SizeInPagesY
Definition LumenSceneData.h:239
uint8 ResLevelX
Definition LumenSceneData.h:240
int32 GetPageTableIndex(int32 LocalPageIndex) const
Definition LumenSceneData.h:257
Definition LumenSceneData.h:833
FMatrix44f ViewToClip
Definition LumenSceneData.h:850
FVector LumenSceneViewOrigin
Definition LumenSceneData.h:843
FDFVector3 PreViewTranslationDF
Definition LumenSceneData.h:845
const FViewInfo * ReferenceView
Definition LumenSceneData.h:890
float LumenSceneDetail
Definition LumenSceneData.h:856
FVector4f WorldCameraOrigin
Definition LumenSceneData.h:844
float MaxTraceDistance
Definition LumenSceneData.h:854
float LastEyeAdaptationExposure
Definition LumenSceneData.h:853
float CardMaxDistance
Definition LumenSceneData.h:855
bool IsPerspectiveProjection() const
Definition LumenSceneData.h:836
const FSceneViewFamily * Family
Definition LumenSceneData.h:841
float OrthoMaxDimension
Definition LumenSceneData.h:852
FMatrix44f FrustumTranslatedWorldToClip
Definition LumenSceneData.h:849
static constexpr UE_FORCEINLINE_HINT bool IsPowerOfTwo(T Value)
Definition UnrealMathUtility.h:519
Definition RenderGraphDefinitions.h:627
Definition MultiGPU.h:33
Definition RenderTransform.h:272
Definition LumenUniqueList.h:39
Definition LumenUniqueList.h:19
Definition IntPoint.h:25
IntType Y
Definition IntPoint.h:37
static const TIntPoint ZeroValue
Definition IntPoint.h:45
IntType X
Definition IntPoint.h:34
IntType Area() const
Definition IntRect.h:272
Definition LumenSceneData.h:92
uint64 PackedValue
Definition LumenSceneData.h:95
uint32 ResLevelBiasX
Definition LumenSceneData.h:98
static constexpr uint64 InvalidPackedValue
Definition LumenSceneData.h:93
uint32 Unused
Definition LumenSceneData.h:101
bool IsValid() const
Definition LumenSceneData.h:144
uint32 AxisAlignedDirectionIndex
Definition LumenSceneData.h:100
bool operator!=(const FLumenCardId &Other) const
Definition LumenSceneData.h:139
bool operator<(const FLumenCardId &Other) const
Definition LumenSceneData.h:124
static constexpr FLumenCardId GetInvalidId()
Definition LumenSceneData.h:154
uint32 ResLevelBiasY
Definition LumenSceneData.h:99
void Invalidate()
Definition LumenSceneData.h:149
bool operator==(const FLumenCardId &Other) const
Definition LumenSceneData.h:134
uint32 CustomId
Definition LumenSceneData.h:102
FLumenCardId()=default
bool operator<=(const FLumenCardId &Other) const
Definition LumenSceneData.h:129
FLumenCardId(uint32 InCustomId, uint8 InAxisAlignedDirectionIndex, uint8 InResLevelBiasX, uint8 InResLevelBiasY)
Definition LumenSceneData.h:107
Definition LumenSceneData.h:504
FVirtualPageIndex()
Definition LumenSceneData.h:505
FVirtualPageIndex(int32 InCardIndex, uint16 InResLevel, uint16 InLocalPageIndex)
Definition LumenSceneData.h:506
uint16 ResLevel
Definition LumenSceneData.h:514
uint64 PackedValue
Definition LumenSceneData.h:510
uint16 LocalPageIndex
Definition LumenSceneData.h:515
int32 CardIndex
Definition LumenSceneData.h:513