44 return FWorkGroupInfo{ {
uint32(WorkGroupWorkBoundary),
uint32(WorkGroupWorkBoundary >> 32u) }, FirstItem, NumItems, CarryOverStartOffset, Payload };
65 | ((NumChildren - 1u) << 1u)
81 Items.Empty(NumItems);
87 template <
typename PayloadGeneratorType>
122 return Items.IsEmpty();
128 template <
typename PayloadGeneratorType>
171template <
typename ParentInfoType>
175 struct FPayloadGenerator;
190 PayloadGenerator.ParentItemOffset =
uint32(ParentInfos.Num());
225 struct FPayloadGenerator
227 uint32 CurrentWorkGroupFirstParentItem = 0u;
228 uint32 ParentItemOffset = 0u;
230 uint32 GetItemPayload()
const
232 return ParentItemOffset - CurrentWorkGroupFirstParentItem;
235 uint32 GetWorkGroupPayload()
237 uint32 Tmp = CurrentWorkGroupFirstParentItem;
238 CurrentWorkGroupFirstParentItem = ParentItemOffset;
244 FPayloadGenerator PayloadGenerator;
#define checkSlow(expr)
Definition AssertionMacros.h:332
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FRDGBufferRef CreateStructuredBuffer(FRDGBuilder &GraphBuilder, const TCHAR *Name, uint32 BytesPerElement, uint32 NumElements, const void *InitialData, uint64 InitialDataSize, ERDGInitialDataFlags InitialDataFlags)
Definition RenderGraphUtils.cpp:888
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define SHADER_PARAMETER_STRUCT_INCLUDE(StructType, MemberName)
Definition ShaderParameterMacros.h:1895
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition GPUWorkGroupLoadBalancer.h:16
uint64 CurrentWorkGroupWorkBoundary
Definition GPUWorkGroupLoadBalancer.h:165
FIntVector GetWrappedCsGroupCount() const
Definition GPUWorkGroupLoadBalancer.cpp:29
uint32 CurrentWorkGroupCarryOver
Definition GPUWorkGroupLoadBalancer.h:164
void Add(PayloadGeneratorType &PayloadGenerator, uint32 NumChildren)
Definition GPUWorkGroupLoadBalancer.h:88
static constexpr uint32 NumItemMask
Definition GPUWorkGroupLoadBalancer.h:23
static constexpr uint32 PayLoadBits
Definition GPUWorkGroupLoadBalancer.h:24
FWorkGroupInfo PackWorkGroupInfo(uint32 FirstItem, uint32 NumItems, uint32 Payload, uint32 CarryOverStartOffset, uint64 WorkGroupWorkBoundary)
Definition GPUWorkGroupLoadBalancer.h:38
uint32 CurrentWorkGroupFirstItem
Definition GPUWorkGroupLoadBalancer.h:162
TArray< FPackedItem, SceneRenderingAllocator > Items
Definition GPUWorkGroupLoadBalancer.h:158
uint32 CurrentWorkGroupPrefixSum
Definition GPUWorkGroupLoadBalancer.h:160
void FinalizeBatches(PayloadGeneratorType &PayloadGenerator)
Definition GPUWorkGroupLoadBalancer.h:129
uint32 CurrentWorkGroupNumItems
Definition GPUWorkGroupLoadBalancer.h:161
uint32 TotalChildren
Definition GPUWorkGroupLoadBalancer.h:163
void FinalizeParametersAsync(FShaderParameters &OutShaderParameters)
Definition GPUWorkGroupLoadBalancer.cpp:22
bool IsEmpty() const
Definition GPUWorkGroupLoadBalancer.h:120
FPackedItem PackItem(bool bHasCarryOver, uint32 NumChildren, uint32 Payload, uint32 BatchPrefixSum)
Definition GPUWorkGroupLoadBalancer.h:56
uint32 GetTotalChildren() const
Definition GPUWorkGroupLoadBalancer.h:154
TArray< FWorkGroupInfo, SceneRenderingAllocator > WorkGroupInfos
Definition GPUWorkGroupLoadBalancer.h:157
void ReserveStorage(int32 NumBatches, int32 NumItems, int32 NumWork)
Definition GPUWorkGroupLoadBalancer.h:78
void GetParametersAsync(FRDGBuilder &GraphBuilder, FShaderParameters &OutShaderParameters)
Definition GPUWorkGroupLoadBalancer.cpp:6
static constexpr uint32 PrefixBits
Definition GPUWorkGroupLoadBalancer.h:20
static constexpr uint32 ThreadGroupSizeLog2
Definition GPUWorkGroupLoadBalancer.h:18
static constexpr uint32 ThreadGroupSize
Definition GPUWorkGroupLoadBalancer.h:19
static constexpr uint32 PrefixBitMask
Definition GPUWorkGroupLoadBalancer.h:21
static void SetShaderDefines(FShaderCompilerEnvironment &OutEnvironment)
Definition GPUWorkGroupLoadBalancer.cpp:34
static constexpr uint32 NumItemBits
Definition GPUWorkGroupLoadBalancer.h:22
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition GPUWorkGroupLoadBalancer.h:173
ParentInfoType FParentInfo
Definition GPUWorkGroupLoadBalancer.h:177
void Add(FParentInfo &&ParentInfo, uint32 NumChildren)
Definition GPUWorkGroupLoadBalancer.h:188
void ReserveStorage(int32 NumBatches, int32 NumItems, int32 NumParents)
Definition GPUWorkGroupLoadBalancer.h:179
void GetParametersAsync(FRDGBuilder &GraphBuilder, FShaderParameters &OutShaderParameters)
Definition GPUWorkGroupLoadBalancer.h:201
void FinalizeBatches()
Definition GPUWorkGroupLoadBalancer.h:219
void FinalizeParametersAsync(FShaderParameters &OutShaderParameters)
Definition GPUWorkGroupLoadBalancer.h:210
Definition GPUWorkGroupLoadBalancer.h:52
uint32 Packed
Definition GPUWorkGroupLoadBalancer.h:53
Definition GPUWorkGroupLoadBalancer.h:30
uint32 Payload
Definition GPUWorkGroupLoadBalancer.h:35
uint32 NumItems
Definition GPUWorkGroupLoadBalancer.h:33
FUint32Point WorkGroupWorkBoundary
Definition GPUWorkGroupLoadBalancer.h:31
uint32 CarryOverStartOffset
Definition GPUWorkGroupLoadBalancer.h:34
uint32 FirstItem
Definition GPUWorkGroupLoadBalancer.h:32
Definition ShaderCore.h:544