5#include "Containers/Array.h"
43 return !(*
this ==
Other);
48 static_assert(
sizeof(
Id.Passes) <= 8);
100 return *
this ==
Other;
121 bSeparateFenceTransitionNeeded =
true;
127 bTransitionNeeded =
true;
143 return bTransitionNeeded;
155 bool bTransitionNeeded =
false;
156 bool bSeparateFenceTransitionNeeded =
false;
162 const TCHAR* DebugName;
566template <
typename ParameterStructType,
typename ExecuteLambdaType>
570 class ExecuteLambdaTraits
574 static constexpr int32 kMaximumLambdaCaptureSize = 1024;
575 static_assert(
sizeof(
ExecuteLambdaType) <= kMaximumLambdaCaptureSize,
"The amount of data of captured for the pass looks abnormally high.");
577 template <
typename T>
579 : TLambdaTraits<decltype(&T::operator())>
581 template <
typename ReturnType,
typename ClassType,
typename ArgType>
582 struct TLambdaTraits<ReturnType(ClassType::*)(ArgType&) const>
584 using TRHICommandList =
ArgType;
585 using TRDGPass =
void;
586 static constexpr bool bIsTaskAsync =
false;
588 template <
typename ReturnType,
typename ClassType,
typename ArgType>
589 struct TLambdaTraits<ReturnType(ClassType::*)(ArgType&)>
591 using TRHICommandList =
ArgType;
592 using TRDGPass =
void;
593 using TRDGAsyncToken =
void;
594 static constexpr bool bIsTaskAsync =
false;
596 template <
typename ReturnType,
typename ClassType,
typename ArgType>
597 struct TLambdaTraits<ReturnType(ClassType::*)(FRDGAsyncTask, ArgType&) const>
599 using TRHICommandList =
ArgType;
600 using TRDGPass =
void;
601 static constexpr bool bIsTaskAsync =
true;
603 template <
typename ReturnType,
typename ClassType,
typename ArgType>
604 struct TLambdaTraits<ReturnType(ClassType::*)(FRDGAsyncTask, ArgType&)>
606 using TRHICommandList =
ArgType;
607 using TRDGPass =
void;
608 static constexpr bool bIsTaskAsync =
true;
610 template <
typename ReturnType,
typename ClassType,
typename ArgType1,
typename ArgType2>
611 struct TLambdaTraits<ReturnType(ClassType::*)(const ArgType1*, ArgType2&) const>
614 using TRDGPass
UE_DEPRECATED(5.5,
"An FRDGPass* lambda argument is no longer supported.") =
ArgType1;
615 static constexpr bool bIsTaskAsync =
false;
617 template <
typename ReturnType,
typename ClassType,
typename ArgType1,
typename ArgType2>
618 struct TLambdaTraits<ReturnType(ClassType::*)(const ArgType1*, ArgType2&)>
621 using TRDGPass
UE_DEPRECATED(5.5,
"An FRDGPass* lambda argument is no longer supported.") =
ArgType1;
622 static constexpr bool bIsTaskAsync =
false;
624 template <
typename ReturnType,
typename ClassType,
typename ArgType1,
typename ArgType2>
625 struct TLambdaTraits<ReturnType(ClassType::*)(const ArgType1*, FRDGAsyncTask, ArgType2&) const>
628 using TRDGPass
UE_DEPRECATED(5.5,
"An FRDGPass* lambda argument is no longer supported.") =
ArgType1;
629 static constexpr bool bIsTaskAsync =
true;
631 template <
typename ReturnType,
typename ClassType,
typename ArgType1,
typename ArgType2>
632 struct TLambdaTraits<ReturnType(ClassType::*)(const ArgType1*, FRDGAsyncTask, ArgType2&)>
635 using TRDGPass
UE_DEPRECATED(5.5,
"An FRDGPass* lambda argument is no longer supported.") =
ArgType1;
636 static constexpr bool bIsTaskAsync =
true;
640 using TRHICommandList =
typename TLambdaTraits<ExecuteLambdaType>::TRHICommandList;
642 static constexpr bool bIsCommandListImmediate = std::is_same_v<TRHICommandList, FRHICommandListImmediate>;
643 static constexpr bool bIsPassArgValid = !std::is_same_v<typename TLambdaTraits<ExecuteLambdaType>::TRDGPass,
void>;
646 : TLambdaTraits<ExecuteLambdaType>::bIsTaskAsync
650 static_assert((bIsCommandListImmediate && TLambdaTraits<ExecuteLambdaType>::bIsTaskAsync) ==
false,
"RDG pass is marked with RDG_TASK_ASYNC but is using the immediate command list. This is not allowed.");
672 if constexpr (ExecuteLambdaTraits::bIsPassArgValid)
674 ExecuteLambda(
this,
FRDGAsyncTask(),
static_cast<typename ExecuteLambdaTraits::TRHICommandList&
>(RHICmdList));
678 ExecuteLambda(
FRDGAsyncTask(),
static_cast<typename ExecuteLambdaTraits::TRHICommandList&
>(RHICmdList));
683 if constexpr (ExecuteLambdaTraits::bIsPassArgValid)
685 ExecuteLambda(
this,
static_cast<typename ExecuteLambdaTraits::TRHICommandList&
>(RHICmdList));
689 ExecuteLambda(
static_cast<typename ExecuteLambdaTraits::TRHICommandList&
>(RHICmdList));
701 ExecuteLambdaFunc(
static_cast<typename ExecuteLambdaTraits::TRHICommandList&
>(RHICmdList));
744 , StaticUniformBuffers(Pass->ParameterStruct.GetStaticUniformBuffers())
763template <
typename ParameterStructType,
typename LaunchLambdaType>
768 static constexpr int32 kMaximumLambdaCaptureSize = 1024;
769 static_assert(
sizeof(
LaunchLambdaType) <= kMaximumLambdaCaptureSize,
"The amount of data of captured for the pass looks abnormally high.");
796template <
typename ExecuteLambdaType>
798 :
public TRDGLambdaPass<FEmptyShaderParameters, ExecuteLambdaType>
810template <
typename ExecuteLambdaType>
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkNoEntry()
Definition AssertionMacros.h:316
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
#define DECLARE_CYCLE_STAT_WITH_FLAGS(CounterName, StatId, GroupId, StatFlags)
Definition Stats.h:670
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr void EnumRemoveFlags(Enum &Flags, Enum FlagsToRemove)
Definition EnumClassFlags.h:98
#define UE_SOURCE_LOCATION
Definition PreprocessorHelpers.h:71
ERHITransitionCreateFlags
Definition RHIDefinitions.h:1495
ERHIPipeline
Definition RHIPipeline.h:13
#define IF_RDG_ENABLE_DEBUG(Op)
Definition RenderGraphDefinitions.h:17
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
#define RDG_ENABLE_DEBUG
Definition RenderGraphDefinitions.h:13
ERDGPassTaskMode
Definition RenderGraphPass.h:173
ERDGBarrierLocation
Definition RenderGraphResources.h:57
constexpr uint32 HashCombineFast(uint32 A, uint32 B)
Definition TypeHash.h:74
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
if(Failed) console_printf("Failed.\n")
Definition RenderGraphAllocator.h:24
Definition RenderGraphPass.h:108
bool IsTransitionNeeded() const
Definition RenderGraphPass.h:141
void Reserve(uint32 TransitionCount)
Definition RenderGraphPass.h:135
RENDERCORE_API void AddTransition(FRDGViewableResource *Resource, FRDGTransitionInfo Info)
Definition RenderGraphPass.cpp:225
void SetUseCrossPipelineFence(bool bUseSeparateTransition)
Definition RenderGraphPass.h:117
RENDERCORE_API void CreateTransition(TConstArrayView< FRHITransitionInfo > TransitionsRHI)
Definition RenderGraphPass.cpp:253
RENDERCORE_API void Submit(FRHIComputeCommandList &RHICmdList, ERHIPipeline Pipeline)
Definition RenderGraphPass.cpp:291
RENDERCORE_API void AddAlias(FRDGViewableResource *Resource, const FRHITransientAliasingInfo &Info)
Definition RenderGraphPass.cpp:239
Definition RenderGraphPass.h:185
RENDERCORE_API void AddDependency(FRDGBarrierBatchBegin *BeginBatch)
Definition RenderGraphPass.cpp:302
void Reserve(uint32 TransitionBatchCount)
Definition RenderGraphPass.h:197
RENDERCORE_API FRDGBarrierBatchEndId GetId() const
Definition RenderGraphPass.cpp:281
FRDGBarrierBatchEnd(FRDGPass *InPass, ERDGBarrierLocation InBarrierLocation)
Definition RenderGraphPass.h:187
RENDERCORE_API bool IsPairedWith(const FRDGBarrierBatchBegin &BeginBatch) const
Definition RenderGraphPass.cpp:286
RENDERCORE_API void Submit(FRHIComputeCommandList &RHICmdList, ERHIPipeline Pipeline)
Definition RenderGraphPass.cpp:338
Definition RenderGraphValidation.h:154
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition RenderGraphPass.h:736
RENDERCORE_API FRHICommandList * CreateCommandList()
Definition RenderGraphPass.cpp:118
Definition RenderGraphPass.h:714
FRDGDispatchPass(FRDGEventName &&InName, FRDGParameterStruct InParameterStruct, ERDGPassFlags InFlags)
Definition RenderGraphPass.h:716
Definition RenderGraphEvent.h:38
RENDERCORE_API const TCHAR * GetTCHAR() const
Definition RenderGraphEvent.cpp:288
Definition RenderGraphParameter.h:213
bool HasRenderTargets() const
Definition RenderGraphParameter.h:239
RENDERCORE_API FRHIRenderPassInfo GetRenderPassInfo() const
Definition RenderGraphPass.cpp:35
RENDERCORE_API FUniformBufferStaticBindings GetStaticUniformBuffers() const
Definition RenderGraphPass.cpp:9
Definition RenderGraphPass.h:217
uint8 PacketBits_ParallelExecute
Definition RenderGraphPass.h:458
RENDERCORE_API FRDGBarrierBatchEnd & GetPrologueBarriersToEnd(FRDGAllocator &Allocator)
Definition RenderGraphPass.cpp:408
bool SkipRenderPassEnd() const
Definition RenderGraphPass.h:287
uint16 PackedBits
Definition RenderGraphPass.h:423
FRDGPassHandle GetGraphicsForkPass() const
Definition RenderGraphPass.h:328
virtual void LaunchDispatchPassTasks(FRDGDispatchPassBuilder &DispatchPassBuilder)
Definition RenderGraphPass.h:382
uint16 bAsyncComputeBegin
Definition RenderGraphPass.h:404
uint8 bExternalAccessPass
Definition RenderGraphPass.h:441
uint8 bParallelExecute
Definition RenderGraphPass.h:456
FRHIGPUMask GetGPUMask() const
Definition RenderGraphPass.h:344
FRDGPassHandle Handle
Definition RenderGraphPass.h:392
TArray< FRDGPass *, TInlineAllocator< 1, FRDGArrayAllocator > > ResourcesToBegin
Definition RenderGraphPass.h:533
const ERDGPassFlags Flags
Definition RenderGraphPass.h:389
uint8 PacketBits_AsyncSetupQueue
Definition RenderGraphPass.h:443
FRDGBarrierBatchBegin * EpilogueBarriersToBeginForAsyncCompute
Definition RenderGraphPass.h:540
bool IsSentinel() const
Definition RenderGraphPass.h:322
ERDGPassTaskMode GetTaskMode() const
Definition RenderGraphPass.h:262
FRDGPassHandle GraphicsJoinPass
Definition RenderGraphPass.h:466
uint32 Workload
Definition RenderGraphPass.h:393
FRDGPass(const FRDGPass &)=delete
TArray< FExternalAccessOp, FRDGArrayAllocator > ExternalAccessOps
Definition RenderGraphPass.h:530
RENDERCORE_API FRDGBarrierBatchBegin & GetPrologueBarriersToBegin(FRDGAllocator &Allocator, FRDGTransitionCreateQueue &CreateQueue)
Definition RenderGraphPass.cpp:364
FRDGPassHandle GraphicsForkPass
Definition RenderGraphPass.h:465
TArray< FRDGPassHandle, FRDGArrayAllocator > CrossPipelineConsumers
Definition RenderGraphPass.h:476
friend FRDGPassRegistry
Definition RenderGraphPass.h:559
FRDGPassHandle CrossPipelineProducer
Definition RenderGraphPass.h:462
uint16 bRenderPassOnlyWrites
Definition RenderGraphPass.h:412
bool IsMergedRenderPassEnd() const
Definition RenderGraphPass.h:277
RENDERCORE_API const TCHAR * GetName() const
uint16 bGraphicsJoin
Definition RenderGraphPass.h:409
bool IsAsyncComputeBegin() const
Definition RenderGraphPass.h:297
FRDGBarrierBatchBegin * EpilogueBarriersToBeginForAll
Definition RenderGraphPass.h:541
uint16 bSkipRenderPassBegin
Definition RenderGraphPass.h:400
bool IsGraphicsJoin() const
Definition RenderGraphPass.h:312
const ERHIPipeline Pipeline
Definition RenderGraphPass.h:391
FRDGPassHandle EpilogueBarrierPass
Definition RenderGraphPass.h:470
uint32 ParallelPassSetIndex
Definition RenderGraphPass.h:545
uint16 bDispatchPass
Definition RenderGraphPass.h:421
FRDGBarrierBatchEnd * EpilogueBarriersToEnd
Definition RenderGraphPass.h:543
FRDGScope const * GetScope() const
Definition RenderGraphPass.h:339
TArray< FTextureState, FRDGArrayAllocator > TextureStates
Definition RenderGraphPass.h:512
TArray< FRDGPass *, TInlineAllocator< 1, FRDGArrayAllocator > > ResourcesToEnd
Definition RenderGraphPass.h:534
bool IsMergedRenderPassBegin() const
Definition RenderGraphPass.h:272
uint8 bHasExternalOutputs
Definition RenderGraphPass.h:435
const FRDGEventName Name
Definition RenderGraphPass.h:387
uint8 bParallelExecuteBegin
Definition RenderGraphPass.h:452
bool IsAsyncComputeEnd() const
Definition RenderGraphPass.h:302
uint8 bEmptyParameters
Definition RenderGraphPass.h:432
FRDGParameterStruct GetParameters() const
Definition RenderGraphPass.h:247
ERDGPassFlags GetFlags() const
Definition RenderGraphPass.h:237
bool SkipRenderPassBegin() const
Definition RenderGraphPass.h:282
IF_RDG_ENABLE_DEBUG(FString FullPathIfDebug)
uint16 bDispatchAfterExecute
Definition RenderGraphPass.h:418
TArray< FRDGBarrierBatchBegin *, FRDGArrayAllocator > SharedEpilogueBarriersToBegin
Definition RenderGraphPass.h:542
uint16 bGraphicsFork
Definition RenderGraphPass.h:408
TArray< FBufferState, FRDGArrayAllocator > BufferStates
Definition RenderGraphPass.h:513
friend FRDGTrace
Definition RenderGraphPass.h:560
FRDGBarrierBatchBegin & GetEpilogueBarriersToBeginFor(FRDGAllocator &Allocator, FRDGTransitionCreateQueue &CreateQueue, ERHIPipeline PipelineForEnd)
Definition RenderGraphPass.h:359
bool IsAsyncCompute() const
Definition RenderGraphPass.h:292
const FRDGParameterStruct ParameterStruct
Definition RenderGraphPass.h:388
RENDERCORE_API FRDGBarrierBatchBegin & GetEpilogueBarriersToBeginForAll(FRDGAllocator &Allocator, FRDGTransitionCreateQueue &CreateQueue)
Definition RenderGraphPass.cpp:398
bool IsCulled() const
Definition RenderGraphPass.h:317
RENDERCORE_API FRDGBarrierBatchBegin & GetEpilogueBarriersToBeginForGraphics(FRDGAllocator &Allocator, FRDGTransitionCreateQueue &CreateQueue)
Definition RenderGraphPass.cpp:374
friend FRDGDispatchPassBuilder
Definition RenderGraphPass.h:562
uint8 bCulled
Definition RenderGraphPass.h:438
uint32 GetWorkload() const
Definition RenderGraphPass.h:257
uint8 bParallelExecuteEnd
Definition RenderGraphPass.h:453
uint16 bAsyncComputeEnd
Definition RenderGraphPass.h:405
FRDGPassHandle GetHandle() const
Definition RenderGraphPass.h:252
FRDGPassHandle PrologueBarrierPass
Definition RenderGraphPass.h:469
uint16 bSentinel
Definition RenderGraphPass.h:415
uint32 NumTransitionsToReserve
Definition RenderGraphPass.h:473
ERHIPipeline GetPipeline() const
Definition RenderGraphPass.h:242
FRDGBarrierBatchBegin * PrologueBarriersToBegin
Definition RenderGraphPass.h:537
const FRDGEventName & GetEventName() const
Definition RenderGraphPass.h:232
bool IsParallelExecuteAllowed() const
Definition RenderGraphPass.h:267
TArray< FRDGUniformBufferHandle, FRDGArrayAllocator > UniformBuffers
Definition RenderGraphPass.h:515
const ERDGPassTaskMode TaskMode
Definition RenderGraphPass.h:390
friend FRDGUserValidation
Definition RenderGraphPass.h:561
FRDGBarrierBatchBegin * EpilogueBarriersToBeginForGraphics
Definition RenderGraphPass.h:539
friend FRDGBuilder
Definition RenderGraphPass.h:558
FRDGScope * Scope
Definition RenderGraphPass.h:551
virtual ~FRDGPass()=default
TArray< FRDGViewHandle, FRDGArrayAllocator > Views
Definition RenderGraphPass.h:514
RENDERCORE_API FRDGBarrierBatchBegin & GetEpilogueBarriersToBeginForAsyncCompute(FRDGAllocator &Allocator, FRDGTransitionCreateQueue &CreateQueue)
Definition RenderGraphPass.cpp:388
FRDGBarrierBatchEnd * PrologueBarriersToEnd
Definition RenderGraphPass.h:538
virtual void Execute(FRHIComputeCommandList &RHICmdList)
Definition RenderGraphPass.h:381
uint16 bSkipRenderPassEnd
Definition RenderGraphPass.h:401
bool IsGraphicsFork() const
Definition RenderGraphPass.h:307
FRDGPassHandle GetGraphicsJoinPass() const
Definition RenderGraphPass.h:334
TArray< FRDGPass *, FRDGArrayAllocator > Producers
Definition RenderGraphPass.h:477
RENDERCORE_API FRDGBarrierBatchEnd & GetEpilogueBarriersToEnd(FRDGAllocator &Allocator)
Definition RenderGraphPass.cpp:417
Definition RenderGraphPass.h:816
FRDGSentinelPass(FRDGEventName &&Name, ERDGPassFlags InPassFlagsToAdd=ERDGPassFlags::None)
Definition RenderGraphPass.h:818
Definition RenderGraphResources.h:571
uint32 GetSubresourceCount() const
Definition RenderGraphResources.h:604
Definition RenderGraphValidation.h:41
Definition RenderGraphResources.h:291
EAccessMode
Definition RenderGraphResources.h:367
FRHICommandListImmediate & GetAsImmediate()
Definition RHICommandList.inl:21
Definition RHICommandList.h:3819
Definition RHICommandList.h:2735
void SetStaticUniformBuffers(const FUniformBufferStaticBindings &UniformBuffers)
Definition RHICommandList.h:2795
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
Definition RenderGraphPass.h:766
TRDGDispatchPass(FRDGEventName &&InName, const FShaderParametersMetadata *InParameterMetadata, const ParameterStructType *InParameterStruct, ERDGPassFlags InPassFlags, LaunchLambdaType &&InLaunchLambda)
Definition RenderGraphPass.h:772
Definition RenderGraphPass.h:799
TRDGEmptyLambdaPass(FRDGEventName &&InName, ERDGPassFlags InPassFlags, ExecuteLambdaType &&InExecuteLambda)
Definition RenderGraphPass.h:801
Definition RenderGraphPass.h:569
TRDGLambdaPass(FRDGEventName &&InName, const FShaderParametersMetadata *InParameterMetadata, const ParameterStructType *InParameterStruct, ERDGPassFlags InPassFlags, ExecuteLambdaType &&InExecuteLambda)
Definition RenderGraphPass.h:654
Definition SharedPointer.h:692
Definition RenderGraphDefinitions.h:103
Definition RenderGraphPass.h:33
bool operator!=(FRDGBarrierBatchBeginId Other) const
Definition RenderGraphPass.h:41
FRDGPassHandlesByPipeline Passes
Definition RenderGraphPass.h:53
ERHIPipeline PipelinesAfter
Definition RenderGraphPass.h:54
bool operator==(FRDGBarrierBatchBeginId Other) const
Definition RenderGraphPass.h:36
friend uint32 GetTypeHash(FRDGBarrierBatchBeginId Id)
Definition RenderGraphPass.h:46
FRDGBarrierBatchBeginId()=default
Definition RenderGraphPass.h:86
bool operator!=(FRDGBarrierBatchEndId Other) const
Definition RenderGraphPass.h:98
FRDGBarrierBatchEndId(FRDGPassHandle InPassHandle, ERDGBarrierLocation InBarrierLocation)
Definition RenderGraphPass.h:88
FRDGPassHandle PassHandle
Definition RenderGraphPass.h:103
ERDGBarrierLocation BarrierLocation
Definition RenderGraphPass.h:104
FRDGBarrierBatchEndId()=default
bool operator==(FRDGBarrierBatchEndId Other) const
Definition RenderGraphPass.h:93
Definition RenderGraphPass.h:498
FBufferState(FRDGBufferRef InBuffer)
Definition RenderGraphPass.h:501
FRDGSubresourceState State
Definition RenderGraphPass.h:506
FRDGBufferRef Buffer
Definition RenderGraphPass.h:505
FRDGSubresourceState * MergeState
Definition RenderGraphPass.h:507
uint32 ReferenceCount
Definition RenderGraphPass.h:508
Definition RenderGraphPass.h:518
FRDGViewableResource::EAccessMode Mode
Definition RenderGraphPass.h:527
FExternalAccessOp()=default
FRDGViewableResource * Resource
Definition RenderGraphPass.h:526
FExternalAccessOp(FRDGViewableResource *InResource, FRDGViewableResource::EAccessMode InMode)
Definition RenderGraphPass.h:521
Definition RenderGraphPass.h:480
FTextureState(FRDGTextureRef InTexture)
Definition RenderGraphPass.h:483
FRDGTextureSubresourceState State
Definition RenderGraphPass.h:492
FRDGTextureSubresourceState MergeState
Definition RenderGraphPass.h:493
FRDGTextureRef Texture
Definition RenderGraphPass.h:491
uint32 ReferenceCount
Definition RenderGraphPass.h:494
Definition RenderGraphEvent.h:236
Definition RenderGraphResources.h:69
Definition RenderGraphPass.h:58
uint64 CommitSize
Definition RenderGraphPass.h:79
uint64 AccessBefore
Definition RenderGraphPass.h:61
uint16 ArraySlice
Definition RenderGraphPass.h:71
uint8 PlaneSlice
Definition RenderGraphPass.h:73
uint64 ResourceTransitionFlags
Definition RenderGraphPass.h:65
uint64 ResourceHandle
Definition RenderGraphPass.h:63
uint64 ResourceType
Definition RenderGraphPass.h:64
struct FRDGTransitionInfo::@1709::@1712 Buffer
uint64 AccessAfter
Definition RenderGraphPass.h:62
struct FRDGTransitionInfo::@1709::@1711 Texture
uint8 MipIndex
Definition RenderGraphPass.h:72
Definition RHITransition.h:282
Definition RHITransition.h:475