UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RenderGraphBuilder.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6{
7 if (FRDGTexture* const* FoundTexturePtr = ExternalTextures.Find(ExternalTexture))
8 {
9 return *FoundTexturePtr;
10 }
11 return nullptr;
12}
13
15{
16 if (ExternalTexture)
17 {
18 return FindExternalTexture(ExternalTexture->GetRHI());
19 }
20 return nullptr;
21}
22
24{
25 if (FRDGBuffer* const* FoundBufferPtr = ExternalBuffers.Find(ExternalBuffer))
26 {
27 return *FoundBufferPtr;
28 }
29 return nullptr;
30}
31
33{
35 {
36 return FindExternalBuffer(ExternalBuffer->GetRHI());
37 }
38 return nullptr;
39}
40
42 const FRDGTextureDesc& Desc,
43 const TCHAR* Name,
45{
47
48#if !UE_BUILD_SHIPPING
49 ensureMsgf(OverrideDesc.Extent.X >= 1, TEXT("CreateTexture %s X size too small: %i, Min: %i, clamping"), Name ? Name : TEXT(""), OverrideDesc.Extent.X, 1);
50 ensureMsgf(OverrideDesc.Extent.Y >= 1, TEXT("CreateTexture %s Y size too small: %i, Min: %i, clamping"), Name ? Name : TEXT(""), OverrideDesc.Extent.Y, 1);
51 ensureMsgf(((uint32)OverrideDesc.Extent.X) <= GetMax2DTextureDimension(), TEXT("CreateTexture %s X size too large: %i, Max: %i, clamping"), Name ? Name : TEXT(""), OverrideDesc.Extent.X, GetMax2DTextureDimension());
52 ensureMsgf(((uint32)OverrideDesc.Extent.Y) <= GetMax2DTextureDimension(), TEXT("CreateTexture %s Y size too large: %i, Max: %i, clamping"), Name ? Name : TEXT(""), OverrideDesc.Extent.Y, GetMax2DTextureDimension());
53#endif
54 // Clamp the texture size to that which is permissible, otherwise it's a guaranteed crash.
55 OverrideDesc.Extent.X = FMath::Clamp<int32>(OverrideDesc.Extent.X, 1, GetMax2DTextureDimension());
56 OverrideDesc.Extent.Y = FMath::Clamp<int32>(OverrideDesc.Extent.Y, 1, GetMax2DTextureDimension());
57
61 IF_RDG_ENABLE_TRACE(Trace.AddResource(Texture));
62 return Texture;
63}
64
66 const FRDGBufferDesc& Desc,
67 const TCHAR* Name,
69{
71
73
74 // Clamp the buffer size to that which is permissible, otherwise it's a guaranteed crash.
75 OverrideDesc.BytesPerElement = FMath::Max<uint32>(1u, OverrideDesc.BytesPerElement);
76 OverrideDesc.NumElements = FMath::Max<uint32>(1u, OverrideDesc.NumElements);
77
80 IF_RDG_ENABLE_TRACE(Trace.AddResource(Buffer));
81 return Buffer;
82}
83
85 const FRDGBufferDesc& Desc,
86 const TCHAR* Name,
89{
90 // RDG no longer supports the legacy transient resource API.
92
93 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateCreateBuffer(Desc, Name, Flags));
95 FRDGBufferRef Buffer = Buffers.Allocate(Allocators.Root, Name, OverrideDesc, Flags, NumElementsCallback);
96 NumElementsCallbackBuffers.Emplace(Buffer);
98 IF_RDG_ENABLE_TRACE(Trace.AddResource(Buffer));
99 return Buffer;
100}
101
103{
104 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateCreateSRV(Desc));
107 return SRV;
108}
109
111{
112 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateCreateSRV(Desc));
113 FRDGBufferSRVRef SRV = Views.Allocate<FRDGBufferSRV>(Allocators.Root, Desc.Buffer->Name, Desc);
115 return SRV;
116}
117
125
133
135{
136 return Allocators.Root.Alloc(SizeInBytes, AlignInBytes);
137}
138
139template <typename PODType>
141{
142 return Allocators.Root.AllocUninitialized<PODType>();
143}
144
145template <typename PODType>
147{
148 return Allocators.Root.AllocUninitialized<PODType>(Count);
149}
150
151template <typename PODType>
156
157template <typename ObjectType, typename... TArgs>
158inline ObjectType* FRDGBuilder::AllocObject(TArgs&&... Args)
159{
160 return Allocators.Root.Alloc<ObjectType>(Forward<TArgs&&>(Args)...);
161}
162
163template <typename ObjectType>
168
169template <typename ParameterStructType>
174
175template <typename ParameterStructType>
182
183template <typename BaseParameterStructType>
188
189template <typename BaseParameterStructType>
191{
192 // NOTE: Contents are always zero! This might differ if shader parameters have a non-zero default initializer.
193 const int32 Stride = ParametersMetadata->GetSize();
195 FMemory::Memset(Contents, 0, Stride * NumStructs);
197
199 {
200 public:
203 , Layout(&InLayout)
204 {}
205
207 {
208 for (BaseParameterStructType& ParameterStruct : ParameterArray)
209 {
211 }
212 }
213
214 private:
217 };
218
220 return ParameterArray;
221}
222
223inline FRDGSubresourceState* FRDGBuilder::AllocSubresource(const FRDGSubresourceState& Other)
224{
225 return Allocators.Transition.AllocNoDestruct<FRDGSubresourceState>(Other);
226}
227
228inline FRDGSubresourceState* FRDGBuilder::AllocSubresource()
229{
230 return Allocators.Transition.AllocNoDestruct<FRDGSubresourceState>();
231}
232
233template <typename ParameterStructType>
235{
236#if !USE_NULL_RHI
237 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateCreateUniformBuffer(ParameterStruct, ParameterStructType::FTypeInfo::GetStructMetadata()));
238 auto* UniformBuffer = UniformBuffers.Allocate<TRDGUniformBuffer<ParameterStructType>>(Allocators.Root, ParameterStruct, ParameterStructType::FTypeInfo::GetStructMetadata()->GetShaderVariableName());
240 return UniformBuffer;
241#else
242 checkNoEntry();
243 return nullptr;
244#endif // !USE_NULL_RHI
245}
246
247#if !USE_NULL_RHI
248template <typename ParameterStructType, typename ExecuteLambdaType>
249FRDGPass* FRDGBuilder::AddPassInternal(
252 const ParameterStructType* ParameterStruct,
254 ExecuteLambdaType&& ExecuteLambda)
255{
257 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateAddPass(ParameterStruct, ParametersMetadata, Name, Flags));
258 FlushAccessModeQueue();
259 const TCHAR* NameString = Name.GetTCHAR();
260 FRDGPass* Pass = Allocators.Root.AllocNoDestruct<LambdaPassType>(
263 ParameterStruct,
264 OverridePassFlags(NameString, Flags),
265 Forward<ExecuteLambdaType&&>(ExecuteLambda));
266
267 IF_RDG_ENABLE_DEBUG(ClobberPassOutputs(Pass));
268 Passes.Insert(Pass);
269 SetupParameterPass(Pass);
270 return Pass;
271}
272#endif // !USE_NULL_RHI
273
274template <typename ExecuteLambdaType>
278 ExecuteLambdaType&& ExecuteLambda)
279{
280#if !USE_NULL_RHI
284 FlushAccessModeQueue();
286 SetupEmptyPass(Pass);
287 return Pass;
288#else
289 checkNoEntry();
290 return nullptr;
291#endif // !USE_NULL_RHI
292}
293
294template <typename ExecuteLambdaType>
298 const void* ParameterStruct,
300 ExecuteLambdaType&& ExecuteLambda)
301{
302#if !USE_NULL_RHI
303 return AddPassInternal(Forward<FRDGEventName&&>(Name), ParametersMetadata, ParameterStruct, Flags, Forward<ExecuteLambdaType&&>(ExecuteLambda));
304#else
305 checkNoEntry();
306 return nullptr;
307#endif // !USE_NULL_RHI
308}
309
310template <typename ParameterStructType, typename ExecuteLambdaType>
313 const ParameterStructType* ParameterStruct,
315 ExecuteLambdaType&& ExecuteLambda)
316{
317#if !USE_NULL_RHI
318 return AddPassInternal(Forward<FRDGEventName&&>(Name), ParameterStructType::FTypeInfo::GetStructMetadata(), ParameterStruct, Flags, Forward<ExecuteLambdaType&&>(ExecuteLambda));
319#else
320 checkNoEntry();
321 return nullptr;
322#endif // !USE_NULL_RHI
323}
324
325template <typename ParameterStructType, typename LaunchLambdaType>
328 const ParameterStructType* ParameterStruct,
330 LaunchLambdaType&& LaunchLambda)
331{
332#if !USE_NULL_RHI
334 const FShaderParametersMetadata* ParametersMetadata = ParameterStructType::FTypeInfo::GetStructMetadata();
335
337 {
339 }
340
341 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateAddPass(ParameterStruct, ParametersMetadata, Name, Flags));
342
343 FlushAccessModeQueue();
344
345 const TCHAR* NameString = Name.GetTCHAR();
346
347 FRDGDispatchPass* Pass = Allocators.Root.AllocNoDestruct<DispatchPassType>(
350 ParameterStruct,
351 OverridePassFlags(NameString, Flags),
352 Forward<LaunchLambdaType&&>(LaunchLambda));
353
354 IF_RDG_ENABLE_DEBUG(ClobberPassOutputs(Pass));
355 Passes.Insert(Pass);
356 DispatchPasses.Emplace(Pass);
357 SetupParameterPass(Pass);
358 return Pass;
359#else
360 checkNoEntry();
361 return nullptr;
362#endif // !USE_NULL_RHI
363}
364
366{
367 Pass->Workload = Workload;
368}
369
371{
372 bInitialAsyncComputeFence = false;
373}
374
376{
377 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateUploadBuffer(Buffer, InitialData, InitialDataSize));
378
380 {
383 InitialData = InitialDataCopy;
384 }
385
386 UploadedBuffers.Emplace(Buffer, InitialData, InitialDataSize);
387 Buffer->bQueuedForUpload = 1;
388}
389
391{
392 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateUploadBuffer(Buffer, InitialData, InitialDataSize));
393
394 if (InitialDataSize == 0)
395 {
396 return;
397 }
398
399 UploadedBuffers.Emplace(Buffer, InitialData, InitialDataSize, MoveTemp(InitialDataFreeCallback));
400 Buffer->bQueuedForUpload = 1;
401}
402
410
418
426
428{
429 IF_RDG_ENABLE_DEBUG(UserValidation.ValidateCommitBuffer(Buffer, CommitSizeInBytes));
430 if (!AsyncSetupQueue.bEnabled)
431 {
432 Buffer->PendingCommitSize = CommitSizeInBytes;
433 }
434 else
435 {
436 AsyncSetupQueue.Push(FAsyncSetupOp::ReservedBufferCommit(Buffer, CommitSizeInBytes));
437 }
438 Buffer->PooledBuffer->SetCommittedSize(CommitSizeInBytes);
439}
440
446
448{
450
451 *OutTexturePtr = nullptr;
452
453 const bool bWasExtracted = Texture->bExtracted;
454
455 Texture->bExtracted = true;
456
458 {
459 if (Texture->TransientExtractionHint != FRDGTexture::ETransientExtractionHint::Disable)
460 {
462 }
463 }
464 else
465 {
467 }
468
469 ExtractedTextures.Emplace(Texture, OutTexturePtr);
470
471 if (!bWasExtracted)
472 {
473 AsyncSetupQueue.Push(FAsyncSetupOp::CullRootTexture(Texture));
474 }
475}
476
478{
480
481 *OutBufferPtr = nullptr;
482
483 const bool bWasExtracted = Buffer->bExtracted;
484
485 Buffer->bExtracted = true;
486 Buffer->bForceNonTransient = true;
487 ExtractedBuffers.Emplace(Buffer, OutBufferPtr);
488
489 if (!bWasExtracted)
490 {
491 AsyncSetupQueue.Push(FAsyncSetupOp::CullRootBuffer(Buffer));
492 }
493}
494
500
502{
503 if (IsImmediateMode())
504 {
506 }
507 else if (Passes.Num() > 0)
508 {
509 Passes[Passes.Last()]->bDispatchAfterExecute = 1;
510 }
511}
512
513template <typename TaskLambdaType>
515{
516 return AddSetupTask(MoveTemp(TaskLambda), nullptr, TArray<UE::Tasks::FTask>{}, UE::Tasks::ETaskPriority::Normal, bCondition, WaitPoint);
517}
518
519template <typename TaskLambdaType>
520inline UE::Tasks::FTask FRDGBuilder::AddSetupTask(TaskLambdaType&& TaskLambda, UE::Tasks::ETaskPriority Priority, bool bCondition, ERDGSetupTaskWaitPoint WaitPoint)
521{
523}
524
525template <typename TaskLambdaType>
527 TaskLambdaType&& TaskLambda,
528 UE::Tasks::FPipe* Pipe,
529 UE::Tasks::ETaskPriority Priority,
530 bool bCondition,
532{
534}
535
536template <typename TaskLambdaType, typename PrerequisitesCollectionType>
538 TaskLambdaType&& TaskLambda,
539 PrerequisitesCollectionType&& Prerequisites,
540 UE::Tasks::ETaskPriority Priority,
541 bool bCondition,
543{
544 return AddSetupTask(MoveTemp(TaskLambda), nullptr, Forward<PrerequisitesCollectionType&&>(Prerequisites), Priority, bCondition);
545}
546
547namespace UE::RDG
548{
550 inline bool IsCompleted(const TaskCollectionType& Tasks)
551 {
552 for (const UE::Tasks::FTask& Task : Tasks)
553 {
554 if (!Task.IsCompleted())
555 {
556 return false;
557 }
558 }
559 return true;
560 }
561
563 inline bool IsCompleted(const TaskType& Task)
564 {
565 return Task.IsCompleted();
566 }
567
569 inline void Wait(const TaskCollectionType& Tasks)
570 {
571 if (!Tasks.IsEmpty())
572 {
574 }
575 }
576
578 inline void Wait(const TaskType& Task)
579 {
580 Task.Wait();
581 }
582}
583
584template <typename TaskLambdaType, typename PrerequisitesCollectionType>
586 TaskLambdaType&& TaskLambda,
587 UE::Tasks::FPipe* Pipe,
588 PrerequisitesCollectionType&& Prerequisites,
589 UE::Tasks::ETaskPriority Priority,
590 bool bCondition,
592{
594
595 if (!bCondition || IsImmediateMode())
596 {
597 UE::RDG::Wait(Prerequisites);
598 }
599
600 auto OuterLambda = [TaskLambda = MoveTemp(TaskLambda)]() mutable
601 {
603 TaskLambda();
604 };
605
607
608 const bool bParallelEnabled = bCompiling ? bParallelCompileEnabled : ParallelSetup.bEnabled;
609
610 if (!bCondition || (!bParallelEnabled && UE::RDG::IsCompleted(Prerequisites)))
611 {
612 OuterLambda();
613 }
614 else if (Pipe)
615 {
616 Task = Pipe->Launch(TEXT("FRDGBuilder::AddSetupTask"), MoveTemp(OuterLambda), Forward<PrerequisitesCollectionType&&>(Prerequisites), ParallelSetup.GetTaskPriority(Priority), ExtendedTaskPriority);
617 }
618 else
619 {
620 Task = UE::Tasks::Launch(TEXT("FRDGBuilder::AddSetupTask"), MoveTemp(OuterLambda), Forward<PrerequisitesCollectionType&&>(Prerequisites), ParallelSetup.GetTaskPriority(Priority), ExtendedTaskPriority);
621 }
622
623 if (Task.IsValid())
624 {
625 ParallelSetup.Tasks[(int32)WaitPoint].Emplace(Task);
626 }
627
628 return Task;
629}
630
631template <typename TaskLambdaType>
633{
634 return AddCommandListSetupTask(MoveTemp(TaskLambda), nullptr, TArray<UE::Tasks::FTask>{}, UE::Tasks::ETaskPriority::Normal, bCondition, WaitPoint);
635}
636
637template <typename TaskLambdaType>
638inline UE::Tasks::FTask FRDGBuilder::AddCommandListSetupTask(TaskLambdaType&& TaskLambda, UE::Tasks::ETaskPriority TaskPriority, bool bCondition, ERDGSetupTaskWaitPoint WaitPoint)
639{
640 return AddCommandListSetupTask(MoveTemp(TaskLambda), nullptr, TArray<UE::Tasks::FTask>{}, TaskPriority, bCondition, WaitPoint);
641}
642
643template <typename TaskLambdaType>
645 TaskLambdaType&& TaskLambda,
646 UE::Tasks::FPipe* Pipe,
647 UE::Tasks::ETaskPriority Priority,
648 bool bCondition,
650{
652}
653
654template <typename TaskLambdaType, typename PrerequisitesCollectionType>
656 TaskLambdaType&& TaskLambda,
657 PrerequisitesCollectionType&& Prerequisites,
658 UE::Tasks::ETaskPriority Priority,
659 bool bCondition,
661{
663}
664
665template <typename TaskLambdaType, typename PrerequisitesCollectionType>
667 TaskLambdaType&& TaskLambda,
668 UE::Tasks::FPipe* Pipe,
669 PrerequisitesCollectionType&& Prerequisites,
670 UE::Tasks::ETaskPriority Priority,
671 bool bCondition,
673{
675
676 if (!bCondition || IsImmediateMode())
677 {
678 UE::RDG::Wait(Prerequisites);
679 }
680
681 const bool bParallelEnabled = bCompiling ? bParallelCompileEnabled : ParallelSetup.bEnabled;
682
683 // Need a separate command list with inline tasks when prerequisites are not complete yet.
684 const bool bAllocateCommandListForTask = bCondition && (bParallelEnabled || !UE::RDG::IsCompleted(Prerequisites));
685
687
689 {
690 SCOPED_NAMED_EVENT(CreateCommandList, FColor::Emerald);
693 }
694
696 {
698
700 {
701 RHICmdListTask->SwitchPipeline(ERHIPipeline::Graphics);
702 }
703
705
707 {
708 RHICmdListTask->FinishRecording();
709 }
710 };
711
713
715 {
716 OuterLambda();
717 }
718 else if (Pipe)
719 {
720 Task = Pipe->Launch(TEXT("FRDGBuilder::AddCommandListSetupTask"), MoveTemp(OuterLambda), Forward<PrerequisitesCollectionType&&>(Prerequisites), ParallelSetup.GetTaskPriority(Priority), ExtendedTaskPriority);
721 }
722 else
723 {
724 Task = UE::Tasks::Launch(TEXT("FRDGBuilder::AddCommandListSetupTask"), MoveTemp(OuterLambda), Forward<PrerequisitesCollectionType&&>(Prerequisites), ParallelSetup.GetTaskPriority(Priority), ExtendedTaskPriority);
725 }
726
727 if (Task.IsValid())
728 {
729 ParallelSetup.Tasks[(int32)WaitPoint].Emplace(Task);
730 }
731
732 return Task;
733}
734
740
746
752
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkNoEntry()
Definition AssertionMacros.h:316
@ EParallelRenderingThread
#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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define SCOPED_NAMED_EVENT(Name, Color)
Definition PlatformMisc.h:180
ERHIAccess
Definition RHIAccess.h:11
#define SHADER_PARAMETER_STRUCT_ALIGNMENT
Definition RHIDefinitions.h:25
uint32 GetMax2DTextureDimension()
Definition RHIGlobals.h:935
#define IF_RDG_ENABLE_TRACE(Op)
Definition RenderGraphDefinitions.h:31
ERDGTextureFlags
Definition RenderGraphDefinitions.h:185
#define IF_RDG_ENABLE_DEBUG(Op)
Definition RenderGraphDefinitions.h:17
ERDGPassFlags
Definition RenderGraphDefinitions.h:128
ERDGBufferFlags
Definition RenderGraphDefinitions.h:163
ERDGUnorderedAccessViewFlags
Definition RenderGraphDefinitions.h:221
ERDGSetupTaskWaitPoint
Definition RenderGraphDefinitions.h:209
ERDGResourceExtractionFlags
Definition RenderGraphDefinitions.h:263
ERDGInitialDataFlags
Definition RenderGraphDefinitions.h:274
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RenderGraphResources.h:1426
Definition RenderGraphResources.h:1452
Definition RenderGraphResources.h:1321
FRDGBuffer * FindExternalBuffer(FRHIBuffer *Buffer) const
Definition RenderGraphBuilder.inl:23
const TRefCountPtr< FRDGPooledBuffer > & GetPooledBuffer(FRDGBufferRef Buffer) const
Definition RenderGraphBuilder.inl:741
void QueueBufferExtraction(FRDGBufferRef Buffer, TRefCountPtr< FRDGPooledBuffer > *OutPooledBufferPtr)
Definition RenderGraphBuilder.inl:477
const TRefCountPtr< IPooledRenderTarget > & GetPooledTexture(FRDGTextureRef Texture) const
Definition RenderGraphBuilder.inl:735
void SkipInitialAsyncComputeFence()
Definition RenderGraphBuilder.inl:370
void SetBufferAccessFinal(FRDGBufferRef Buffer, ERHIAccess Access)
Definition RenderGraphBuilder.inl:753
FRDGPassRef AddDispatchPass(FRDGEventName &&Name, const ParameterStructType *ParameterStruct, ERDGPassFlags Flags, LaunchLambdaType &&LaunchLambda)
FRDGTextureUAVRef CreateUAV(const FRDGTextureUAVDesc &Desc, ERDGUnorderedAccessViewFlags Flags=ERDGUnorderedAccessViewFlags::None)
Definition RenderGraphBuilder.inl:118
void SetPassWorkload(FRDGPass *Pass, uint32 Workload)
Definition RenderGraphBuilder.inl:365
UE::Tasks::FTask AddCommandListSetupTask(TaskLambda &&Task, bool bCondition=true, ERDGSetupTaskWaitPoint WaitPoint=ERDGSetupTaskWaitPoint::Compile)
static RENDERCORE_API bool IsImmediateMode()
Definition RenderGraphBuilder.cpp:457
void QueueTextureExtraction(FRDGTextureRef Texture, TRefCountPtr< IPooledRenderTarget > *OutPooledTexturePtr, ERDGResourceExtractionFlags Flags=ERDGResourceExtractionFlags::None)
Definition RenderGraphBuilder.inl:447
TArrayView< PODType > AllocPODArrayView(uint32 Count)
Definition RenderGraphBuilder.inl:152
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
TRDGUniformBufferRef< ParameterStructType > CreateUniformBuffer(const ParameterStructType *ParameterStruct)
Definition RenderGraphBuilder.inl:234
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
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)
FRDGTextureSRVRef CreateSRV(const FRDGTextureSRVDesc &Desc)
Definition RenderGraphBuilder.inl:102
FRDGTexture * FindExternalTexture(FRHITexture *Texture) const
Definition RenderGraphBuilder.inl:5
void SetTextureAccessFinal(FRDGTextureRef Texture, ERHIAccess Access)
Definition RenderGraphBuilder.inl:747
void QueueCommitReservedBuffer(FRDGBufferRef Buffer, uint64 CommitSizeInBytes)
Definition RenderGraphBuilder.inl:427
void * Alloc(uint64 SizeInBytes, uint32 AlignInBytes=16)
Definition RenderGraphBuilder.inl:134
Definition RenderGraphPass.h:714
Definition RenderGraphEvent.h:38
static void ClearUniformBuffers(void *Contents, const FRHIUniformBufferLayout *Layout)
Definition RenderGraphParameters.inl:61
Definition RenderGraphPass.h:217
Definition RenderGraphResources.h:1196
const TCHAR *const Name
Definition RenderGraphResources.h:137
FRDGAllocator Task
Definition RenderGraphEvent.h:608
struct FRDGScopeState::@1708 Allocators
FRHICommandListImmediate & RHICmdList
Definition RenderGraphEvent.h:622
Definition RenderGraphResources.h:747
FRDGTextureRef Texture
Definition RenderGraphResources.h:833
Definition RenderGraphResources.h:839
Definition RenderGraphResources.h:867
FRDGTextureRef Texture
Definition RenderGraphResources.h:899
Definition RenderGraphResources.h:905
Definition RenderGraphResources.h:571
RENDERCORE_API void ValidateCreateUAV(const FRDGTextureUAVDesc &Desc)
RENDERCORE_API void ValidateExtractBuffer(FRDGBufferRef Buffer, TRefCountPtr< FRDGPooledBuffer > *OutBufferPtr)
RENDERCORE_API void ValidateExtractTexture(FRDGTextureRef Texture, TRefCountPtr< IPooledRenderTarget > *OutTexturePtr)
RENDERCORE_API void ValidateGetPooledBuffer(FRDGBufferRef Buffer) const
RENDERCORE_API void ValidateSetAccessFinal(FRDGViewableResource *Resource, ERHIAccess AccessFinal)
RENDERCORE_API void ValidateCreateTexture(const FRDGTextureDesc &Desc, const TCHAR *Name, ERDGTextureFlags Flags)
RENDERCORE_API void ValidateUploadBuffer(FRDGBufferRef Buffer, const void *InitialData, uint64 InitialDataSize)
RENDERCORE_API void ValidateCreateBuffer(const FRDGBufferDesc &Desc, const TCHAR *Name, ERDGBufferFlags Flags)
RENDERCORE_API void ValidateGetPooledTexture(FRDGTextureRef Texture) const
RENDERCORE_API void ValidateCreateSRV(const FRDGTextureSRVDesc &Desc)
RENDERCORE_API void ValidateAddPass(const void *ParameterStruct, const FShaderParametersMetadata *Metadata, const FRDGEventName &Name, ERDGPassFlags Flags)
RENDERCORE_API void ValidateCreateUniformBuffer(const void *ParameterStruct, const FShaderParametersMetadata *Metadata)
RENDERCORE_API void ValidateCommitBuffer(FRDGBufferRef Buffer, uint64 CommitSizeInBytes)
Definition RHIResources.h:1581
FRHIGPUMask GetGPUMask() const
Definition RHICommandList.h:734
RHI_API void ImmediateFlush(EImmediateFlushType::Type FlushType, ERHISubmitFlags SubmitFlags=ERHISubmitFlags::None)
Definition RHICommandList.cpp:1573
RHI_API void QueueAsyncCommandListSubmit(TArrayView< FQueuedCommandList > CommandLists, ETranslatePriority ParallelTranslatePriority=ETranslatePriority::Disabled, int32 MinDrawsPerTranslate=0)
Definition RHICommandList.cpp:1598
Definition RHICommandList.h:3819
Definition RHIResources.h:2153
Definition ShaderParameterMetadata.h:136
Definition CoreGlobals.h:672
Definition ArrayView.h:139
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition RenderGraphPass.h:766
Definition RenderGraphPass.h:799
HandleType Last() const
Definition RenderGraphDefinitions.h:546
int32 Num() const
Definition RenderGraphDefinitions.h:551
DerivedType * Allocate(FRDGAllocator &Allocator, TArgs &&... Args)
Definition RenderGraphDefinitions.h:470
void Insert(ObjectType *Object)
Definition RenderGraphDefinitions.h:463
Definition RenderGraphPass.h:569
Definition RenderGraphResources.h:251
Definition RefCounting.h:454
Definition StridedView.h:44
Definition Pipe.h:29
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
@ DispatchToRHIThread
Definition RHICommandList.h:4575
Definition RenderGraphBuilder.inl:548
bool IsCompleted(const TaskCollectionType &Tasks)
Definition RenderGraphBuilder.inl:550
void Wait(const TaskCollectionType &Tasks)
Definition RenderGraphBuilder.inl:569
EExtendedTaskPriority
Definition TaskPrivate.h:60
TTask< TInvokeResult_T< TaskBodyType > > Launch(const TCHAR *DebugName, TaskBodyType &&TaskBody, ETaskPriority Priority=ETaskPriority::Normal, EExtendedTaskPriority ExtendedPriority=EExtendedTaskPriority::None, ETaskFlags Flags=ETaskFlags::None)
Definition Task.h:266
bool Wait(const TaskCollectionType &Tasks, FTimespan InTimeout=FTimespan::MaxValue())
Definition Task.h:381
static CORE_API const FColor Emerald
Definition Color.h:762
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition RenderGraphResources.h:940
Definition RenderGraphResources.h:1122
FRDGBufferRef Buffer
Definition RenderGraphResources.h:1158
Definition RenderGraphResources.h:1163
FRDGBufferRef Buffer
Definition RenderGraphResources.h:1188
Definition RenderGraphResources.h:69
Definition RenderGraphDefinitions.h:627
FIntPoint Extent
Definition RHIResources.h:1856
Definition RHIResources.h:1150
Definition RendererInterface.h:494
FRHITexture * GetRHI() const
Definition RendererInterface.h:520
IntType X
Definition IntPoint.h:34