UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SceneVisibilityPrivate.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "SceneVisibility.h"
6#include "ScenePrivate.h"
10#include "Async/Mutex.h"
11#include "Async/UniqueLock.h"
12
15class FGPUOcclusion;
22
28template <typename CommandType>
30{
31public:
32 using CommandFunctionType = TFunction<void(CommandType&&)>;
34
35 TCommandPipe(const TCHAR* InName)
36 : Pipe(InName)
37 {}
38
40 {
41 check(IsEmpty());
42 Wait();
43 }
44
49
54
56 {
57 PrerequisiteTask = InPrerequisiteTask;
58 }
59
61 {
62 NumCommands.fetch_add(InNumCommands, std::memory_order_relaxed);
63 }
64
66 {
67 int32 FinalNumCommands = NumCommands.fetch_sub(InNumCommands, std::memory_order_acq_rel) - InNumCommands;
69
70 if (FinalNumCommands == 0)
71 {
72 if (EmptyFunction)
73 {
74 EmptyFunction();
75 }
76 }
77 }
78
79 template <typename... ArgTypes>
80 void EnqueueCommand(ArgTypes&&... Args)
81 {
82 check(CommandFunction);
83
84 QueueMutex.Lock();
85 const bool bWasEmpty = Queue.IsEmpty();
86 Queue.Emplace(Forward<ArgTypes>(Args)...);
87 QueueMutex.Unlock();
88
89 if (bWasEmpty)
90 {
91 Pipe.Launch(Pipe.GetDebugName(), [this]
92 {
93 FTaskTagScope Scope(ETaskTag::EParallelRenderingThread);
94 SCOPED_NAMED_EVENT_TCHAR(Pipe.GetDebugName(), FColor::Magenta);
95
96 TArray<CommandType, SceneRenderingAllocator> Commands;
97
98 QueueMutex.Lock();
99 Commands = MoveTemp(Queue);
100 QueueMutex.Unlock();
101
102 int32 NumProcessedCommands = 0;
103
104 for (CommandType& Command : Commands)
105 {
106 CommandFunction(MoveTemp(Command));
107 NumProcessedCommands++;
108 }
109
111 {
113 }
114
115 }, PrerequisiteTask, UE::Tasks::ETaskPriority::High);
116 }
117 }
118
119 bool IsEmpty() const
120 {
121 return Queue.IsEmpty();
122 }
123
124 void Wait()
125 {
126 Pipe.WaitUntilEmpty();
127 }
128
129private:
130 UE::Tasks::FTask PrerequisiteTask;
131 CommandFunctionType CommandFunction;
132 EmptyFunctionType EmptyFunction;
133 UE::FMutex QueueMutex;
135 UE::Tasks::FPipe Pipe;
136 std::atomic_int32_t NumCommands{ 0 };
137};
138
140
145
147
153
161
174
176{
178
179 bool IsEmpty() const
180 {
181 return Primitives.IsEmpty()
182#if WITH_EDITOR
183 && EditorPrimitives.IsEmpty()
184#endif
185 ;
186 }
187
189
190#if WITH_EDITOR
192#endif
193};
194
196{
197public:
201
202 bool Pop(FDynamicPrimitiveIndex& PrimitiveIndex)
203 {
204 const int32 Index = NextIndex.fetch_add(1, std::memory_order_relaxed);
205 if (Index < List.Primitives.Num())
206 {
207 PrimitiveIndex = List.Primitives[Index];
208 return true;
209 }
210 return false;
211 }
212
213#if WITH_EDITOR
214 bool PopEditor(FDynamicPrimitiveIndex& PrimitiveIndex)
215 {
216 const int32 Index = NextEditorIndex.fetch_add(1, std::memory_order_relaxed);
217 if (Index < List.EditorPrimitives.Num())
218 {
219 PrimitiveIndex = List.EditorPrimitives[Index];
220 return true;
221 }
222 return false;
223 }
224#endif
225
226private:
228 std::atomic_int32_t NextIndex = { 0 };
229#if WITH_EDITOR
230 std::atomic_int32_t NextEditorIndex = { 0 };
231#endif
232};
233
242
244
246{
247public:
249
251
253
255
257
258private:
259 void Finish();
260
261 struct FViewFamilyGroup
262 {
263 const FSceneViewFamily* Family;
264 uint8 ViewSubsetMask; // Subset of views with the given view family
265 };
266
267 struct FViewMeshArrays
268 {
270 FSimpleElementCollector SimpleElementCollector;
271
272#if WITH_EDITOR
274 FSimpleElementCollector EditorSimpleElementCollector;
275#endif
276
277#if UE_ENABLE_DEBUG_DRAWING
279#endif
280 };
281
282 const FSceneViewFamily& FirstViewFamily;
286 TArray<FViewMeshArrays, TInlineAllocator<2>> ViewMeshArraysPerView;
288 FMeshElementCollector MeshCollector;
289#if WITH_EDITOR
291#endif
292 FRHICommandList* RHICmdList;
293 FGlobalDynamicVertexBuffer DynamicVertexBuffer;
294 FGlobalDynamicIndexBuffer DynamicIndexBuffer;
296
298};
299
301{
302public:
304
306 {
307 return Contexts.Num() - 1;
308 }
309
311 {
312 check(!bFinished);
313 return Contexts.Last();
314 }
315
317
319
321
323
324 void Submit(FRHICommandListImmediate& RHICmdList);
325
326private:
327 using FDynamicMeshElementContextArray = TArray<FDynamicMeshElementContext*>;
328
330 FDynamicMeshElementContextArray Contexts;
332 bool bFinished = false;
333};
334
336
338{
339 // Visibility is processed on the render thread with assistance from other threads via parallel for.
341
342 // Visibility is processed as an async task graph with only the dynamic mesh element gather on the render thread.
343 Parallel,
344};
345
347
348// Configuration state for visibility task granularity and priority.
350{
351public:
353
355
356 // Task priorities for non-specific tasks related to visibility.
357 UE::Tasks::ETaskPriority TaskPriority = UE::Tasks::ETaskPriority::High;
358
361
363 {
364 static constexpr uint32 MinWordsPerTask = 32;
365
366 const UE::Tasks::ETaskPriority TaskPriority = UE::Tasks::ETaskPriority::High;
367
368 // Always visible tasks are fixed size and process the same number of primitives.
372
374
376 {
377 static constexpr uint32 MinWordsPerTask = 32;
378
379 const UE::Tasks::ETaskPriority TaskPriority = UE::Tasks::ETaskPriority::High;
380
381 // Frustum culling tasks are fixed size and process the same number of primitives.
385 std::atomic_uint32_t NumCulledPrimitives{ 0 };
386
388
390 {
391 static constexpr uint32 MinQueriesPerTask = 64;
392
393 const UE::Tasks::ETaskPriority TaskPriority = UE::Tasks::ETaskPriority::High;
394 const UE::Tasks::ETaskPriority FinalizeTaskPriority = UE::Tasks::ETaskPriority::High;
395
396 struct FView
397 {
399 };
400
402 std::atomic_uint32_t NumCulledPrimitives{ 0 };
403 std::atomic_uint32_t NumTestedQueries{ 0 };
404
406
408 {
409 static constexpr uint32 MinPrimitivesPerTask = 32;
410 static constexpr uint32 MaxPrimitivesPerTask = 2048;
411
412 const UE::Tasks::ETaskPriority ComputeRelevanceTaskPriority = UE::Tasks::ETaskPriority::High;
413
417
419};
420
422
424{
425 friend FVisibilityTaskData;
428public:
430
438
439private:
440 void BeginInitVisibility();
441
442 struct FOcclusionCull
443 {
444 FGPUOcclusionSerial* ContextIfSerial = nullptr;
445 FGPUOcclusionParallel* ContextIfParallel = nullptr;
446 TCommandPipe<FPrimitiveRange> CommandPipe{ TEXT("OcclusionCullPipe") };
447
448 } OcclusionCull;
449
450 struct FRelevance
451 {
453 TCommandPipe<FPrimitiveIndexList> CommandPipe{ TEXT("RelevancePipe") };
454
455 } Relevance;
456
457 struct FTasks
458 {
462 UE::Tasks::FTaskEvent ComputeRelevance{ UE_SOURCE_LOCATION };
463 UE::Tasks::FTaskEvent LightVisibility{ UE_SOURCE_LOCATION };
464
465 } Tasks;
466};
467
469
470/*
471 This class manages all state related to visibility computation for all views associated with a specific scene renderer. When in parallel mode, a complex task graph
472 processes each visibility stage and pipelines results from one stage to the next. This avoids major join / fork sync points except for the dynamic mesh elements
473 gather which is currently confined to the render thread. For platforms that don't benefit from parallelism or don't support it, a render-thread centric mode is
474 also supported which processes visibility on the render thread with some parallel for support from task threads.
475
476 Visibility is processed for all views independently where each view performs multiple stages of pipelined task work. The view stages are as follows:
477
478 Frustum Cull - Primitives are frustum / distance culled and visible primitives are emitted.
479 Occlusion Cull - Primitives are culled against occluders in the scene and visible primitives are emitted.
480 Compute Relevance - Primitives are queried for view relevance information dynamic primitives are identified and emitted, and static meshes are filtered
481 into various mesh passes
482
483 The following stages are then performed for all views:
484
485 Gather Dynamic Mesh Elements (GDME) - Primitives identified to have dynamic relevance are queried with a view mask to supply dynamic meshes.
486 Setup Mesh Passes - Tasks are launched to generate mesh draw commands for static and dynamic meshes.
487
488 In order to facilitate processing of emitted data from each stage, and ultimately spawning load balanced tasks for the next stage, the visibility pipeline utilizes
489 'command pipes' which are serial queues that run between stages to launch work for the next stage. Each view has two pipes: OcclusionCull, and Relevance. The OcclusionCull
490 pipe can either process occlusion tasks, or act as the relevance pipe if occlusion is disabled. The relevance pipe only launches relevance tasks.
491
492 The render thread performs the GDME stage which syncs the compute relevance stage for all views. Setup Mesh Passes then runs once all the GDME tasks
493 have completed. When the renderer has only one view, GDME utilizes a command pipe to process requests from relevance as quickly as possible and achieves some overlap
494 with relevance, reducing the critical path. With multiple views, it's necessary to sync beforehand as the gather requires a view mask for each dynamic primitive. To
495 that end, GDME supports two paths for processing dynamic primitives: an index list or view bit mask. The former just supplies a list of dynamic primitives and the view
496 bits are assumed to be 0x1. The latter requires deriving dynamic primitive indices by scanning the view mask array for non-zero elements.
497
498 IMPORTANT:
499 Accessing any visibility data prior to calling Finish must be done with extreme caution and synchronize with the various stages manually using the provided tasks.
500 Unprotected access of visibility state is ONLY safe after calling Finish.
501*/
503{
505 friend FRelevancePacket;
507public:
509
511 {
512 check(bFinished);
513 }
514
516
517 void ProcessRenderThreadTasks() override;
518
520 {
521 if (!Tasks.bDynamicMeshElementsPrerequisitesTriggered)
522 {
523 Tasks.DynamicMeshElementsPrerequisites.Trigger();
524 Tasks.bDynamicMeshElementsPrerequisitesTriggered = true;
525 }
526 }
527
529
530 void Finish() override;
531
533 {
534 return DynamicMeshElements.ViewCommandsPerView;
535 }
536
538 {
539 return Tasks.FrustumCull;
540 }
541
543 {
544 return Tasks.FinalizeRelevance;
545 }
546
548 {
549 return Tasks.LightVisibility;
550 }
551
552 bool IsTaskWaitingAllowed() const override
553 {
554 return Tasks.bWaitingAllowed;
555 }
556
557private:
558 void GatherDynamicMeshElements(FDynamicPrimitiveIndexList&& Primitives);
559 void GatherDynamicMeshElements(const FDynamicPrimitiveViewMasks& Primitives);
560
561 void SetupMeshPasses(FExclusiveDepthStencil::Type BasePassDepthStencilAccess, FInstanceCullingManager& InstanceCullingManager);
562
563 FRHICommandListImmediate& RHICmdList;
564 FSceneRenderer& SceneRenderer;
565 FScene& Scene;
567 FViewFamilyInfo& ViewFamily;
568 EShadingPath ShadingPath;
571
572 struct FDynamicMeshElements
573 {
574 // The command pipe and event are only non-null when in single-view mode.
575 TCommandPipe<FDynamicPrimitiveIndexList>* CommandPipe = nullptr;
576
577 // Primitive view masks are only non-null when in multi-view mode.
578 FDynamicPrimitiveViewMasks* PrimitiveViewMasks = nullptr;
579
584
585 } DynamicMeshElements;
586
587 struct FTasks
588 {
589 // These legacy tasks are used to interface with the jobs launched prior to gather dynamic mesh elements.
590 FGraphEventRef FrustumCullLegacyTask;
591 FGraphEventRef ComputeRelevanceLegacyTask;
592
593 FGraphEventRef DynamicMeshElementsPipe;
594 FGraphEventRef DynamicMeshElementsRenderThread;
595
596 UE::Tasks::FTaskEvent LightVisibility{ UE_SOURCE_LOCATION };
597 UE::Tasks::FTaskEvent BeginInitVisibility{ UE_SOURCE_LOCATION };
600 UE::Tasks::FTaskEvent ComputeRelevance{ UE_SOURCE_LOCATION };
601 UE::Tasks::FTaskEvent DynamicMeshElementsPrerequisites{ UE_SOURCE_LOCATION };
602 UE::Tasks::FTaskEvent DynamicMeshElements{ UE_SOURCE_LOCATION };
603 UE::Tasks::FTask FinalizeRelevance;
604 UE::Tasks::FTask MeshPassSetup;
605
606 bool bDynamicMeshElementsPrerequisitesTriggered = false;
607 bool bWaitingAllowed = false;
608
609 } Tasks;
610
611 FVisibilityTaskConfig TaskConfig;
612
613 const bool bAddNaniteRelevance;
614 const bool bAddLightmapDensityCommands;
615 bool bFinished = false;
616};
617
619
620template<class T, int TAmplifyFactor = 1>
622{
625
629
631 {
632 if (IsEmpty())
633 {
634 Prims.Reserve(MaxOutputPrims);
635 }
636
637 Prims.Add(Prim);
638 }
639 FORCEINLINE bool IsFull() const
640 {
641 return Prims.Num() >= MaxOutputPrims;
642 }
643 FORCEINLINE bool IsEmpty() const
644 {
645 return Prims.IsEmpty();
646 }
647 template<class TARRAY>
649 {
650 DestArray.Append(Prims);
651 }
652};
653
664
674
678
699
700class FRelevancePacket : public FSceneRenderingAllocatorObject<FRelevancePacket>
701{
702public:
705 const FViewInfo& InView,
709 const UE::Tasks::FTask& PrerequisitesTask);
710
712
713 void Finalize();
714
715private:
717
719
720 const float CurrentWorldTime;
721 const float DeltaWorldTime;
722
723 FVisibilityTaskData& TaskData;
724 FVisibilityTaskConfig& TaskConfig;
725 const FScene& Scene;
726 const FViewInfo& View;
727 const FViewCommands& ViewCommands;
728 const uint8 ViewBit;
729 const FFilterStaticMeshesForViewData& ViewData;
730 FDynamicPrimitiveViewMasks* DynamicPrimitiveViewMasks;
731 uint8* RESTRICT MarkMasks;
732 UE::Tasks::FTask PrerequisitesTask;
733
735 FRelevancePrimSet<int32> NotDrawRelevant;
736 FRelevancePrimSet<int32> TranslucentSelfShadowPrimitives;
737 FRelevancePrimSet<FPrimitiveSceneInfo*> VisibleDynamicPrimitivesWithSimpleLights;
738 int32 NumVisibleDynamicPrimitives = 0;
739 int32 NumVisibleDynamicEditorPrimitives = 0;
740 FMeshPassMask VisibleDynamicMeshesPassMask;
741 FTranslucenyPrimCount TranslucentPrimCount;
742 FRelevancePrimSet<FPrimitiveSceneInfo*> DirtyIndirectLightingCacheBufferPrimitives;
743#if WITH_EDITOR
748#endif
749
751 TArray<FVolumetricMeshBatch, SceneRenderingAllocator> HeterogeneousVolumesMeshBatches;
754 FDrawCommandRelevancePacket DrawCommandPacket;
756 FRelevancePrimSet<FPrimitiveInstanceRange> NaniteCustomDepthInstances;
757
758 struct FPrimitiveLODMask
759 {
760 FPrimitiveLODMask()
761 : PrimitiveIndex(INDEX_NONE)
762 {}
763
764 FPrimitiveLODMask(const int32 InPrimitiveIndex, const FLODMask& InLODMask)
765 : PrimitiveIndex(InPrimitiveIndex)
766 , LODMask(InLODMask)
767 {}
768
769 int32 PrimitiveIndex;
770 FLODMask LODMask;
771 };
772
773 FRelevancePrimSet<FPrimitiveLODMask> PrimitivesLODMask; // group both lod mask with primitive index to be able to properly merge them in the view
774
775 UE::Tasks::FTask ComputeRelevanceTask;
776 uint16 CombinedShadingModelMask = 0;
777 uint8 SubstrateUintPerPixel = 0;
778 uint8 SubstrateClosureCountMask = 0;
779 uint8 SubstrateTileTypeMask = 0;
780 bool bUsesAnisotropy = false;
781 bool bHasDistortionPrimitives = false;
782 bool bHasCustomDepthPrimitives = false;
783 bool bUsesGlobalDistanceField = false;
784 bool bUsesLightingChannels = false;
785 bool bTranslucentSurfaceLighting = false;
786 bool bUsesCustomDepth = false;
787 bool bUsesCustomStencil = false;
788 bool bUsesMotionVectorWorldOffset = false;
789 bool bSceneHasSkyMaterial = false;
790 bool bHasSingleLayerWaterMaterial = false;
791 bool bUsesSecondStageDepthPass = false;
792 bool bAddLightmapDensityCommands = false;
793 bool bComputeRelevanceTaskLaunched = false;
794};
795
797{
798public:
800
802 {
803 check(Packets.IsEmpty());
804 check(bFinished && bFinalized);
805 }
806
809
810 // Call when all primitives have been added.
812
813 // Call in a dependent task when both compute relevance and filter static mesh task events have completed.
814 void Finalize();
815
816private:
817 FRelevancePacket* CreateRelevancePacket()
818 {
819 check(!bLaunchOnAddPrimitive || !bFinished);
820 return Packets.Emplace_GetRef(new FRelevancePacket(TaskData, View, ViewIndex, ViewData, MarkMasks, PrerequisitesTask));
821 }
822
823 FVisibilityTaskData& TaskData;
824 FScene& Scene;
825 FViewInfo& View;
826 FViewCommands& ViewCommands;
827 int32 ViewIndex;
828 const FFilterStaticMeshesForViewData ViewData;
829 const uint32 NumMeshes;
830 const uint32 NumPrimitivesPerPacket;
831 uint8* MarkMasks;
833 UE::Tasks::FTask PrerequisitesTask;
834 const bool bLaunchOnAddPrimitive;
835 bool bFinished = false;
836 bool bFinalized = false;
837};
838
840
851
864
877
888
901
913
919
921{
922public:
924
925 inline bool CanBeOccluded(int32 PrimitiveIndex, EOcclusionFlags::Type& OutOcclusionFlags) const
926 {
928
930#if WITH_EDITOR
931 if (GIsEditor)
932 {
933 if (Scene.PrimitivesSelected[PrimitiveIndex])
934 {
935 // to render occluded outline for selected objects
936 bCanBeOccluded = false;
937 }
938 }
939#endif
940 return bCanBeOccluded;
941 }
942
944 {
946 TaskConfig.OcclusionCull.NumCulledPrimitives.fetch_add(Result.NumCulledPrimitives, std::memory_order_relaxed);
947 TaskConfig.OcclusionCull.NumTestedQueries.fetch_add(Result.NumTestedQueries, std::memory_order_relaxed);
948 }
949
950 template <bool bIsParallel, typename VisitorType>
952
954
955 // Visitor variant for tasks that records commands to replay later.
1002
1003 // Visitor variant that will process the requests immediately or replay recorded commands.
1005 {
1012
1017
1022
1027
1029 {
1031 }
1032
1037
1038 void AddHZBBounds(const FHZBBound& HZBBounds)
1039 {
1041 }
1042
1044
1045 void Replay(const FRecordVisitor& RecordVisitor)
1046 {
1047 for (const FOcclusionFeedbackEntry& Entry : RecordVisitor.OcclusionFeedbacks)
1048 {
1049 AddOcclusionFeedback(Entry);
1050 }
1051
1052 for (const FOcclusionQuery& Query : RecordVisitor.OcclusionQueries)
1053 {
1055 }
1056
1057 for (const TPair<FBox, FColor>& Query : RecordVisitor.VisualizeQueries)
1058 {
1059 AddVisualizeQuery(Query.Key, Query.Value);
1060 }
1061
1062 for (const FHZBBound& HZBBounds : RecordVisitor.HZBBounds)
1063 {
1064 AddHZBBounds(HZBBounds);
1065 }
1066 }
1067
1069
1075 };
1076
1078
1079protected:
1080 static constexpr uint32 SubIsOccludedPageSize = 1024;
1081
1089
1091
1097 const float CurrentRealTime;
1101};
1102
1125
1127 : public FGPUOcclusionPacket
1128 , public FSceneRenderingAllocatorObject<FGPUOcclusionParallelPacket>
1129{
1130public:
1133 , MaxInputSubQueries(InViewPacket.TaskConfig.OcclusionCull.Views[InViewPacket.ViewIndex].MaxQueriesPerTask)
1134 {}
1135
1136 bool AddPrimitive(int32 PrimitiveIndex);
1137
1138 bool IsFull() const
1139 {
1140 return NumInputSubQueries >= MaxInputSubQueries;
1141 }
1142
1144
1145private:
1146 friend FGPUOcclusionParallel;
1147
1149
1150 static constexpr uint32 ArrayChunkSize = 1024;
1151
1152 const uint32 MaxInputSubQueries;
1153 uint32 NumInputSubQueries = 0;
1155 FRecordVisitor RecordVisitor;
1156 UE::Tasks::FTask Task;
1157 bool bTaskLaunched = false;
1158};
1159
1161{
1162public:
1165 , MaxNonOccludedPrimitives(ViewPacket.TaskConfig.Relevance.NumPrimitivesPerPacket)
1166 {
1167 NonOccludedPrimitives.Reserve(MaxNonOccludedPrimitives);
1168 CreateOcclusionPacket();
1169 }
1170
1172 {
1173 check(bFinished);
1174 }
1175
1177 void Finalize();
1178
1182
1183private:
1185
1186 void CreateOcclusionPacket()
1187 {
1188 Packets.Emplace(new FGPUOcclusionParallelPacket(ViewPacket, State));
1189 }
1190
1191 const uint32 MaxNonOccludedPrimitives;
1193 FPrimitiveIndexList NonOccludedPrimitives;
1194 FRHICommandList* RHICmdList = nullptr;
1196 bool bFinished = false;
1197 bool bFinalized = false;
1198};
1199
1201{
1202public:
1205 , Packet(InViewPacket, State)
1206 , ProcessVisitor(Packet, FRHICommandListExecutor::GetImmediateCommandList(), DynamicVertexBuffer)
1207 {}
1208
1212
1213private:
1214 FGPUOcclusionPacket Packet;
1216 FOcclusionCullResult OcclusionCullResult;
1217};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
#define GIsEditor
Definition CoreGlobals.h:233
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
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
#define RESTRICT
Definition Platform.h:706
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ SDPG_Foreground
Definition EngineTypes.h:191
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
void Init()
Definition LockFreeList.h:4
EMeshDrawCommandCullingPayloadFlags
Definition MeshPassProcessor.h:1655
#define UE_SOURCE_LOCATION
Definition PreprocessorHelpers.h:71
void DrawWireBox(FPrimitiveDrawInterface *PDI, const FBox &Box, const FLinearColor &Color, uint8 DepthPriority, float Thickness, float DepthBias, bool bScreenSpace)
Definition PrimitiveDrawingUtils.cpp:1009
EShadingPath
Definition SceneUtils.h:24
EVisibilityTaskSchedule
Definition SceneVisibilityPrivate.h:338
UE::Tasks::EExtendedTaskPriority GetExtendedTaskPriority(bool bExecuteInParallel)
Definition SceneVisibilityPrivate.h:141
if(Failed) console_printf("Failed.\n")
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 SceneVisibilityPrivate.h:797
void Finish(UE::Tasks::FTaskEvent &ComputeRelevanceTaskEvent)
Definition SceneVisibility.cpp:2189
void Finalize()
Definition SceneVisibility.cpp:2209
void AddPrimitive(int32 Index)
Definition SceneVisibility.cpp:2175
void AddPrimitives(FPrimitiveIndexList &&PrimitiveIndexList)
Definition SceneVisibility.cpp:2149
~FComputeAndMarkRelevance()
Definition SceneVisibilityPrivate.h:801
Definition SceneVisibilityPrivate.h:301
FGraphEventRef LaunchRenderThreadTask(FDynamicPrimitiveIndexList &&PrimitiveIndexList)
Definition SceneVisibility.cpp:4238
int32 GetNumAsyncContexts() const
Definition SceneVisibilityPrivate.h:305
~FDynamicMeshElementContextContainer()
Definition SceneVisibility.cpp:4228
FDynamicMeshElementContext * GetRenderThreadContext() const
Definition SceneVisibilityPrivate.h:310
void MergeContexts(TArray< FDynamicPrimitive, SceneRenderingAllocator > &OutDynamicPrimitives)
Definition SceneVisibility.cpp:4259
void Submit(FRHICommandListImmediate &RHICmdList)
Definition SceneVisibility.cpp:4393
UE::Tasks::FTask LaunchAsyncTask(FDynamicPrimitiveIndexQueue *PrimitiveIndexQueue, int32 Index, UE::Tasks::ETaskPriority TaskPriority)
Definition SceneVisibility.cpp:4233
Definition SceneVisibilityPrivate.h:246
FGraphEventRef LaunchRenderThreadTask(FDynamicPrimitiveIndexList &&PrimitiveIndexList)
Definition SceneVisibility.cpp:4102
void GatherDynamicMeshElementsForEditorPrimitive(FPrimitiveSceneInfo *Primitive, uint8 ViewMask)
Definition SceneVisibility.cpp:4185
UE::Tasks::FTask LaunchAsyncTask(FDynamicPrimitiveIndexQueue *PrimitiveIndexQueue, UE::Tasks::ETaskPriority TaskPriority)
Definition SceneVisibility.cpp:4120
void GatherDynamicMeshElementsForPrimitive(FPrimitiveSceneInfo *Primitive, uint8 ViewMask)
Definition SceneVisibility.cpp:4141
Definition SceneVisibilityPrivate.h:196
FDynamicPrimitiveIndexQueue(FDynamicPrimitiveIndexList &&InList)
Definition SceneVisibilityPrivate.h:198
bool Pop(FDynamicPrimitiveIndex &PrimitiveIndex)
Definition SceneVisibilityPrivate.h:202
Type
Definition RHIResources.h:412
Definition SceneVisibilityPrivate.h:921
const float CurrentRealTime
Definition SceneVisibilityPrivate.h:1097
FSceneViewState & ViewState
Definition SceneVisibilityPrivate.h:1084
const uint32 OcclusionFrameCounter
Definition SceneVisibilityPrivate.h:1095
const FVector ViewOrigin
Definition SceneVisibilityPrivate.h:1094
bool OcclusionCullPrimitive(VisitorType &Visitor, FOcclusionCullResult &Result, int32 Index)
Definition SceneVisibility.cpp:2676
TArray< bool > * SubIsOccluded
Definition SceneVisibilityPrivate.h:1090
FViewElementPDI & ViewElementPDI
Definition SceneVisibilityPrivate.h:1085
const bool bUseOcclusionFeedback
Definition SceneVisibilityPrivate.h:1099
FOcclusionFeedback & OcclusionFeedback
Definition SceneVisibilityPrivate.h:1087
static constexpr uint32 SubIsOccludedPageSize
Definition SceneVisibilityPrivate.h:1080
FVisibilityViewPacket & ViewPacket
Definition SceneVisibilityPrivate.h:1082
bool CanBeOccluded(int32 PrimitiveIndex, EOcclusionFlags::Type &OutOcclusionFlags) const
Definition SceneVisibilityPrivate.h:925
void RecordOcclusionCullResult(FOcclusionCullResult Result)
Definition SceneVisibilityPrivate.h:943
const bool bNewlyConsideredBBoxExpandActive
Definition SceneVisibilityPrivate.h:1100
TSet< FPrimitiveOcclusionHistory, FPrimitiveOcclusionHistoryKeyFuncs > & PrimitiveOcclusionHistorySet
Definition SceneVisibilityPrivate.h:1088
const FScene & Scene
Definition SceneVisibilityPrivate.h:1092
const FGPUOcclusionState & OcclusionState
Definition SceneVisibilityPrivate.h:1093
FHZBOcclusionTester & HZBOcclusionTests
Definition SceneVisibilityPrivate.h:1086
const float PrimitiveProbablyVisibleTime
Definition SceneVisibilityPrivate.h:1096
FViewInfo & View
Definition SceneVisibilityPrivate.h:1083
const float NeverOcclusionTestDistanceSquared
Definition SceneVisibilityPrivate.h:1098
Definition SceneVisibilityPrivate.h:1129
bool AddPrimitive(int32 PrimitiveIndex)
Definition SceneVisibility.cpp:3278
FGPUOcclusionParallelPacket(FVisibilityViewPacket &InViewPacket, const FGPUOcclusionState &InOcclusionState)
Definition SceneVisibilityPrivate.h:1131
void LaunchOcclusionCullTask()
Definition SceneVisibility.cpp:3300
bool IsFull() const
Definition SceneVisibilityPrivate.h:1138
Definition SceneVisibilityPrivate.h:1161
void Finish(UE::Tasks::FTaskEvent &OcclusionCullTasks)
Definition SceneVisibility.cpp:3389
void Unmap(FRHICommandListImmediate &RHICmdListImmediate) override
Definition SceneVisibility.cpp:3452
void AddPrimitives(FPrimitiveRange PrimitiveRange) override
Definition SceneVisibility.cpp:3357
~FGPUOcclusionParallel()
Definition SceneVisibilityPrivate.h:1171
FGPUOcclusionParallel(FVisibilityViewPacket &InViewPacket)
Definition SceneVisibilityPrivate.h:1163
void Finalize()
Definition SceneVisibility.cpp:3414
Definition SceneVisibilityPrivate.h:1201
void AddPrimitives(FPrimitiveRange PrimitiveRange) override
Definition SceneVisibility.cpp:3462
void Unmap(FRHICommandListImmediate &RHICmdListImmediate) override
Definition SceneVisibility.cpp:3486
FGPUOcclusionSerial(FVisibilityViewPacket &InViewPacket)
Definition SceneVisibilityPrivate.h:1203
Definition SceneVisibilityPrivate.h:1104
const FScene & Scene
Definition SceneVisibilityPrivate.h:1120
FGlobalDynamicVertexBuffer DynamicVertexBuffer
Definition SceneVisibilityPrivate.h:1118
FVisibilityViewPacket & ViewPacket
Definition SceneVisibilityPrivate.h:1119
FGPUOcclusionState State
Definition SceneVisibilityPrivate.h:1123
virtual void Unmap(FRHICommandListImmediate &RHICmdList)
Definition SceneVisibility.cpp:3236
FSceneViewState & ViewState
Definition SceneVisibilityPrivate.h:1122
void WaitForLastOcclusionQuery()
Definition SceneVisibility.cpp:3262
virtual ~FGPUOcclusion()=default
virtual void AddPrimitives(FPrimitiveRange PrimitiveRange)=0
FViewInfo & View
Definition SceneVisibilityPrivate.h:1121
Definition GlobalRenderResources.h:300
Definition GlobalRenderResources.h:216
Definition SceneRendering.h:397
uint32 AddBounds(const FVector &BoundsOrigin, const FVector &BoundsExtent)
Definition SceneOcclusion.cpp:831
Definition InstanceCullingManager.h:45
Definition MeshElementCollector.h:26
Definition MeshPassProcessor.h:156
Definition ScenePrivate.h:681
void AddPrimitive(const FPrimitiveOcclusionHistoryKey &PrimitiveKey, const FVector &BoundsOrigin, const FVector &BoundsBoxExtent, FGlobalDynamicVertexBuffer &DynamicVertexBuffer)
Definition SceneOcclusion.cpp:1796
Definition ScenePrivate.h:112
uint32 HZBTestIndex
Definition ScenePrivate.h:123
Definition PrimitiveSceneInfo.h:266
Definition RHICommandList.h:5284
Definition RHICommandList.h:4626
Definition RHICommandList.h:3819
Definition SceneVisibilityPrivate.h:701
void LaunchComputeRelevanceTask()
Definition SceneVisibility.cpp:1263
void Finalize()
Definition SceneVisibility.cpp:1298
Definition SceneRendering.h:2080
Definition SceneView.h:2212
Definition ScenePrivate.h:746
Definition ScenePrivate.h:2875
TArray< uint8 > PrimitiveOcclusionFlags
Definition ScenePrivate.h:2963
Definition SceneManagement.h:1313
Definition StaticMeshBatch.h:40
Definition StaticMeshBatch.h:16
Definition SceneVisibility.h:16
Definition DynamicPrimitiveDrawing.h:17
Definition SceneRendering.h:1970
Definition SceneRendering.h:1132
Definition VirtualTextureSystem.h:86
Definition SceneVisibilityPrivate.h:350
struct FVisibilityTaskConfig::FRelevance Relevance
uint32 NumVisiblePrimitives
Definition SceneVisibilityPrivate.h:359
struct FVisibilityTaskConfig::FAlwaysVisible AlwaysVisible
EVisibilityTaskSchedule Schedule
Definition SceneVisibilityPrivate.h:354
UE::Tasks::ETaskPriority TaskPriority
Definition SceneVisibilityPrivate.h:357
uint32 NumTestedPrimitives
Definition SceneVisibilityPrivate.h:360
struct FVisibilityTaskConfig::FFrustumCull FrustumCull
struct FVisibilityTaskConfig::FOcclusionCull OcclusionCull
Definition SceneVisibilityPrivate.h:503
~FVisibilityTaskData() override
Definition SceneVisibilityPrivate.h:510
void StartGatherDynamicMeshElements() override
Definition SceneVisibilityPrivate.h:519
bool IsTaskWaitingAllowed() const override
Definition SceneVisibilityPrivate.h:552
void FinishGatherDynamicMeshElements(FExclusiveDepthStencil::Type BasePassDepthStencilAccess, FInstanceCullingManager &InstanceCullingManager, FVirtualTextureUpdater *VirtualTextureUpdater) override
Definition SceneVisibility.cpp:4881
UE::Tasks::FTask GetComputeRelevanceTask() const override
Definition SceneVisibilityPrivate.h:542
void ProcessRenderThreadTasks() override
Definition SceneVisibility.cpp:4756
void Finish() override
Definition SceneVisibility.cpp:4900
UE::Tasks::FTask GetLightVisibilityTask() const override
Definition SceneVisibilityPrivate.h:547
TArrayView< FViewCommands > GetViewCommandsPerView() override
Definition SceneVisibilityPrivate.h:532
void LaunchVisibilityTasks(const UE::Tasks::FTask &BeginInitVisibilityPrerequisites)
Definition SceneVisibility.cpp:4420
UE::Tasks::FTask GetFrustumCullTask() const override
Definition SceneVisibilityPrivate.h:537
Definition SceneVisibilityPrivate.h:424
FVisibilityTaskConfig & TaskConfig
Definition SceneVisibilityPrivate.h:432
int32 ViewIndex
Definition SceneVisibilityPrivate.h:436
FVisibilityTaskData & TaskData
Definition SceneVisibilityPrivate.h:431
FScene & Scene
Definition SceneVisibilityPrivate.h:433
FViewElementPDI ViewElementPDI
Definition SceneVisibilityPrivate.h:437
FViewInfo & View
Definition SceneVisibilityPrivate.h:434
FSceneViewState * ViewState
Definition SceneVisibilityPrivate.h:435
Definition SceneVisibility.h:33
Definition ArrayView.h:139
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_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition ChunkedArray.h:56
Definition SceneVisibilityPrivate.h:30
void AddNumCommands(int32 InNumCommands)
Definition SceneVisibilityPrivate.h:60
void Wait()
Definition SceneVisibilityPrivate.h:124
void ReleaseNumCommands(int32 InNumCommands)
Definition SceneVisibilityPrivate.h:65
bool IsEmpty() const
Definition SceneVisibilityPrivate.h:119
void EnqueueCommand(ArgTypes &&... Args)
Definition SceneVisibilityPrivate.h:80
~TCommandPipe()
Definition SceneVisibilityPrivate.h:39
void SetCommandFunction(CommandFunctionType &&InCommandFunction)
Definition SceneVisibilityPrivate.h:45
TCommandPipe(const TCHAR *InName)
Definition SceneVisibilityPrivate.h:35
void SetPrerequisiteTask(const UE::Tasks::FTask &InPrerequisiteTask)
Definition SceneVisibilityPrivate.h:55
void SetEmptyFunction(TFunction< void()> &&InEmptyFunction)
Definition SceneVisibilityPrivate.h:50
Definition ConcurrentLinearAllocator.h:571
Definition ConcurrentLinearAllocator.h:624
Definition ContainerAllocationPolicies.h:1662
Definition Mutex.h:18
void Lock()
Definition Mutex.h:43
void Unlock()
Definition Mutex.h:53
Definition Pipe.h:29
FORCENOINLINE const TCHAR * GetDebugName() const
Definition Pipe.h:140
TTask< TInvokeResult_T< TaskBodyType > > Launch(const TCHAR *InDebugName, TaskBodyType &&TaskBody, ETaskPriority Priority=ETaskPriority::Default, EExtendedTaskPriority ExtendedPriority=EExtendedTaskPriority::None, ETaskFlags Flags=ETaskFlags::None)
Definition Pipe.h:64
Definition Task.h:236
Definition SceneVisibilityPrivate.h:666
Type
Definition SceneVisibilityPrivate.h:668
@ StaticMeshFadeOutDitheredLODMapMask
Definition SceneVisibilityPrivate.h:670
@ StaticMeshVisibilityMapMask
Definition SceneVisibilityPrivate.h:669
@ StaticMeshFadeInDitheredLODMapMask
Definition SceneVisibilityPrivate.h:671
Type
Definition MeshPassProcessor.h:38
@ Num
Definition MeshPassProcessor.h:86
Type
Definition ScenePrivate.h:2486
@ CanBeOccluded
Definition ScenePrivate.h:2490
EExtendedTaskPriority
Definition TaskPrivate.h:60
U16 Index
Definition radfft.cpp:71
Definition Color.h:486
Definition SceneVisibilityPrivate.h:680
FDrawCommandRelevancePacket()
Definition SceneVisibility.cpp:1164
int32 NumDynamicBuildRequestElements[EMeshPass::Num]
Definition SceneVisibilityPrivate.h:686
bool bUseCachedMeshDrawCommands
Definition SceneVisibilityPrivate.h:687
FPassDrawCommandBuildRequestArray DynamicBuildRequests[EMeshPass::Num]
Definition SceneVisibilityPrivate.h:684
FPassDrawCommandBuildFlagsArray DynamicBuildFlags[EMeshPass::Num]
Definition SceneVisibilityPrivate.h:685
FPassDrawCommandArray VisibleCachedDrawCommands[EMeshPass::Num]
Definition SceneVisibilityPrivate.h:683
void AddCommandsForMesh(int32 PrimitiveIndex, const FPrimitiveSceneInfo *InPrimitiveSceneInfo, const FStaticMeshBatchRelevance &RESTRICT StaticMeshRelevance, const FStaticMeshBatch &RESTRICT StaticMesh, EMeshDrawCommandCullingPayloadFlags CullingPayloadFlags, const FScene &Scene, bool bCanCache, EMeshPass::Type PassType)
Definition SceneVisibility.cpp:1174
Definition SceneVisibilityPrivate.h:176
bool IsEmpty() const
Definition SceneVisibilityPrivate.h:179
FList Primitives
Definition SceneVisibilityPrivate.h:188
Definition SceneVisibilityPrivate.h:163
uint32 ViewMask
Definition SceneVisibilityPrivate.h:172
uint32 Index
Definition SceneVisibilityPrivate.h:171
FDynamicPrimitiveIndex(int32 InIndex, uint8 InViewMask)
Definition SceneVisibilityPrivate.h:166
FDynamicPrimitiveIndex()=default
Definition SceneVisibilityPrivate.h:235
FPrimitiveViewMasks Primitives
Definition SceneVisibilityPrivate.h:236
Definition SceneVisibilityPrivate.h:155
int32 StartElementIndex
Definition SceneVisibilityPrivate.h:158
int32 EndElementIndex
Definition SceneVisibilityPrivate.h:159
int32 PrimitiveIndex
Definition SceneVisibilityPrivate.h:156
int32 ViewIndex
Definition SceneVisibilityPrivate.h:157
Definition SceneVisibilityPrivate.h:655
FVector ViewOrigin
Definition SceneVisibilityPrivate.h:656
bool bFullEarlyZPass
Definition SceneVisibilityPrivate.h:660
float LODScale
Definition SceneVisibilityPrivate.h:658
int32 ForcedLODLevel
Definition SceneVisibilityPrivate.h:657
float MinScreenRadiusForDepthPrepassSquared
Definition SceneVisibilityPrivate.h:659
Definition SceneVisibilityPrivate.h:1005
TArray< FThrottledOcclusionQuery, SceneRenderingAllocator > ThrottledOcclusionQueries
Definition SceneVisibilityPrivate.h:1073
FGlobalDynamicVertexBuffer & DynamicVertexBuffer
Definition SceneVisibilityPrivate.h:1072
FPrimitiveOcclusionHistory * AddOcclusionHistory(const FPrimitiveOcclusionHistory &History)
Definition SceneVisibilityPrivate.h:1018
FProcessVisitor(FGPUOcclusionPacket &InPacket, FRHICommandList &InRHICmdList, FGlobalDynamicVertexBuffer &InDynamicVertexBuffer)
Definition SceneVisibilityPrivate.h:1006
void SubmitThrottledOcclusionQueries()
Definition SceneVisibility.cpp:3099
void AddVisualizeQuery(const FBox &Box)
Definition SceneVisibilityPrivate.h:1028
TSet< FPrimitiveOcclusionHistory, FPrimitiveOcclusionHistoryKeyFuncs > & PrimitiveOcclusionHistorySet
Definition SceneVisibilityPrivate.h:1074
void Replay(const FRecordVisitor &RecordVisitor)
Definition SceneVisibilityPrivate.h:1045
void AddOcclusionQuery(const FOcclusionQuery &Query)
Definition SceneVisibility.cpp:3073
void AddThrottledOcclusionQuery(const FThrottledOcclusionQuery &Query)
Definition SceneVisibilityPrivate.h:1013
FGPUOcclusionPacket & Packet
Definition SceneVisibilityPrivate.h:1070
void AddOcclusionFeedback(const FOcclusionFeedbackEntry &Entry)
Definition SceneVisibilityPrivate.h:1023
FRHICommandList & RHICmdList
Definition SceneVisibilityPrivate.h:1071
void AddVisualizeQuery(const FBox &Box, const FColor &Color)
Definition SceneVisibilityPrivate.h:1033
void AddHZBBounds(const FHZBBound &HZBBounds)
Definition SceneVisibilityPrivate.h:1038
Definition SceneVisibilityPrivate.h:957
TChunkedArray< FPrimitiveOcclusionHistory, ArrayChunkSize, SceneRenderingAllocator > OcclusionHistories
Definition SceneVisibilityPrivate.h:996
void AddThrottledOcclusionQuery(const FThrottledOcclusionQuery &Query)
Definition SceneVisibilityPrivate.h:958
void AddHZBBounds(const FHZBBound &Bounds)
Definition SceneVisibilityPrivate.h:969
FPrimitiveOcclusionHistory * AddOcclusionHistory(const FPrimitiveOcclusionHistory &History)
Definition SceneVisibilityPrivate.h:964
TArray< FOcclusionQuery, SceneRenderingAllocator > OcclusionQueries
Definition SceneVisibilityPrivate.h:997
void AddOcclusionFeedback(const FOcclusionFeedbackEntry &Entry)
Definition SceneVisibilityPrivate.h:974
void AddOcclusionQuery(const FOcclusionQuery &Query)
Definition SceneVisibilityPrivate.h:989
TArray< TPair< FBox, FColor >, SceneRenderingAllocator > VisualizeQueries
Definition SceneVisibilityPrivate.h:1000
TArray< FHZBBound, SceneRenderingAllocator > HZBBounds
Definition SceneVisibilityPrivate.h:999
void AddVisualizeQuery(const FBox &Box)
Definition SceneVisibilityPrivate.h:979
void AddVisualizeQuery(const FBox &Box, const FColor &Color)
Definition SceneVisibilityPrivate.h:984
TArray< FOcclusionFeedbackEntry, SceneRenderingAllocator > OcclusionFeedbacks
Definition SceneVisibilityPrivate.h:998
static constexpr uint32 ArrayChunkSize
Definition SceneVisibilityPrivate.h:994
Definition SceneVisibilityPrivate.h:903
bool bHZBOcclusion
Definition SceneVisibilityPrivate.h:909
int32 ReadBackLagTolerance
Definition SceneVisibilityPrivate.h:904
bool bSubmitQueries
Definition SceneVisibilityPrivate.h:908
int32 NumBufferedFrames
Definition SceneVisibilityPrivate.h:905
bool bAllowSubQueries
Definition SceneVisibilityPrivate.h:911
int32 NumPrimitiveRangeTasks
Definition SceneVisibilityPrivate.h:906
bool bUseRoundRobinOcclusion
Definition SceneVisibilityPrivate.h:910
Definition SceneVisibilityPrivate.h:890
FHZBBound(FPrimitiveOcclusionHistory *InTargetHistory, const FVector &InBoundsOrigin, const FVector &InBoundsExtent)
Definition SceneVisibilityPrivate.h:891
FPrimitiveOcclusionHistory *const TargetHistory
Definition SceneVisibilityPrivate.h:897
const FVector BoundsOrigin
Definition SceneVisibilityPrivate.h:898
const FVector BoundsExtent
Definition SceneVisibilityPrivate.h:899
Definition SceneManagement.h:1831
Definition SceneVisibilityPrivate.h:842
const FVector Extent
Definition SceneVisibilityPrivate.h:849
const FVector Origin
Definition SceneVisibilityPrivate.h:848
FOcclusionBounds(FVector InOrigin, FVector &InExtent)
Definition SceneVisibilityPrivate.h:843
Definition SceneVisibilityPrivate.h:915
uint32 NumTestedQueries
Definition SceneVisibilityPrivate.h:917
uint32 NumCulledPrimitives
Definition SceneVisibilityPrivate.h:916
Definition SceneVisibilityPrivate.h:879
const FPrimitiveOcclusionHistoryKey PrimitiveKey
Definition SceneVisibilityPrivate.h:885
FOcclusionFeedbackEntry(const FPrimitiveOcclusionHistoryKey &PrimitiveKey, FVector InBoundsOrigin, FVector InBoundsExtent)
Definition SceneVisibilityPrivate.h:880
const FOcclusionBounds Bounds
Definition SceneVisibilityPrivate.h:886
Definition SceneVisibilityPrivate.h:866
FPrimitiveOcclusionHistory * PrimitiveOcclusionHistory
Definition SceneVisibilityPrivate.h:873
const bool bGroupedQuery
Definition SceneVisibilityPrivate.h:875
const FOcclusionBounds Bounds
Definition SceneVisibilityPrivate.h:874
FOcclusionQuery(FPrimitiveOcclusionHistory *InPrimitiveOcclusionHistory, FVector InBoundsOrigin, FVector InBoundsExtent, bool bInGroupedQuery)
Definition SceneVisibilityPrivate.h:867
Definition ScenePrivate.h:271
Definition SceneVisibilityPrivate.h:149
int32 StartIndex
Definition SceneVisibilityPrivate.h:150
int32 EndIndex
Definition SceneVisibilityPrivate.h:151
Definition SceneVisibilityPrivate.h:622
FORCEINLINE void AddPrim(T Prim)
Definition SceneVisibilityPrivate.h:630
FORCEINLINE bool IsFull() const
Definition SceneVisibilityPrivate.h:639
const int32 MaxOutputPrims
Definition SceneVisibilityPrivate.h:624
FORCEINLINE bool IsEmpty() const
Definition SceneVisibilityPrivate.h:643
FORCEINLINE void AppendTo(TARRAY &DestArray)
Definition SceneVisibilityPrivate.h:648
TArray< T, SceneRenderingAllocator > Prims
Definition SceneVisibilityPrivate.h:623
FORCEINLINE FRelevancePrimSet(int32 InputPrimCount)
Definition SceneVisibilityPrivate.h:626
Definition SceneVisibilityPrivate.h:853
const FPrimitiveOcclusionHistoryKey PrimitiveOcclusionHistoryKey
Definition SceneVisibilityPrivate.h:860
const FOcclusionBounds Bounds
Definition SceneVisibilityPrivate.h:861
FThrottledOcclusionQuery(FPrimitiveOcclusionHistoryKey InPrimitiveOcclusionHistoryKey, FVector InBoundsOrigin, FVector InBoundsExtent, uint32 InLastQuerySubmitFrame)
Definition SceneVisibilityPrivate.h:854
const uint32 LastQuerySubmitFrame
Definition SceneVisibilityPrivate.h:862
Definition SceneRendering.h:246
Definition SceneVisibilityPrivate.h:363
uint32 NumWordsPerTask
Definition SceneVisibilityPrivate.h:370
uint32 NumPrimitivesPerTask
Definition SceneVisibilityPrivate.h:371
const UE::Tasks::ETaskPriority TaskPriority
Definition SceneVisibilityPrivate.h:366
uint32 NumTasks
Definition SceneVisibilityPrivate.h:369
static constexpr uint32 MinWordsPerTask
Definition SceneVisibilityPrivate.h:364
Definition SceneVisibilityPrivate.h:376
uint32 NumWordsPerTask
Definition SceneVisibilityPrivate.h:383
uint32 NumTasks
Definition SceneVisibilityPrivate.h:382
static constexpr uint32 MinWordsPerTask
Definition SceneVisibilityPrivate.h:377
const UE::Tasks::ETaskPriority TaskPriority
Definition SceneVisibilityPrivate.h:379
std::atomic_uint32_t NumCulledPrimitives
Definition SceneVisibilityPrivate.h:385
uint32 NumPrimitivesPerTask
Definition SceneVisibilityPrivate.h:384
Definition SceneVisibilityPrivate.h:397
uint32 MaxQueriesPerTask
Definition SceneVisibilityPrivate.h:398
Definition SceneVisibilityPrivate.h:390
std::atomic_uint32_t NumCulledPrimitives
Definition SceneVisibilityPrivate.h:402
const UE::Tasks::ETaskPriority FinalizeTaskPriority
Definition SceneVisibilityPrivate.h:394
static constexpr uint32 MinQueriesPerTask
Definition SceneVisibilityPrivate.h:391
std::atomic_uint32_t NumTestedQueries
Definition SceneVisibilityPrivate.h:403
TArray< FView, TInlineAllocator< 2, SceneRenderingAllocator > > Views
Definition SceneVisibilityPrivate.h:401
const UE::Tasks::ETaskPriority TaskPriority
Definition SceneVisibilityPrivate.h:393
Definition SceneVisibilityPrivate.h:408
static constexpr uint32 MinPrimitivesPerTask
Definition SceneVisibilityPrivate.h:409
uint32 NumEstimatedPackets
Definition SceneVisibilityPrivate.h:414
static constexpr uint32 MaxPrimitivesPerTask
Definition SceneVisibilityPrivate.h:410
uint32 NumPrimitivesProcessed
Definition SceneVisibilityPrivate.h:416
const UE::Tasks::ETaskPriority ComputeRelevanceTaskPriority
Definition SceneVisibilityPrivate.h:412
uint32 NumPrimitivesPerPacket
Definition SceneVisibilityPrivate.h:415
Definition Tuple.h:652