UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FComputeShaderUtils Namespace Reference

Namespaces

namespace  Private
 

Functions

FIntVector GetGroupCount (const int32 ThreadCount, const int32 GroupSize)
 
FIntVector GetGroupCount (const FIntPoint &ThreadCount, const FIntPoint &GroupSize)
 
FIntVector GetGroupCount (const FIntPoint &ThreadCount, const int32 GroupSize)
 
FIntVector GetGroupCount (const FIntVector &ThreadCount, const FIntVector &GroupSize)
 
FIntVector GetGroupCount (const FIntVector &ThreadCount, const int32 GroupSize)
 
FIntVector GetGroupCountWrapped (const int32 TargetGroupCount)
 
FIntVector GetGroupCountWrapped (const int32 ThreadCount, const int32 GroupSize)
 
void ValidateGroupCount (const FIntVector &GroupCount)
 
void ValidateIndirectArgsBuffer (uint32 IndirectArgsBufferSize, uint32 IndirectArgOffset)
 
void ValidateIndirectArgsBuffer (const FRDGBufferRef IndirectArgsBuffer, uint32 IndirectArgOffset)
 
template<typename TShaderClass >
void Dispatch (FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const FShaderParametersMetadata *ParametersMetadata, const typename TShaderClass::FParameters &Parameters, FIntVector GroupCount)
 
template<typename TShaderClass >
void Dispatch (FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const typename TShaderClass::FParameters &Parameters, FIntVector GroupCount)
 
template<typename TShaderClass >
void DispatchIndirect (FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const typename TShaderClass::FParameters &Parameters, FRHIBuffer *IndirectArgsBuffer, uint32 IndirectArgOffset)
 
template<typename TShaderClass >
void DispatchIndirect (FRHIComputeCommandList &RHICmdList, const TShaderRef< TShaderClass > &ComputeShader, const typename TShaderClass::FParameters &Parameters, FRDGBufferRef IndirectArgsBuffer, uint32 IndirectArgOffset)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, ERDGPassFlags PassFlags, const TShaderRef< TShaderClass > &ComputeShader, const FShaderParametersMetadata *ParametersMetadata, typename TShaderClass::FParameters *Parameters, FIntVector GroupCount)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, ERDGPassFlags PassFlags, const TShaderRef< TShaderClass > &ComputeShader, const FShaderParametersMetadata *ParametersMetadata, typename TShaderClass::FParameters *Parameters, FRDGDispatchGroupCountCallback &&GroupCountCallback)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, ERDGPassFlags PassFlags, const TShaderRef< TShaderClass > &ComputeShader, typename TShaderClass::FParameters *Parameters, FIntVector GroupCount)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, const TShaderRef< TShaderClass > &ComputeShader, typename TShaderClass::FParameters *Parameters, FIntVector GroupCount)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, const TShaderRef< TShaderClass > &ComputeShader, typename TShaderClass::FParameters *Parameters, FRDGDispatchGroupCountCallback &&GroupCountCallback)
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, ERDGPassFlags PassFlags, const TShaderRef< TShaderClass > &ComputeShader, typename TShaderClass::FParameters *Parameters, FRDGBufferRef IndirectArgsBuffer, uint32 IndirectArgsOffset, FRDGDispatchLateParamCallback &&DispatchLateParamCallback=FRDGDispatchLateParamCallback())
 
template<typename TShaderClass >
FRDGPassRef AddPass (FRDGBuilder &GraphBuilder, FRDGEventName &&PassName, const TShaderRef< TShaderClass > &ComputeShader, typename TShaderClass::FParameters *Parameters, FRDGBufferRef IndirectArgsBuffer, uint32 IndirectArgsOffset, FRDGDispatchLateParamCallback &&DispatchLateParamCallback=FRDGDispatchLateParamCallback())
 
RENDERCORE_API FRDGBufferRef AddIndirectArgsSetupCsPass1D (FRDGBuilder &GraphBuilder, ERHIFeatureLevel::Type FeatureLevel, FRDGBuffer *InputCountBuffer, const TCHAR *OutputBufferName, uint32 Divisor, uint32 InputCountOffset=0U, uint32 Multiplier=1U)
 

Detailed Description

All utils for compute shaders.

Function Documentation

◆ AddIndirectArgsSetupCsPass1D()

FRDGBufferRef FComputeShaderUtils::AddIndirectArgsSetupCsPass1D ( FRDGBuilder GraphBuilder,
ERHIFeatureLevel::Type  FeatureLevel,
FRDGBuffer InputCountBuffer,
const TCHAR OutputBufferName,
uint32  Divisor,
uint32  InputCountOffset = 0U,
uint32  Multiplier = 1U 
)

Create and set up an 1D indirect dispatch argument from some GPU-side integer in a buffer (InputCountBuffer). Sets up a group count as (InputCountBuffer[InputCountOffset] * Multiplier + Divisor - 1U) / Divisor; Commonly use Divisor <=> number of threads per group.

◆ AddPass() [1/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
const TShaderRef< TShaderClass > &  ComputeShader,
typename TShaderClass::FParameters *  Parameters,
FIntVector  GroupCount 
)
inline

◆ AddPass() [2/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
const TShaderRef< TShaderClass > &  ComputeShader,
typename TShaderClass::FParameters *  Parameters,
FRDGBufferRef  IndirectArgsBuffer,
uint32  IndirectArgsOffset,
FRDGDispatchLateParamCallback &&  DispatchLateParamCallback = FRDGDispatchLateParamCallback() 
)
inline

◆ AddPass() [3/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
const TShaderRef< TShaderClass > &  ComputeShader,
typename TShaderClass::FParameters *  Parameters,
FRDGDispatchGroupCountCallback &&  GroupCountCallback 
)
inline

◆ AddPass() [4/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
ERDGPassFlags  PassFlags,
const TShaderRef< TShaderClass > &  ComputeShader,
const FShaderParametersMetadata ParametersMetadata,
typename TShaderClass::FParameters *  Parameters,
FIntVector  GroupCount 
)
inline

Dispatch a compute shader to render graph builder with its parameters.

◆ AddPass() [5/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
ERDGPassFlags  PassFlags,
const TShaderRef< TShaderClass > &  ComputeShader,
const FShaderParametersMetadata ParametersMetadata,
typename TShaderClass::FParameters *  Parameters,
FRDGDispatchGroupCountCallback &&  GroupCountCallback 
)
inline

Dispatch a compute shader to render graph builder with its parameters. GroupCount is supplied through a callback. This allows adding a dispatch with unknown GroupCount but the value must be ready before the pass is executed.

◆ AddPass() [6/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
ERDGPassFlags  PassFlags,
const TShaderRef< TShaderClass > &  ComputeShader,
typename TShaderClass::FParameters *  Parameters,
FIntVector  GroupCount 
)
inline

◆ AddPass() [7/7]

template<typename TShaderClass >
FRDGPassRef FComputeShaderUtils::AddPass ( FRDGBuilder GraphBuilder,
FRDGEventName &&  PassName,
ERDGPassFlags  PassFlags,
const TShaderRef< TShaderClass > &  ComputeShader,
typename TShaderClass::FParameters *  Parameters,
FRDGBufferRef  IndirectArgsBuffer,
uint32  IndirectArgsOffset,
FRDGDispatchLateParamCallback &&  DispatchLateParamCallback = FRDGDispatchLateParamCallback() 
)
inline

Dispatch a compute shader to render graph builder with its parameters.

◆ Dispatch() [1/2]

template<typename TShaderClass >
void FComputeShaderUtils::Dispatch ( FRHIComputeCommandList RHICmdList,
const TShaderRef< TShaderClass > &  ComputeShader,
const FShaderParametersMetadata ParametersMetadata,
const typename TShaderClass::FParameters &  Parameters,
FIntVector  GroupCount 
)
inline

Dispatch a compute shader to rhi command list with its parameters.

◆ Dispatch() [2/2]

template<typename TShaderClass >
void FComputeShaderUtils::Dispatch ( FRHIComputeCommandList RHICmdList,
const TShaderRef< TShaderClass > &  ComputeShader,
const typename TShaderClass::FParameters &  Parameters,
FIntVector  GroupCount 
)
inline

◆ DispatchIndirect() [1/2]

template<typename TShaderClass >
void FComputeShaderUtils::DispatchIndirect ( FRHIComputeCommandList RHICmdList,
const TShaderRef< TShaderClass > &  ComputeShader,
const typename TShaderClass::FParameters &  Parameters,
FRDGBufferRef  IndirectArgsBuffer,
uint32  IndirectArgOffset 
)
inline

Dispatch a compute shader to rhi command list with its parameters and indirect args.

◆ DispatchIndirect() [2/2]

template<typename TShaderClass >
void FComputeShaderUtils::DispatchIndirect ( FRHIComputeCommandList RHICmdList,
const TShaderRef< TShaderClass > &  ComputeShader,
const typename TShaderClass::FParameters &  Parameters,
FRHIBuffer IndirectArgsBuffer,
uint32  IndirectArgOffset 
)
inline

Indirect dispatch a compute shader to rhi command list with its parameters.

◆ GetGroupCount() [1/5]

FIntVector FComputeShaderUtils::GetGroupCount ( const FIntPoint ThreadCount,
const FIntPoint GroupSize 
)
inline

◆ GetGroupCount() [2/5]

FIntVector FComputeShaderUtils::GetGroupCount ( const FIntPoint ThreadCount,
const int32  GroupSize 
)
inline

◆ GetGroupCount() [3/5]

FIntVector FComputeShaderUtils::GetGroupCount ( const FIntVector ThreadCount,
const FIntVector GroupSize 
)
inline

◆ GetGroupCount() [4/5]

FIntVector FComputeShaderUtils::GetGroupCount ( const FIntVector ThreadCount,
const int32  GroupSize 
)
inline

◆ GetGroupCount() [5/5]

FIntVector FComputeShaderUtils::GetGroupCount ( const int32  ThreadCount,
const int32  GroupSize 
)
inline

Compute the number of groups to dispatch.

◆ GetGroupCountWrapped() [1/2]

FIntVector FComputeShaderUtils::GetGroupCountWrapped ( const int32  TargetGroupCount)
inline

Wrapping number of groups to Y and Z dimension if X group count overflows GRHIMaxDispatchThreadGroupsPerDimension. Calculate the linear group index as (or use GetUnWrappedDispatchGroupId(GroupId) in ComputeShaderUtils.ush): uint LinearGroupId = GroupId.X + (GroupId.Z * WrappedGroupStride + GroupId.Y) * WrappedGroupStride; Note that you must use an early out because LinearGroupId may be larger than the ideal due to wrapping.

◆ GetGroupCountWrapped() [2/2]

FIntVector FComputeShaderUtils::GetGroupCountWrapped ( const int32  ThreadCount,
const int32  GroupSize 
)
inline

Compute the number of groups to dispatch and allow wrapping to Y and Z dimension if X group count overflows. Calculate the linear group index as (or use GetUnWrappedDispatchGroupId(GroupId) in ComputeShaderUtils.ush): uint LinearGroupId = GroupId.X + (GroupId.Z * WrappedGroupStride + GroupId.Y) * WrappedGroupStride; Note that you must use an early out because LinearGroupId may be larger than the ideal due to wrapping.

◆ ValidateGroupCount()

void FComputeShaderUtils::ValidateGroupCount ( const FIntVector GroupCount)
inline

◆ ValidateIndirectArgsBuffer() [1/2]

void FComputeShaderUtils::ValidateIndirectArgsBuffer ( const FRDGBufferRef  IndirectArgsBuffer,
uint32  IndirectArgOffset 
)
inline

◆ ValidateIndirectArgsBuffer() [2/2]

void FComputeShaderUtils::ValidateIndirectArgsBuffer ( uint32  IndirectArgsBufferSize,
uint32  IndirectArgOffset 
)
inline