UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GPUSort.cpp File Reference

Classes

class  FSortOffsetBuffers
 
class  FRadixSortParametersBuffer
 
class  FRadixSortClearOffsetsCS
 
class  FRadixSortUpsweepCS
 
class  FRadixSortSpineCS
 
class  FRadixSortDownsweepCS
 

Macros

#define GPUSORT_BITCOUNT   32
 
#define RADIX_BITS   4
 
#define DIGIT_COUNT   (1 << RADIX_BITS)
 
#define KEYS_PER_LOOP   8
 
#define THREAD_COUNT   128
 
#define TILE_SIZE   (THREAD_COUNT * KEYS_PER_LOOP)
 
#define MAX_GROUP_COUNT   64
 
#define MAX_PASS_COUNT   (32 / RADIX_BITS)
 

Typedefs

typedef TUniformBufferRef< FRadixSortParametersFRadixSortUniformBufferRef
 

Enumerations

enum  { GPU_SORT_TEST_SIZE_SMALL = (1 << 9) , GPU_SORT_TEST_SIZE_LARGE = (1 << 20) , GPU_SORT_TEST_SIZE_MIN = (1 << 4) , GPU_SORT_TEST_SIZE_MAX = (1 << 20) }
 

Functions

 DEFINE_LOG_CATEGORY_STATIC (LogGPUSort, Log, All)
 
void SetRadixSortShaderCompilerEnvironment (FShaderCompilerEnvironment &OutEnvironment)
 
 IMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT (FRadixSortParameters,"RadixSortUB")
 
 IMPLEMENT_SHADER_TYPE (, FRadixSortClearOffsetsCS, TEXT("/Engine/Private/RadixSortShaders.usf"), TEXT("RadixSort_ClearOffsets"), SF_Compute)
 
 IMPLEMENT_SHADER_TYPE (, FRadixSortUpsweepCS, TEXT("/Engine/Private/RadixSortShaders.usf"), TEXT("RadixSort_Upsweep"), SF_Compute)
 
 IMPLEMENT_SHADER_TYPE (, FRadixSortSpineCS, TEXT("/Engine/Private/RadixSortShaders.usf"), TEXT("RadixSort_Spine"), SF_Compute)
 
 IMPLEMENT_SHADER_TYPE (, FRadixSortDownsweepCS, TEXT("/Engine/Private/RadixSortShaders.usf"), TEXT("RadixSort_Downsweep"), SF_Compute)
 
int32 GetGPUSortPassCount (uint32 KeyMask)
 
int32 SortGPUBuffers (FRHICommandList &RHICmdList, FGPUSortBuffers SortBuffers, int32 BufferIndex, uint32 KeyMask, int32 Count, ERHIFeatureLevel::Type FeatureLevel)
 
void TestGPUSort (EGPUSortTest TestToRun, ERHIFeatureLevel::Type FeatureLevel)
 

Variables

TGlobalResource< FSortOffsetBuffersGSortOffsetBuffers
 
TGlobalResource< FRadixSortParametersBufferGRadixSortParametersBuffer
 

Macro Definition Documentation

◆ DIGIT_COUNT

#define DIGIT_COUNT   (1 << RADIX_BITS)

◆ GPUSORT_BITCOUNT

#define GPUSORT_BITCOUNT   32

◆ KEYS_PER_LOOP

#define KEYS_PER_LOOP   8

◆ MAX_GROUP_COUNT

#define MAX_GROUP_COUNT   64

◆ MAX_PASS_COUNT

#define MAX_PASS_COUNT   (32 / RADIX_BITS)

◆ RADIX_BITS

#define RADIX_BITS   4

◆ THREAD_COUNT

#define THREAD_COUNT   128

◆ TILE_SIZE

#define TILE_SIZE   (THREAD_COUNT * KEYS_PER_LOOP)

Typedef Documentation

◆ FRadixSortUniformBufferRef

Enumeration Type Documentation

◆ anonymous enum

Enumerator
GPU_SORT_TEST_SIZE_SMALL 
GPU_SORT_TEST_SIZE_LARGE 
GPU_SORT_TEST_SIZE_MIN 
GPU_SORT_TEST_SIZE_MAX 

Function Documentation

◆ DEFINE_LOG_CATEGORY_STATIC()

DEFINE_LOG_CATEGORY_STATIC ( LogGPUSort  ,
Log  ,
All   
)

◆ GetGPUSortPassCount()

int32 GetGPUSortPassCount ( uint32  KeyMask)

Get the number of passes we will need to make in order to sort

◆ IMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT()

IMPLEMENT_GLOBAL_SHADER_PARAMETER_STRUCT ( FRadixSortParameters  ,
"RadixSortUB"   
)

◆ IMPLEMENT_SHADER_TYPE() [1/4]

IMPLEMENT_SHADER_TYPE ( FRadixSortClearOffsetsCS  ,
TEXT("/Engine/Private/RadixSortShaders.usf" ,
TEXT("RadixSort_ClearOffsets")  ,
SF_Compute   
)

◆ IMPLEMENT_SHADER_TYPE() [2/4]

IMPLEMENT_SHADER_TYPE ( FRadixSortDownsweepCS  ,
TEXT("/Engine/Private/RadixSortShaders.usf" ,
TEXT("RadixSort_Downsweep")  ,
SF_Compute   
)

◆ IMPLEMENT_SHADER_TYPE() [3/4]

IMPLEMENT_SHADER_TYPE ( FRadixSortSpineCS  ,
TEXT("/Engine/Private/RadixSortShaders.usf" ,
TEXT("RadixSort_Spine")  ,
SF_Compute   
)

◆ IMPLEMENT_SHADER_TYPE() [4/4]

IMPLEMENT_SHADER_TYPE ( FRadixSortUpsweepCS  ,
TEXT("/Engine/Private/RadixSortShaders.usf" ,
TEXT("RadixSort_Upsweep")  ,
SF_Compute   
)

◆ SetRadixSortShaderCompilerEnvironment()

void SetRadixSortShaderCompilerEnvironment ( FShaderCompilerEnvironment OutEnvironment)

Setup radix sort shader compiler environment.

Parameters
OutEnvironment- The environment to set.

◆ SortGPUBuffers()

int32 SortGPUBuffers ( FRHICommandList RHICmdList,
FGPUSortBuffers  SortBuffers,
int32  BufferIndex,
uint32  KeyMask,
int32  Count,
ERHIFeatureLevel::Type  FeatureLevel 
)

Sort a buffer on the GPU.

Parameters
SortBuffers- The buffer to sort including required views and a ping- pong location of appropriate size.
BufferIndex- Index of the buffer containing keys.
KeyMask- Bitmask indicating which key bits contain useful information.
Count- How many items in the buffer need to be sorted.
Returns
The index of the buffer containing sorted results.

◆ TestGPUSort()

void TestGPUSort ( EGPUSortTest  TestToRun,
ERHIFeatureLevel::Type  FeatureLevel 
)

Test that GPU sorting works.

Parameters
TestToRun- The test to run.

Variable Documentation

◆ GRadixSortParametersBuffer

TGlobalResource<FRadixSortParametersBuffer> GRadixSortParametersBuffer

The global resource for the radix sort parameters buffer.

◆ GSortOffsetBuffers

TGlobalResource<FSortOffsetBuffers> GSortOffsetBuffers

The global sort offset buffer resources.