UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RenderGraphBuilder.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "Containers/Map.h"
8#include "Containers/Set.h"
12#include "CoreTypes.h"
14#include "MultiGPU.h"
15#include "PixelFormat.h"
17#include "RHIBreadcrumbs.h"
18#include "RHIDefinitions.h"
22#include "RenderGraphEvent.h"
23#include "RenderGraphPass.h"
25#include "RenderGraphTrace.h"
27#include "RendererInterface.h"
29#include "Stats/Stats.h"
32#include "Tasks/Pipe.h"
34
35enum class ERenderTargetTexture : uint8;
36struct FParallelPassSet;
40struct TStatId;
41
48 : public FRDGScopeState
49{
50 struct FAsyncDeleter
51 {
53 UE::Tasks::FTask Prerequisites;
54 static UE::Tasks::FTask LastTask;
55
56 RENDERCORE_API ~FAsyncDeleter();
57
58 } AsyncDeleter;
59
60 FRDGAllocatorScope RootAllocatorScope;
61
62public:
64 FRDGBuilder(const FRDGBuilder&) = delete;
66
70
74
79
85
89
95
102
108
114
117
120
125
128
133
136
141
146 template <typename ParameterStructType>
148
150 // Allocation Methods
151
153 void* Alloc(uint64 SizeInBytes, uint32 AlignInBytes = 16);
154
156 template <typename PODType>
157 PODType* AllocPOD();
158
160 template <typename PODType>
162
164 template <typename PODType>
166
168 template <typename ObjectType, typename... TArgs>
169 ObjectType* AllocObject(TArgs&&... Args);
170
172 template <typename ObjectType>
174
176 template <typename ParameterStructType>
178
180 template <typename ParameterStructType>
182
184 template <typename BaseParameterStructType>
186
188 template <typename BaseParameterStructType>
190
192
195 {
196 check(Callback);
197 PostExecuteCallbacks.Emplace(Forward<TUniqueFunction<void()>&&>(Callback));
198 }
199
217 template <typename ParameterStructType, typename ExecuteLambdaType>
219
221 template <typename ExecuteLambdaType>
223
229 template <typename ExecuteLambdaType>
231
236 template <typename ParameterStructType, typename LaunchLambdaType>
238
243 void SetPassWorkload(FRDGPass* Pass, uint32 Workload);
244
246 RENDERCORE_API void AddPassDependency(FRDGPass* Producer, FRDGPass* Consumer);
247
249 UE_DEPRECATED(5.5, "SetCommandListStat is deprecated. The underlying stats have been removed. Consider marking up rendering code with RDG event scopes.")
251
253 void AddDispatchHint();
254
256 template <typename TaskLambda>
258
259 template <typename TaskLambda>
261
262 template <typename TaskLambda>
263 UE::Tasks::FTask AddSetupTask(TaskLambda&& Task, UE::Tasks::FPipe* Pipe, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
264
265 template <typename TaskLambda, typename PrerequisitesCollectionType>
266 UE::Tasks::FTask AddSetupTask(TaskLambda&& Task, PrerequisitesCollectionType&& Prerequisites, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
267
268 template <typename TaskLambda, typename PrerequisitesCollectionType>
269 UE::Tasks::FTask AddSetupTask(TaskLambda&& Task, UE::Tasks::FPipe* Pipe, PrerequisitesCollectionType&& Prerequisites, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
270
272 template <typename TaskLambda>
274
275 template <typename TaskLambda>
277
278 template <typename TaskLambda>
279 UE::Tasks::FTask AddCommandListSetupTask(TaskLambda&& Task, UE::Tasks::FPipe* Pipe, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
280
281 template <typename TaskLambda, typename PrerequisitesCollectionType>
282 UE::Tasks::FTask AddCommandListSetupTask(TaskLambda&& Task, PrerequisitesCollectionType&& Prerequisites, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
283
284 template <typename TaskLambda, typename PrerequisitesCollectionType>
285 UE::Tasks::FTask AddCommandListSetupTask(TaskLambda&& Task, UE::Tasks::FPipe* Pipe, PrerequisitesCollectionType&& Prerequisites, UE::Tasks::ETaskPriority Priority = UE::Tasks::ETaskPriority::Normal, bool bCondition = true, ERDGSetupTaskWaitPoint WaitPoint = ERDGSetupTaskWaitPoint::Compile);
286
288 inline bool IsParallelSetupEnabled() const
289 {
290 return ParallelSetup.bEnabled;
291 }
292
293 inline bool IsAsyncComputeEnabled() const
294 {
295 return bSupportsAsyncCompute;
296 }
297
303
308
311
312 template <typename ElementType>
317
320
321 template <typename ElementType>
326
329
335
340 void QueueCommitReservedBuffer(FRDGBufferRef Buffer, uint64 CommitSizeInBytes);
341
348
355
368
372
375
378
386
388 {
389 for (FRDGViewableResource* Resource : Resources)
390 {
391 UseExternalAccessMode(Resource, ReadOnlyAccess, Pipelines);
392 }
393 }
394
400
402 {
403 for (FRDGViewableResource* Resource : Resources)
404 {
405 UseInternalAccessMode(Resource);
406 }
407 }
408
411
413 RENDERCORE_API void Execute();
414
416 static RENDERCORE_API void TickPoolElements();
417
419 static RENDERCORE_API bool IsImmediateMode();
420
423
426
429
432
435
436#if RDG_DUMP_RESOURCES
437 static RENDERCORE_API FString BeginResourceDump(const TCHAR* Cmd);
438 static RENDERCORE_API bool IsDumpingFrame();
439#else
440 static bool IsDumpingFrame() { return false; }
441#endif
442
443#if WITH_MGPU
446 {
447 bForceCopyCrossGPU = true;
448 }
449#endif
450
451 UE_DEPRECATED(5.5, "This path is no longer supported.")
453
454 UE_DEPRECATED(5.5, "This path is no longer supported.")
455 static bool IsDumpingDraws() { return false; }
456
457 UE_DEPRECATED(5.6, "RemoveUnusedTextureWarning is no longer necessary.")
459
460 UE_DEPRECATED(5.6, "RemoveUnusedBufferWarning is no longer necessary.")
462
463private:
464 static const char* const kDefaultUnaccountedCSVStat;
465
466 const FRDGEventName BuilderName;
467
469 // Passes
470
477 FRDGPass* ProloguePass = nullptr;
478 FRDGPass* EpiloguePass = nullptr;
479
480 bool bInitialAsyncComputeFence = GSupportsEfficientAsyncCompute;
481 bool bSupportsAsyncCompute = false;
482 bool bSupportsRenderPassMerge = false;
483
484 uint32 AsyncComputePassCount = 0;
485 uint32 RasterPassCount = 0;
486
489
490 RENDERCORE_API ERDGPassFlags OverridePassFlags(const TCHAR* PassName, ERDGPassFlags Flags) const;
491
492 inline FRDGPass* GetProloguePass() const
493 {
494 return ProloguePass;
495 }
496
498 inline FRDGPassHandle GetProloguePassHandle() const
499 {
500 return FRDGPassHandle(0);
501 }
502
504 inline FRDGPassHandle GetEpiloguePassHandle() const
505 {
506 checkf(EpiloguePass, TEXT("The handle is not valid until the epilogue has been added to the graph during execution."));
507 return Passes.Last();
508 }
509
510 FRHIRenderPassInfo GetRenderPassInfo(const FRDGPass* Pass) const;
511
512 template <typename ParameterStructType, typename ExecuteLambdaType>
513 FRDGPass* AddPassInternal(
516 const ParameterStructType* ParameterStruct,
518 ExecuteLambdaType&& ExecuteLambda);
519
520 void MarkResourcesAsProduced(FRDGPass* Pass);
521
522 RENDERCORE_API FRDGPass* SetupEmptyPass(FRDGPass* Pass);
523 RENDERCORE_API FRDGPass* SetupParameterPass(FRDGPass* Pass);
524
525 void SetupPassInternals(FRDGPass* Pass);
526 void SetupPassResources(FRDGPass* Pass);
527 void SetupPassDependencies(FRDGPass* Pass);
528
529 void Compile();
530 void CompilePassOps(FRDGPass* Pass);
531
532 void ExecuteSerialPass(FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
533
534 static void ExecutePass(FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
535 static void ExecutePassPrologue(FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
536 static void ExecutePassEpilogue(FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
537
538 static void PushPreScopes (FRHIComputeCommandList& RHICmdListPass, FRDGPass* FirstPass);
539 static void PushPassScopes(FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
540 static void PopPassScopes (FRHIComputeCommandList& RHICmdListPass, FRDGPass* Pass);
541 static void PopPreScopes (FRHIComputeCommandList& RHICmdListPass, FRDGPass* LastPass);
543 // Resource Registries
544
546 FRDGPassRegistry Passes;
547 FRDGTextureRegistry Textures;
548 FRDGBufferRegistry Buffers;
549 FRDGViewRegistry Views;
550 FRDGUniformBufferRegistry UniformBuffers;
551
552 struct FExtractedTexture
553 {
554 FExtractedTexture() = default;
555
558 , PooledTexture(InPooledTexture)
559 {}
560
562 TRefCountPtr<IPooledRenderTarget>* PooledTexture{};
563 };
564
566
567 struct FExtractedBuffer
568 {
569 FExtractedBuffer() = default;
570
573 , PooledBuffer(InPooledBuffer)
574 {}
575
577 TRefCountPtr<FRDGPooledBuffer>* PooledBuffer{};
578 };
579
581
585
587 TArray<FRDGBuffer*, FRDGArrayAllocator> NumElementsCallbackBuffers;
588
590 // Resource Collection and Allocation
591
592 IRHITransientResourceAllocator* TransientResourceAllocator = nullptr;
593 bool bSupportsTransientTextures = false;
594 bool bSupportsTransientBuffers = false;
595
596 bool IsTransient(FRDGTextureRef Texture) const;
597 bool IsTransient(FRDGBufferRef Buffer) const;
598 bool IsTransientInternal(FRDGViewableResource* Resource, bool bFastVRAM) const;
599
600 struct FCollectResourceOp
601 {
602 enum class EOp : uint8
603 {
604 Allocate,
605 Deallocate
606 };
607
608 static FCollectResourceOp Allocate(FRDGBufferHandle BufferHandle)
609 {
610 return FCollectResourceOp(BufferHandle.GetIndex(), ERDGViewableResourceType::Buffer, EOp::Allocate);
611 }
612
613 static FCollectResourceOp Allocate(FRDGTextureHandle TextureHandle)
614 {
615 return FCollectResourceOp(TextureHandle.GetIndex(), ERDGViewableResourceType::Texture, EOp::Allocate);
616 }
617
618 static FCollectResourceOp Deallocate(FRDGBufferHandle BufferHandle)
619 {
620 return FCollectResourceOp(BufferHandle.GetIndex(), ERDGViewableResourceType::Buffer, EOp::Deallocate);
621 }
622
623 static FCollectResourceOp Deallocate(FRDGTextureHandle TextureHandle)
624 {
625 return FCollectResourceOp(TextureHandle.GetIndex(), ERDGViewableResourceType::Texture, EOp::Deallocate);
626 }
627
628 FCollectResourceOp() = default;
630 : ResourceIndex(InResourceIndex)
631 , ResourceType(static_cast<uint32>(InResourceType))
632 , Op(static_cast<uint32>(InOp))
633 {}
634
635 EOp GetOp() const
636 {
637 return static_cast<EOp>(Op);
638 }
639
641 {
642 return static_cast<ERDGViewableResourceType>(ResourceType);
643 }
644
645 FRDGTextureHandle GetTextureHandle() const
646 {
648 return FRDGTextureHandle(ResourceIndex);
649 }
650
651 FRDGBufferHandle GetBufferHandle() const
652 {
654 return FRDGBufferHandle(ResourceIndex);
655 }
656
657 uint32 ResourceIndex : 30;
658 uint32 ResourceType : 1;
659 uint32 Op : 1;
660 };
661
662 using FCollectResourceOpArray = TArray<FCollectResourceOp, FRDGArrayAllocator>;
663
665 struct FCollectResourceContext
666 {
667 FCollectResourceOpArray TransientResources;
668 FCollectResourceOpArray PooledTextures;
669 FCollectResourceOpArray PooledBuffers;
672 FRDGUniformBufferBitArray UniformBufferMap;
673 FRDGViewBitArray ViewMap;
674 };
675
679
681 void FinalizeDescs();
682
684 void CollectAllocations(FCollectResourceContext& Context, FRDGPass* Pass);
685 void CollectAllocateTexture(FCollectResourceContext& Context, ERHIPipeline PassPipeline, FRDGPassHandle PassHandle, FRDGTexture* Texture);
686 void CollectAllocateBuffer(FCollectResourceContext& Context, ERHIPipeline PassPipeline, FRDGPassHandle PassHandle, FRDGBuffer* Buffer);
687
689 void CollectDeallocations(FCollectResourceContext& Context, FRDGPass* Pass);
690 void CollectDeallocateTexture(FCollectResourceContext& Context, ERHIPipeline PassPipeline, FRDGPassHandle PassHandle, FRDGTexture* Texture, uint32 ReferenceCount);
691 void CollectDeallocateBuffer(FCollectResourceContext& Context, ERHIPipeline PassPipeline, FRDGPassHandle PassHandle, FRDGBuffer* Buffer, uint32 ReferenceCount);
692
694 void AllocateTransientResources(TConstArrayView<FCollectResourceOp> Ops);
695 void AllocatePooledTextures(FRHICommandListBase& RHICmdList, TConstArrayView<FCollectResourceOp> Ops);
697
701
705
707 void SetExternalPooledRenderTargetRHI(FRDGTexture* Texture, IPooledRenderTarget* RenderTarget);
708 void SetPooledTextureRHI(FRDGTexture* Texture, FRDGPooledTexture* PooledTexture);
709 void SetTransientTextureRHI(FRDGTexture* Texture, FRHITransientTexture* TransientTexture);
710 void SetDiscardPass(FRDGTexture* Texture, FRHITransientTexture* TransientTexture);
711 void SetExternalPooledBufferRHI(FRDGBuffer* Buffer, const TRefCountPtr<FRDGPooledBuffer>& PooledBuffer);
712 void SetPooledBufferRHI(FRDGBuffer* Buffer, FRDGPooledBuffer* PooledBuffer);
713 void SetTransientBufferRHI(FRDGBuffer* Buffer, FRHITransientBuffer* TransientBuffer);
714
716 void InitViewRHI(FRHICommandListBase& RHICmdList, FRDGView* View);
717 void InitBufferViewRHI(FRHICommandListBase& RHICmdList, FRDGBufferSRV* SRV);
718 void InitBufferViewRHI(FRHICommandListBase& RHICmdList, FRDGBufferUAV* UAV);
719 void InitTextureViewRHI(FRHICommandListBase& RHICmdList, FRDGTextureSRV* SRV);
720 void InitTextureViewRHI(FRHICommandListBase& RHICmdList, FRDGTextureUAV* UAV);
721
723 // Resource Transitions and State Tracking
724
727
730
734
736 FRDGTransitionCreateQueue TransitionCreateQueue;
737
739 FRDGTextureSubresourceState ScratchTextureState;
740
742 FRDGSubresourceState PrologueSubresourceState;
743
744 void CompilePassBarriers();
745 void CollectPassBarriers();
746 void CollectPassBarriers(FRDGPassHandle PassHandle);
747 void CreatePassBarriers();
748 void FinalizeResources();
749
750 void AddFirstTextureTransition(FRDGTextureRef Texture);
751 void AddFirstBufferTransition(FRDGBufferRef Buffer);
752
753 void AddLastTextureTransition(FRDGTextureRef Texture);
754 void AddLastBufferTransition(FRDGBufferRef Buffer);
755
756 void AddCulledReservedCommitTransition(FRDGBufferRef Buffer);
757
758 template <typename FilterSubresourceLambdaType>
759 void AddTextureTransition(
761 FRDGTextureSubresourceState& StateBefore,
762 FRDGTextureSubresourceState& StateAfter,
764
765 void AddTextureTransition(
767 FRDGTextureSubresourceState& StateBefore,
768 FRDGTextureSubresourceState& StateAfter)
769 {
770 AddTextureTransition(Texture, StateBefore, StateAfter, [](FRDGSubresourceState*, int32) { return true; });
771 }
772
773 template <typename FilterSubresourceLambdaType>
774 void AddBufferTransition(
776 FRDGSubresourceState*& StateBefore,
777 FRDGSubresourceState* StateAfter,
779
780 void AddBufferTransition(
782 FRDGSubresourceState*& StateBefore,
783 FRDGSubresourceState* StateAfter)
784 {
785 AddBufferTransition(Buffer, StateBefore, StateAfter, [](FRDGSubresourceState*) { return true; });
786 }
787
788 void AddTransition(
789 FRDGViewableResource* Resource,
790 FRDGSubresourceState StateBefore,
791 FRDGSubresourceState StateAfter,
793
794 void AddAliasingTransition(
797 FRDGViewableResource* Resource,
799
806 FRDGPassHandle GetEpilogueBarrierPassHandle(FRDGPassHandle Handle)
807 {
808 return Passes[Handle]->EpilogueBarrierPass;
809 }
810
811 FRDGPassHandle GetPrologueBarrierPassHandle(FRDGPassHandle Handle)
812 {
813 return Passes[Handle]->PrologueBarrierPass;
814 }
815
816 FRDGPass* GetEpilogueBarrierPass(FRDGPassHandle Handle)
817 {
818 return Passes[GetEpilogueBarrierPassHandle(Handle)];
819 }
820
821 FRDGPass* GetPrologueBarrierPass(FRDGPassHandle Handle)
822 {
823 return Passes[GetPrologueBarrierPassHandle(Handle)];
824 }
825
827 void AddToPrologueBarriersToEnd(FRDGPassHandle Handle, FRDGBarrierBatchBegin& BarriersToBegin)
828 {
829 FRDGPass* Pass = GetPrologueBarrierPass(Handle);
830 Pass->GetPrologueBarriersToEnd(Allocators.Transition).AddDependency(&BarriersToBegin);
831 }
832
834 void AddToEpilogueBarriersToEnd(FRDGPassHandle Handle, FRDGBarrierBatchBegin& BarriersToBegin)
835 {
836 FRDGPass* Pass = GetEpilogueBarrierPass(Handle);
837 Pass->GetEpilogueBarriersToEnd(Allocators.Transition).AddDependency(&BarriersToBegin);
838 }
839
841 template <typename FunctionType>
842 void AddToPrologueBarriers(FRDGPassHandle PassHandle, FunctionType Function)
843 {
844 FRDGPass* Pass = GetPrologueBarrierPass(PassHandle);
845 FRDGBarrierBatchBegin& BarriersToBegin = Pass->GetPrologueBarriersToBegin(Allocators.Transition, TransitionCreateQueue);
847 Pass->GetPrologueBarriersToEnd(Allocators.Transition).AddDependency(&BarriersToBegin);
848 }
849
851 template <typename FunctionType>
852 void AddToEpilogueBarriers(FRDGPassHandle PassHandle, FunctionType Function)
853 {
854 FRDGPass* Pass = GetEpilogueBarrierPass(PassHandle);
855 FRDGBarrierBatchBegin& BarriersToBegin = Pass->GetEpilogueBarriersToBeginFor(Allocators.Transition, TransitionCreateQueue, Pass->GetPipeline());
857 Pass->GetEpilogueBarriersToEnd(Allocators.Transition).AddDependency(&BarriersToBegin);
858 }
859
860 // Returns fences representing an allocation event, which can only happen on one pipeline at a time.
861 FRHITransientAllocationFences GetAllocateFences(FRDGViewableResource* Resource) const;
862
863 // Returns fences representing a deallocation event, which can happen on multiple pipes.
864 FRHITransientAllocationFences GetDeallocateFences(FRDGViewableResource* Resource) const;
865
866 inline ERHIPipeline GetPassPipeline(FRDGPassHandle PassHandle) const
867 {
868 return Passes[PassHandle]->Pipeline;
869 }
870
871 FRDGSubresourceState* AllocSubresource(const FRDGSubresourceState& Other);
872 FRDGSubresourceState* AllocSubresource();
873
875 // Async Setup Queue
876
877 struct FAsyncSetupOp
878 {
879 enum class EType : uint8
880 {
881 SetupPassResources,
882 CullRootBuffer,
883 CullRootTexture,
884 ReservedBufferCommit
885 };
886
887 static FAsyncSetupOp SetupPassResources(FRDGPass* Pass)
888 {
889 FAsyncSetupOp Op(EType::SetupPassResources);
890 Op.Pass = Pass;
891 return Op;
892 }
893
894 static FAsyncSetupOp CullRootBuffer(FRDGBuffer* Buffer)
895 {
896 FAsyncSetupOp Op(EType::CullRootBuffer);
897 Op.Buffer = Buffer;
898 return Op;
899 }
900
901 static FAsyncSetupOp CullRootTexture(FRDGTexture* Texture)
902 {
903 FAsyncSetupOp Op(EType::CullRootTexture);
904 Op.Texture = Texture;
905 return Op;
906 }
907
908 static FAsyncSetupOp ReservedBufferCommit(FRDGBuffer* Buffer, uint64 CommitSizeInBytes)
909 {
910 FAsyncSetupOp Op(EType::ReservedBufferCommit, CommitSizeInBytes);
911 Op.Buffer = Buffer;
912 return Op;
913 }
914
915 EType GetType() const
916 {
917 return (EType)Type;
918 }
919
920 uint64 Type : 8;
921 uint64 Payload : 48;
922
923 FAsyncSetupOp(EType InType, uint64 InPayload = 0)
924 : Type((uint8)InType)
925 , Payload(InPayload)
926 {
927 check(InPayload < (1ull << 48ull));
928 }
929
930 union
931 {
932 FRDGPass* Pass;
935 };
936 };
937
938 struct FAsyncSetupQueue
939 {
940 void Push(FAsyncSetupOp Op)
941 {
942 UE::TScopeLock Lock(Mutex);
943 Ops.Emplace(Op);
944 }
945
948 UE::Tasks::FTask LastTask;
949 bool bEnabled = false;
950
951 } AsyncSetupQueue;
952
953 void LaunchAsyncSetupQueueTask();
954 void ProcessAsyncSetupQueue();
955
957 // Reserved Buffer Commits
958
959 FRDGBufferReservedCommitHandle AcquireReservedCommitHandle(FRDGBuffer* Buffer)
960 {
962
963 if (Buffer->PendingCommitSize > 0)
964 {
965 Handle = FRDGBufferReservedCommitHandle(ReservedBufferCommitSizes.Num());
966 ReservedBufferCommitSizes.Emplace(Buffer->PendingCommitSize);
967 Buffer->PendingCommitSize = 0;
968 }
969
970 return Handle;
971 }
972
973 uint64 GetReservedCommitSize(FRDGBufferReservedCommitHandle Handle)
974 {
975 return Handle.IsValid() ? ReservedBufferCommitSizes[Handle.GetIndex()] : 0;
976 }
977
978 TArray<uint64, FRDGArrayAllocator> ReservedBufferCommitSizes;
979
981 // Culling
982
984
985 bool AddCullingDependency(FRDGProducerStatesByPipeline& LastProducers, const FRDGProducerState& NextState, ERHIPipeline NextPipeline);
986 void AddCullRootBuffer(FRDGBuffer* Buffer);
987 void AddCullRootTexture(FRDGTexture* Texture);
988 void AddLastProducersToCullStack(const FRDGProducerStatesByPipeline& LastProducers);
989 void FlushCullStack();
990
992 // Parallel Setup
993
994 struct
995 {
998
999 bool bEnabled = false;
1001
1002 UE::Tasks::ETaskPriority GetTaskPriority(UE::Tasks::ETaskPriority TaskPriority) const
1003 {
1004 return (UE::Tasks::ETaskPriority)FMath::Clamp((int32)TaskPriority - TaskPriorityBias, 0, (int32)UE::Tasks::ETaskPriority::Count - 1);
1005 }
1006
1007 } ParallelSetup;
1008
1009 void WaitForParallelSetupTasks(ERDGSetupTaskWaitPoint WaitPoint);
1010
1012 // Parallel Execution
1013
1014 bool bCompiling = false;
1015 bool bParallelCompileEnabled = false;
1016
1017 struct FParallelExecute
1018 {
1022 TOptional<UE::Tasks::FTaskEvent> DispatchTaskEventAwait;
1023 TOptional<UE::Tasks::FTaskEvent> DispatchTaskEventAsync;
1025
1026 bool IsEnabled() const { return TaskMode != ERDGPassTaskMode::Inline; }
1027
1028 static UE::Tasks::FTask LastAsyncExecuteTask;
1029
1030 } ParallelExecute;
1031
1032 void SetupParallelExecute(TStaticArray<void*, MAX_NUM_GPUS> const& QueryBatchData);
1033 void SetupDispatchPassExecute();
1034
1036 // Buffer Uploads
1037
1038 struct FUploadedBuffer
1039 {
1040 FUploadedBuffer() = default;
1041
1042 FUploadedBuffer(FRDGBuffer* InBuffer, const void* InData, uint64 InDataSize)
1043 : Buffer(InBuffer)
1044 , Data(InData)
1046 {}
1047
1049 : Buffer(InBuffer)
1050 , DataFillCallback(MoveTemp(InDataFillCallback))
1051 {}
1052
1054 : bUseFreeCallbacks(true)
1055 , Buffer(InBuffer)
1056 , Data(InData)
1058 , DataFreeCallback(MoveTemp(InDataFreeCallback))
1059 {}
1060
1062 : bUseDataCallbacks(true)
1063 , Buffer(InBuffer)
1064 , DataCallback(MoveTemp(InDataCallback))
1065 , DataSizeCallback(MoveTemp(InDataSizeCallback))
1066 {}
1067
1069 : bUseDataCallbacks(true)
1070 , bUseFreeCallbacks(true)
1071 , Buffer(InBuffer)
1072 , DataCallback(MoveTemp(InDataCallback))
1073 , DataSizeCallback(MoveTemp(InDataSizeCallback))
1074 , DataFreeCallback(MoveTemp(InDataFreeCallback))
1075 {}
1076
1077 bool bUseDataCallbacks = false;
1078 bool bUseFreeCallbacks = false;
1079 FRDGBuffer* Buffer{};
1080 const void* Data{};
1081 uint64 DataSize{};
1082
1083 // User provided data callbacks
1084 FRDGBufferInitialDataCallback DataCallback;
1085 FRDGBufferInitialDataSizeCallback DataSizeCallback;
1086 FRDGBufferInitialDataFreeCallback DataFreeCallback;
1087
1088 // RDG provided buffer pointer callback.
1089 FRDGBufferInitialDataFillCallback DataFillCallback;
1090 };
1091
1093
1094 void SubmitBufferUploads(FRHICommandList& InRHICmdList, UE::Tasks::FTaskEvent* AllocateUploadBuffersTask = nullptr);
1095
1097 // External Access Queue
1098
1102
1103 RENDERCORE_API void FlushAccessModeQueue();
1104
1106 // Post-Execution Callbacks
1107
1108 TArray<TUniqueFunction<void()>, FRDGArrayAllocator> PostExecuteCallbacks;
1109
1111 // Resource Deletion Flushing
1112
1113 FGraphEventArray WaitOutstandingTasks;
1114 bool bFlushResourcesRHI = false;
1115 FRHICommandListScopedExtendResourceLifetime ExtendResourceLifetimeScope;
1116
1117 void BeginFlushResourcesRHI();
1118 void EndFlushResourcesRHI();
1119
1121 // Clobber, Visualize, and DumpGPU tools.
1122
1124 struct FAuxiliaryPass
1125 {
1126 uint8 Clobber = 0;
1127 uint8 Visualize = 0;
1128 uint8 Dump = 0;
1129 uint8 FlushAccessModeQueue = 0;
1130
1131 bool IsDumpAllowed() const { return Dump == 0; }
1132 bool IsVisualizeAllowed() const { return Visualize == 0; }
1133 bool IsClobberAllowed() const { return Clobber == 0; }
1134 bool IsFlushAccessModeQueueAllowed() const { return FlushAccessModeQueue == 0; }
1135
1136 bool IsActive() const { return Clobber > 0 || Visualize > 0 || Dump > 0 || FlushAccessModeQueue > 0; }
1137
1138 } AuxiliaryPasses;
1139
1140 void SetupAuxiliaryPasses(FRDGPass* Pass);
1141
1142#if RDG_DUMP_RESOURCES
1143 void DumpNewGraphBuilder();
1145#endif
1146
1147#if RDG_ENABLE_DEBUG
1148 RENDERCORE_API void VisualizePassOutputs(const FRDGPass* Pass);
1149 RENDERCORE_API void ClobberPassOutputs(const FRDGPass* Pass);
1150#endif
1151
1153 // Multi-GPU
1154
1155#if WITH_MGPU
1157 bool bForceCopyCrossGPU = false;
1158
1159 void ForceCopyCrossGPU();
1160#endif
1161
1163 // Validation and Tracing
1164
1165 IF_RDG_ENABLE_TRACE(FRDGTrace Trace);
1166
1167#if RDG_ENABLE_DEBUG
1168 FRDGUserValidation UserValidation;
1169 FRDGBarrierValidation BarrierValidation;
1170#endif
1171
1173
1174 friend FRDGTrace;
1176 friend FRDGScopedCsvStatExclusive;
1177 friend FRDGScopedCsvStatExclusiveConditional;
1179};
1180
1182{
1183public:
1189
1191 {
1192 // Deprecated
1193 }
1194
1195private:
1196 FRDGBuilder& GraphBuilder;
1197};
1198
1199#define RDG_ASYNC_COMPUTE_BUDGET_SCOPE(GraphBuilder, AsyncComputeBudget) \
1200 FRDGAsyncComputeBudgetScopeGuard PREPROCESSOR_JOIN(FRDGAsyncComputeBudgetScope, __LINE__)(GraphBuilder, AsyncComputeBudget)
1201
1202#if WITH_MGPU
1203 #define RDG_GPU_MASK_SCOPE(GraphBuilder, GPUMask) SCOPED_GPU_MASK(GraphBuilder.RHICmdList, GPUMask)
1204#else
1205 #define RDG_GPU_MASK_SCOPE(GraphBuilder, GPUMask)
1206#endif
1207
1208#include "RenderGraphBuilder.inl" // IWYU pragma: export
1209
1214class IRHICommandContext;
1216
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#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
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
return true
Definition ExternalRpcRegistry.cpp:601
EPixelFormat
Definition PixelFormat.h:16
@ PF_Unknown
Definition PixelFormat.h:17
ERHIAccess
Definition RHIAccess.h:11
EAsyncComputeBudget
Definition RHIDefinitions.h:1317
#define GSupportsEfficientAsyncCompute
Definition RHIGlobals.h:812
ERHIPipeline
Definition RHIPipeline.h:13
EShaderPlatform
Definition RHIShaderPlatform.h:11
EShaderPlatform GMaxRHIShaderPlatform
Definition RHI.cpp:1335
TRDGHandle< FRDGBuffer, uint32 > FRDGBufferHandle
Definition RenderGraphDefinitions.h:777
#define IF_RDG_ENABLE_TRACE(Op)
Definition RenderGraphDefinitions.h:31
TRDGHandle< FRDGBuffer, uint16 > FRDGBufferReservedCommitHandle
Definition RenderGraphDefinitions.h:778
ERDGTextureFlags
Definition RenderGraphDefinitions.h:185
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
ERDGViewableResourceType
Definition RenderGraphDefinitions.h:231
ERDGBufferFlags
Definition RenderGraphDefinitions.h:163
TRDGHandle< FRDGPass, uint32 > FRDGPassHandle
Definition RenderGraphDefinitions.h:759
ERDGUnorderedAccessViewFlags
Definition RenderGraphDefinitions.h:221
ERDGSetupTaskWaitPoint
Definition RenderGraphDefinitions.h:209
ERDGResourceExtractionFlags
Definition RenderGraphDefinitions.h:263
ERDGInitialDataFlags
Definition RenderGraphDefinitions.h:274
TRDGHandle< FRDGTexture, uint32 > FRDGTextureHandle
Definition RenderGraphDefinitions.h:773
ERDGBuilderFlags
Definition RenderGraphDefinitions.h:108
ERDGPassTaskMode
Definition RenderGraphPass.h:173
EResourceType GetResourceType(FRDGViewableResource *Resource)
Definition UnifiedBuffer.cpp:284
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RobinHoodHashTable.h:1135
Definition RenderGraphAllocator.h:146
Definition RenderGraphBuilder.h:1182
FRDGAsyncComputeBudgetScopeGuard(FRDGBuilder &InGraphBuilder, EAsyncComputeBudget InAsyncComputeBudget)
Definition RenderGraphBuilder.h:1184
~FRDGAsyncComputeBudgetScopeGuard()
Definition RenderGraphBuilder.h:1190
Definition RenderGraphPass.h:108
Definition RenderGraphValidation.h:154
Definition RenderGraphBlackboard.h:57
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, UE::Tasks::ETaskPriority Priority, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
FRDGBuilder(const FRDGBuilder &)=delete
static RENDERCORE_API void TickPoolElements()
Definition RenderGraphBuilder.cpp:387
static RENDERCORE_API const UE::Tasks::FTask & GetAsyncExecuteTask()
Definition RenderGraphBuilder.cpp:676
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, PrerequisitesCollectionType &&Prerequisites, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
RENDERCORE_API void SetFlushResourcesRHI()
Definition RenderGraphBuilder.cpp:319
static RENDERCORE_API void WaitForAsyncExecuteTask()
Definition RenderGraphBuilder.cpp:667
RENDERCORE_API void UseExternalAccessMode(FRDGViewableResource *Resource, ERHIAccess ReadOnlyAccess, ERHIPipeline Pipelines=ERHIPipeline::Graphics)
Definition RenderGraphBuilder.cpp:887
static void DumpDraw(const FRDGEventName &DrawEventName)
Definition RenderGraphBuilder.h:452
void RemoveUnusedTextureWarning(FRDGTextureRef Texture)
Definition RenderGraphBuilder.h:458
FRDGBuffer * FindExternalBuffer(FRHIBuffer *Buffer) const
Definition RenderGraphBuilder.inl:23
const TRefCountPtr< FRDGPooledBuffer > & GetPooledBuffer(FRDGBufferRef Buffer) const
Definition RenderGraphBuilder.inl:741
static bool IsDumpingDraws()
Definition RenderGraphBuilder.h:455
FRDGBufferSRVRef CreateSRV(FRDGBufferRef Buffer, EPixelFormat Format)
Definition RenderGraphBuilder.h:121
bool IsParallelSetupEnabled() const
Definition RenderGraphBuilder.h:288
void QueueBufferExtraction(FRDGBufferRef Buffer, TRefCountPtr< FRDGPooledBuffer > *OutPooledBufferPtr)
Definition RenderGraphBuilder.inl:477
RENDERCORE_API void Execute()
Definition RenderGraphBuilder.cpp:1755
void AddPostExecuteCallback(TUniqueFunction< void()> &&Callback)
Definition RenderGraphBuilder.h:194
const TRefCountPtr< IPooledRenderTarget > & GetPooledTexture(FRDGTextureRef Texture) const
Definition RenderGraphBuilder.inl:735
void SkipInitialAsyncComputeFence()
Definition RenderGraphBuilder.inl:370
bool IsAsyncComputeEnabled() const
Definition RenderGraphBuilder.h:293
RENDERCORE_API FRDGTextureRef RegisterExternalTexture(const TRefCountPtr< IPooledRenderTarget > &ExternalPooledTexture, ERDGTextureFlags Flags=ERDGTextureFlags::None)
Definition RenderGraphBuilder.cpp:1070
void SetBufferAccessFinal(FRDGBufferRef Buffer, ERHIAccess Access)
Definition RenderGraphBuilder.inl:753
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, UE::Tasks::FPipe *Pipe, PrerequisitesCollectionType &&Prerequisites, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, UE::Tasks::FPipe *Pipe, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
FRDGPassRef AddDispatchPass(FRDGEventName &&Name, const ParameterStructType *ParameterStruct, ERDGPassFlags Flags, LaunchLambdaType &&LaunchLambda)
FRDGBlackboard Blackboard
Definition RenderGraphBuilder.h:434
RENDERCORE_API FRDGBufferRef RegisterExternalBuffer(const TRefCountPtr< FRDGPooledBuffer > &ExternalPooledBuffer, ERDGBufferFlags Flags, ERHIAccess AccessFinal)
RENDERCORE_API FRDGBufferRef RegisterExternalBuffer(const TRefCountPtr< FRDGPooledBuffer > &ExternalPooledBuffer, ERDGBufferFlags Flags=ERDGBufferFlags::None)
Definition RenderGraphBuilder.cpp:1111
void RemoveUnusedBufferWarning(FRDGBufferRef Buffer)
Definition RenderGraphBuilder.h:461
void SetPassWorkload(FRDGPass *Pass, uint32 Workload)
Definition RenderGraphBuilder.inl:365
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, UE::Tasks::FPipe *Pipe, PrerequisitesCollectionType &&Prerequisites, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
void UseInternalAccessMode(TArrayView< FRDGViewableResource *const > Resources)
Definition RenderGraphBuilder.h:401
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
static RENDERCORE_API bool IsImmediateMode()
Definition RenderGraphBuilder.cpp:457
FRDGPassRef AddPass(FRDGEventName &&Name, ERDGPassFlags Flags, ExecuteLambdaType &&ExecuteLambda)
TStaticArray< TArray< UE::Tasks::FTask, FRDGArrayAllocator >,(int32) ERDGSetupTaskWaitPoint::MAX > Tasks
Definition RenderGraphBuilder.h:997
FRDGPassRef AddPass(FRDGEventName &&Name, const FShaderParametersMetadata *ParametersMetadata, const void *ParameterStruct, ERDGPassFlags Flags, ExecuteLambdaType &&ExecuteLambda)
FRDGTextureUAVRef CreateUAV(FRDGTextureRef Texture, ERDGUnorderedAccessViewFlags Flags=ERDGUnorderedAccessViewFlags::None, EPixelFormat Format=PF_Unknown)
Definition RenderGraphBuilder.h:129
void QueueTextureExtraction(FRDGTextureRef Texture, TRefCountPtr< IPooledRenderTarget > *OutPooledTexturePtr, ERDGResourceExtractionFlags Flags=ERDGResourceExtractionFlags::None)
Definition RenderGraphBuilder.inl:447
TArrayView< PODType > AllocPODArrayView(uint32 Count)
Definition RenderGraphBuilder.inl:152
void SetCommandListStat(TStatId StatId)
Definition RenderGraphBuilder.h:250
static RENDERCORE_API void WaitForAsyncDeleteTask()
Definition RenderGraphBuilder.cpp:654
RENDERCORE_API void FlushSetupQueue()
Definition RenderGraphBuilder.cpp:1722
ObjectType * AllocObject(TArgs &&... Args)
Definition RenderGraphBuilder.inl:158
TArray< ObjectType, SceneRenderingAllocator > & AllocArray()
Definition RenderGraphBuilder.inl:164
FRDGBufferRef CreateBuffer(const FRDGBufferDesc &Desc, const TCHAR *Name, ERDGBufferFlags Flags=ERDGBufferFlags::None)
Definition RenderGraphBuilder.inl:65
PODType * AllocPOD()
Definition RenderGraphBuilder.inl:140
FRDGTextureRef CreateTexture(const FRDGTextureDesc &Desc, const TCHAR *Name, ERDGTextureFlags Flags=ERDGTextureFlags::None)
Definition RenderGraphBuilder.inl:41
static bool IsDumpingFrame()
Definition RenderGraphBuilder.h:440
RENDERCORE_API FRHIUniformBuffer * ConvertToExternalUniformBuffer(FRDGUniformBufferRef UniformBuffer)
Definition RenderGraphBuilder.cpp:744
TRDGUniformBufferRef< ParameterStructType > CreateUniformBuffer(const ParameterStructType *ParameterStruct)
Definition RenderGraphBuilder.inl:234
RENDERCORE_API const TRefCountPtr< IPooledRenderTarget > & ConvertToExternalTexture(FRDGTextureRef Texture)
Definition RenderGraphBuilder.cpp:728
ParameterStructType * AllocParameters()
Definition RenderGraphBuilder.inl:170
FRDGPassRef AddPass(FRDGEventName &&Name, const ParameterStructType *ParameterStruct, ERDGPassFlags Flags, ExecuteLambdaType &&ExecuteLambda)
void AddDispatchHint()
Definition RenderGraphBuilder.inl:501
PODType * AllocPODArray(uint32 Count)
Definition RenderGraphBuilder.inl:146
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, PrerequisitesCollectionType &&Prerequisites, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
RENDERCORE_API void AddPassDependency(FRDGPass *Producer, FRDGPass *Consumer)
Definition RenderGraphBuilder.cpp:1149
void QueueBufferUpload(FRDGBufferRef Buffer, TArrayView< ElementType, int32 > Container, FRDGBufferInitialDataFreeCallback &&InitialDataFreeCallback)
Definition RenderGraphBuilder.h:322
RENDERCORE_API void UseInternalAccessMode(FRDGViewableResource *Resource)
Definition RenderGraphBuilder.cpp:920
RENDERCORE_API const TRefCountPtr< FRDGPooledBuffer > & ConvertToExternalBuffer(FRDGBufferRef Buffer)
Definition RenderGraphBuilder.cpp:712
void QueueBufferUpload(FRDGBufferRef Buffer, const void *InitialData, uint64 InitialDataSize, ERDGInitialDataFlags InitialDataFlags=ERDGInitialDataFlags::None)
Definition RenderGraphBuilder.inl:375
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, UE::Tasks::FPipe *Pipe, UE::Tasks::ETaskPriority Priority=UE::Tasks::ETaskPriority::Normal, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
static RENDERCORE_API const UE::Tasks::FTask & GetAsyncDeleteTask()
Definition RenderGraphBuilder.cpp:660
void QueueBufferUpload(FRDGBufferRef Buffer, TArrayView< ElementType, int32 > Container, ERDGInitialDataFlags InitialDataFlags=ERDGInitialDataFlags::None)
Definition RenderGraphBuilder.h:313
void UseExternalAccessMode(TArrayView< FRDGViewableResource *const > Resources, ERHIAccess ReadOnlyAccess, ERHIPipeline Pipelines=ERHIPipeline::Graphics)
Definition RenderGraphBuilder.h:387
FRDGTexture * FindExternalTexture(FRHITexture *Texture) const
Definition RenderGraphBuilder.inl:5
int8 TaskPriorityBias
Definition RenderGraphBuilder.h:1000
void SetTextureAccessFinal(FRDGTextureRef Texture, ERHIAccess Access)
Definition RenderGraphBuilder.inl:747
bool bEnabled
Definition RenderGraphBuilder.h:999
FRDGBufferUAVRef CreateUAV(FRDGBufferRef Buffer, EPixelFormat Format, ERDGUnorderedAccessViewFlags Flags=ERDGUnorderedAccessViewFlags::None)
Definition RenderGraphBuilder.h:137
void QueueCommitReservedBuffer(FRDGBufferRef Buffer, uint64 CommitSizeInBytes)
Definition RenderGraphBuilder.inl:427
UE::Tasks::FTask AddSetupTask(TaskLambda &&Task, UE::Tasks::ETaskPriority Priority, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
RENDERCORE_API ~FRDGBuilder()
Definition RenderGraphBuilder.cpp:681
void * Alloc(uint64 SizeInBytes, uint32 AlignInBytes=16)
Definition RenderGraphBuilder.inl:134
Definition RenderGraphPass.h:736
Definition RenderGraphEvent.h:38
Definition RenderGraphPass.h:217
Definition RenderGraphResources.h:1196
Definition RenderGraphResources.h:537
Definition RenderGraphEvent.h:580
FRDGAllocator Task
Definition RenderGraphEvent.h:608
struct FRDGScopeState::@1708 Allocators
FRHICommandListImmediate & RHICmdList
Definition RenderGraphEvent.h:622
Definition RenderGraphResources.h:747
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:867
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
Definition RenderGraphResources.h:193
Definition RenderGraphValidation.h:41
Definition RenderGraphResources.h:496
Definition RenderGraphResources.h:291
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHICommandList.h:5053
Definition RHICommandList.h:3819
Definition RHICommandList.h:2735
Definition RHIResources.h:2153
Definition RHITransientResourceAllocator.h:23
Definition RHITransientResourceAllocator.h:441
Definition RHITransientResourceAllocator.h:399
Definition RHIResources.h:1232
Definition ShaderParameterMetadata.h:136
Definition RHIContext.h:693
Definition RHITransientResourceAllocator.h:536
Definition ArrayView.h:139
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition ConcurrentLinearAllocator.h:624
Definition UnrealString.h.inl:34
Definition RenderGraphAllocator.h:165
HandleType Last() const
Definition RenderGraphDefinitions.h:546
IndexType GetIndex() const
Definition RenderGraphDefinitions.h:358
Definition RenderGraphResources.h:251
Definition RefCounting.h:454
Definition ContainerAllocationPolicies.h:1662
Definition StaticArray.h:26
Definition StridedView.h:44
Definition FunctionFwd.h:19
Definition Mutex.h:18
Definition ScopeLock.h:21
Definition Pipe.h:29
Definition Task.h:236
bool IsEnabled()
Definition IAudioLinkFactory.cpp:13
ECollisionShapeType GetType(const Chaos::FImplicitObject &InGeometry)
Definition ChaosInterfaceWrapperCore.h:105
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Type
Definition PawnAction_Move.h:11
UE::FRecursiveMutex Mutex
Definition MeshPaintVirtualTexture.cpp:164
EType
Definition AccessDetection.h:11
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition RenderGraphBuilder.cpp:14
Definition RenderGraphResources.h:940
Definition RenderGraphResources.h:1122
Definition RenderGraphResources.h:1163
Definition RenderGraphResources.h:43
Definition RenderGraphResources.h:69
Definition RenderGraphDefinitions.h:627
Definition RenderGraphPass.h:58
Definition RHIResources.h:5248
Definition RHITransition.h:450
Definition RHITransition.h:282
Definition RendererInterface.h:494
Definition Optional.h:131
Definition LightweightStats.h:416