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

Classes

struct  FPSOCompilationDebugData
 
class  FPSOPrecacheThreadPool
 
class  FPSOPrecacheAsyncTask
 
class  FPipelineState
 
class  FPSOCSVStatTracker
 
class  FPipelineStateAsync
 
class  FPipelineStateSync
 
class  FComputePipelineState
 
class  FWorkGraphPipelineState
 
class  FGraphicsPipelineState
 
class  FRayTracingPipelineState
 
class  TSharedPipelineStateCache< TMyKey, TMyValue >
 
class  TPrecachePipelineCacheBase< TPrecachePipelineCacheDerived, TPrecachedPSOInitializer, TPipelineState >
 
struct  TPrecachePipelineCacheBase< TPrecachePipelineCacheDerived, TPrecachedPSOInitializer, TPipelineState >::FPrecacheTask
 
class  FPrecacheComputePipelineCache
 
class  FPrecacheGraphicsPipelineCache
 
class  TCompilePipelineStateTaskBase< TCompilePipelineStateTaskDerived, TPipelineInitializer >
 
class  FCompileGraphicsPipelineStateTask
 
class  FCompileComputePipelineStateTask
 

Namespaces

namespace  PipelineStateCache
 

Macros

#define PSO_DO_CACHE_EVICT_EACH_FRAME   0
 
#define PSO_LOG_CACHE_EVICT   0
 
#define PSO_TRACK_CACHE_STATS   0
 
#define PIPELINESTATECACHE_VERIFYTHREADSAFE   (!UE_BUILD_SHIPPING && !UE_BUILD_TEST)
 

Typedefs

typedef TSharedPipelineStateCache< FRHIComputeShader *, FComputePipelineState * > FComputePipelineCache
 
typedef TSharedPipelineStateCache< FWorkGraphPipelineStateInitializer, FWorkGraphPipelineState * > FWorkGraphPipelineCache
 
typedef TSharedPipelineStateCache< FGraphicsPipelineStateInitializer, FGraphicsPipelineState * > FGraphicsPipelineCache
 

Enumerations

enum class  EPSOCompileAsyncMode { None = 0 , All = 1 , Precompile = 2 , NonPrecompiled = 3 }
 
enum class  EPSOPrecacheStateMask : uint8 {
  None = 0 , Compiling = 1 << 0 , Succeeded = 1 << 1 , Failed = 1 << 2 ,
  Boosted = 1 << 3 , HighestPri = 1 << 4 , UsedForRendering = 1 << 5
}
 

Functions

RHI_API void PipelineStateCache::WaitForAllTasks ()
 
 CSV_DECLARE_CATEGORY_EXTERN (PSO)
 
 CSV_DEFINE_CATEGORY (PSOPrecacheCompiling, false)
 
 DEFINE_LOG_CATEGORY_STATIC (LogPSOHitching, Log, All)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Runtime Graphics PSO Hitch Count"), STAT_RuntimeGraphicsPSOHitchCount, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Runtime Compute PSO Hitch Count"), STAT_RuntimeComputePSOHitchCount, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Active Graphics PSO Precache Requests"), STAT_ActiveGraphicsPSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Active Compute PSO Precache Requests"), STAT_ActiveComputePSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("High Priority Graphics PSO Precache Requests"), STAT_HighPriorityGraphicsPSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("High Priority Compute PSO Precache Requests"), STAT_HighPriorityComputePSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Highest Priority Graphics PSO Precache Requests"), STAT_HighestPriorityGraphicsPSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Highest Priority Compute PSO Precache Requests"), STAT_HighestPriorityComputePSOPrecacheRequests, STATGROUP_PipelineStateCache)
 
 DECLARE_DWORD_ACCUMULATOR_STAT (TEXT("Precached PSOs Kept In Memory"), STAT_InMemoryPrecachedPSOCount, STATGROUP_PipelineStateCache)
 
uint32 GetTypeHash (const FExclusiveDepthStencil &Ds)
 
void DumpPipelineCacheStats ()
 
bool ShouldKeepPrecachedPSOsInMemory ()
 
bool ShouldTrackUsedPrecachedPSOs ()
 
const TCHARLexToString (EPSOPrecacheResult Result)
 
RHI_API FComputePipelineStateFindComputePipelineState (FRHIComputeShader *ComputeShader, bool bVerifyUse)
 
RHI_API FComputePipelineStateGetComputePipelineState (FRHIComputeCommandList &RHICmdList, FRHIComputeShader *ComputeShader, bool bVerifyUse)
 
RHI_API FRHIComputePipelineStateExecuteSetComputePipelineState (FComputePipelineState *ComputePipelineState)
 
RHI_API FRHIGraphicsPipelineStateExecuteSetGraphicsPipelineState (FGraphicsPipelineState *GraphicsPipelineState)
 
int32 PipelineStateCache::GetCacheIndexForCurrentThread ()
 
FRHIComputePipelineStateGetRHIComputePipelineState (FComputePipelineState *PipelineState)
 
FRHIWorkGraphPipelineStateGetRHIWorkGraphPipelineState (FWorkGraphPipelineState *PipelineState)
 
FRHIRayTracingPipelineStateGetRHIRayTracingPipelineState (FRayTracingPipelineState *PipelineState)
 
uint32 GetRHIRayTracingPipelineStateMaxLocalBindingDataSize (FRayTracingPipelineState *PipelineState)
 
int32 FindRayTracingHitGroupIndex (FRayTracingPipelineState *Pipeline, FRHIRayTracingShader *HitGroupShader, bool bRequired)
 
int32 FindRayTracingCallableShaderIndex (FRayTracingPipelineState *Pipeline, FRHIRayTracingShader *CallableShader, bool bRequired)
 
int32 FindRayTracingMissShaderIndex (FRayTracingPipelineState *Pipeline, FRHIRayTracingShader *MissShader, bool bRequired)
 
template<typename TPipelineInitializer >
bool IsPrecachedPSO (const TPipelineInitializer &Initializer)
 
void SetComputePipelineState (FRHIComputeCommandList &RHICmdList, FRHIComputeShader *ComputeShader)
 
FGraphicsPipelineStateFindGraphicsPipelineState (const FGraphicsPipelineStateInitializer &Initializer, bool bVerifyUse)
 
FGraphicsPipelineStateGetGraphicsPipelineState (FRHICommandList &RHICmdList, const FGraphicsPipelineStateInitializer &Initializer, EApplyRendertargetOption ApplyFlags, bool bVerifyUse)
 
FGraphicsPipelineStateGetGraphicsPipelineState (FRHICommandList &RHICmdList, const FGraphicsPipelineStateInitializer &Initializer, bool bVerifyUse)
 
void SetGraphicsPipelineState (FRHICommandList &RHICmdList, const FGraphicsPipelineStateInitializer &Initializer, uint32 StencilRef, EApplyRendertargetOption ApplyFlags, bool bApplyAdditionalState)
 
void SetGraphicsPipelineStateCheckApply (FRHICommandList &RHICmdList, const FGraphicsPipelineStateInitializer &Initializer, uint32 StencilRef, bool bApplyAdditionalState)
 
void ValidateWorkGraphPipelineStateInitializer (const FWorkGraphPipelineStateInitializer &Initializer)
 
void ValidateGraphicsPipelineStateInitializer (const FGraphicsPipelineStateInitializer &Initializer)
 

Variables

constexpr int32 PSO_MISS_FRAME_HISTORY_SIZE = 3
 
bool GRunPSOCreateTasksOnRHIT = false
 
bool GEnablePSOAsyncCacheConsolidation = true
 
int32 GPSOPrecaching = 1
 
int32 GPSOWaitForHighPriorityRequestsOnly = 0
 
bool GPSOPrecachePermitPriorityEscalation = true
 
int32 GPSOPrecacheUnhealthyCacheHitchThresholdMs = 80
 
int32 GPSOPrecacheUnhealthyCacheMaxHitches = 100
 
int32 GPSOPrecompileThreadPoolThreadPriority = (int32)EThreadPriority::TPri_BelowNormal
 
int32 GPSOPrecacheKeepInMemoryUntilUsed = 2
 
int32 GPSOPrecacheKeepInMemoryGraphicsMaxNum = 2000
 
int32 GPSOPrecacheKeepInMemoryComputeMaxNum = 1000
 
constexpr int32 PipelineStateCache::RenderThreadIndex = 0
 
constexpr int32 PipelineStateCache::RHIThreadIndex = 1
 
FComputePipelineCache GComputePipelineCache
 
FWorkGraphPipelineCache GWorkGraphPipelineCache
 
FGraphicsPipelineCache GGraphicsPipelineCache
 
TUniquePtr< FPrecacheGraphicsPipelineCacheGPrecacheGraphicsPipelineCache
 
TUniquePtr< FPrecacheComputePipelineCacheGPrecacheComputePipelineCache
 
FAutoConsoleTaskPriority CPrio_FCompilePipelineStateTask (TEXT("TaskGraph.TaskPriorities.CompilePipelineStateTask"), TEXT("Task and thread priority for FCompilePipelineStateTask."), ENamedThreads::HighThreadPriority, ENamedThreads::NormalTaskPriority, ENamedThreads::HighTaskPriority)
 

Macro Definition Documentation

◆ PIPELINESTATECACHE_VERIFYTHREADSAFE

#define PIPELINESTATECACHE_VERIFYTHREADSAFE   (!UE_BUILD_SHIPPING && !UE_BUILD_TEST)

◆ PSO_DO_CACHE_EVICT_EACH_FRAME

#define PSO_DO_CACHE_EVICT_EACH_FRAME   0

◆ PSO_LOG_CACHE_EVICT

#define PSO_LOG_CACHE_EVICT   0

◆ PSO_TRACK_CACHE_STATS

#define PSO_TRACK_CACHE_STATS   0

Typedef Documentation

◆ FComputePipelineCache

◆ FGraphicsPipelineCache

◆ FWorkGraphPipelineCache

Enumeration Type Documentation

◆ EPSOCompileAsyncMode

enum class EPSOCompileAsyncMode
strong
Enumerator
None 
All 
Precompile 
NonPrecompiled 

◆ EPSOPrecacheStateMask

Enumerator
None 
Compiling 
Succeeded 
Failed 
Boosted 
HighestPri 
UsedForRendering 

Function Documentation

◆ CSV_DECLARE_CATEGORY_EXTERN()

CSV_DECLARE_CATEGORY_EXTERN ( PSO  )

◆ CSV_DEFINE_CATEGORY()

CSV_DEFINE_CATEGORY ( PSOPrecacheCompiling  ,
false   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [1/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Active Compute PSO Precache Requests" ,
STAT_ActiveComputePSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [2/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Active Graphics PSO Precache Requests" ,
STAT_ActiveGraphicsPSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [3/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("High Priority Compute PSO Precache Requests" ,
STAT_HighPriorityComputePSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [4/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("High Priority Graphics PSO Precache Requests" ,
STAT_HighPriorityGraphicsPSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [5/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Highest Priority Compute PSO Precache Requests" ,
STAT_HighestPriorityComputePSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [6/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Highest Priority Graphics PSO Precache Requests" ,
STAT_HighestPriorityGraphicsPSOPrecacheRequests  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [7/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Precached PSOs Kept In Memory" ,
STAT_InMemoryPrecachedPSOCount  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [8/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Runtime Compute PSO Hitch Count" ,
STAT_RuntimeComputePSOHitchCount  ,
STATGROUP_PipelineStateCache   
)

◆ DECLARE_DWORD_ACCUMULATOR_STAT() [9/9]

DECLARE_DWORD_ACCUMULATOR_STAT ( TEXT("Runtime Graphics PSO Hitch Count" ,
STAT_RuntimeGraphicsPSOHitchCount  ,
STATGROUP_PipelineStateCache   
)

◆ DEFINE_LOG_CATEGORY_STATIC()

DEFINE_LOG_CATEGORY_STATIC ( LogPSOHitching  ,
Log  ,
All   
)

◆ DumpPipelineCacheStats()

void DumpPipelineCacheStats ( )
extern

◆ ExecuteSetComputePipelineState()

FRHIComputePipelineState * ExecuteSetComputePipelineState ( FComputePipelineState ComputePipelineState)
extern

◆ ExecuteSetGraphicsPipelineState()

FRHIGraphicsPipelineState * ExecuteSetGraphicsPipelineState ( FGraphicsPipelineState GraphicsPipelineState)
extern

◆ FindComputePipelineState()

FComputePipelineState * FindComputePipelineState ( FRHIComputeShader ComputeShader,
bool  bVerifyUse 
)
extern

◆ FindGraphicsPipelineState()

FGraphicsPipelineState * FindGraphicsPipelineState ( const FGraphicsPipelineStateInitializer Initializer,
bool  bVerifyUse 
)

◆ FindRayTracingCallableShaderIndex()

int32 FindRayTracingCallableShaderIndex ( FRayTracingPipelineState Pipeline,
FRHIRayTracingShader CallableShader,
bool  bRequired 
)

◆ FindRayTracingHitGroupIndex()

int32 FindRayTracingHitGroupIndex ( FRayTracingPipelineState Pipeline,
FRHIRayTracingShader HitGroupShader,
bool  bRequired 
)

◆ FindRayTracingMissShaderIndex()

int32 FindRayTracingMissShaderIndex ( FRayTracingPipelineState Pipeline,
FRHIRayTracingShader MissShader,
bool  bRequired 
)

◆ GetComputePipelineState()

FComputePipelineState * GetComputePipelineState ( FRHIComputeCommandList RHICmdList,
FRHIComputeShader ComputeShader,
bool  bVerifyUse 
)
extern

◆ GetGraphicsPipelineState() [1/2]

FGraphicsPipelineState * GetGraphicsPipelineState ( FRHICommandList RHICmdList,
const FGraphicsPipelineStateInitializer Initializer,
bool  bVerifyUse 
)

◆ GetGraphicsPipelineState() [2/2]

FGraphicsPipelineState * GetGraphicsPipelineState ( FRHICommandList RHICmdList,
const FGraphicsPipelineStateInitializer Initializer,
EApplyRendertargetOption  ApplyFlags,
bool  bVerifyUse 
)

◆ GetRHIComputePipelineState()

FRHIComputePipelineState * GetRHIComputePipelineState ( FComputePipelineState PipelineState)

◆ GetRHIRayTracingPipelineState()

FRHIRayTracingPipelineState * GetRHIRayTracingPipelineState ( FRayTracingPipelineState PipelineState)

◆ GetRHIRayTracingPipelineStateMaxLocalBindingDataSize()

uint32 GetRHIRayTracingPipelineStateMaxLocalBindingDataSize ( FRayTracingPipelineState PipelineState)

◆ GetRHIWorkGraphPipelineState()

FRHIWorkGraphPipelineState * GetRHIWorkGraphPipelineState ( FWorkGraphPipelineState PipelineState)

◆ GetTypeHash()

uint32 GetTypeHash ( const FExclusiveDepthStencil Ds)
inline

◆ IsPrecachedPSO()

bool IsPrecachedPSO ( const TPipelineInitializer Initializer)

◆ LexToString()

const TCHAR * LexToString ( EPSOPrecacheResult  Result)

◆ SetComputePipelineState()

void SetComputePipelineState ( FRHIComputeCommandList RHICmdList,
FRHIComputeShader ComputeShader 
)

◆ SetGraphicsPipelineState()

void SetGraphicsPipelineState ( FRHICommandList RHICmdList,
const FGraphicsPipelineStateInitializer Initializer,
uint32  StencilRef,
EApplyRendertargetOption  ApplyFlags,
bool  bApplyAdditionalState 
)

◆ SetGraphicsPipelineStateCheckApply()

void SetGraphicsPipelineStateCheckApply ( FRHICommandList RHICmdList,
const FGraphicsPipelineStateInitializer Initializer,
uint32  StencilRef,
bool  bApplyAdditionalState 
)

◆ ShouldKeepPrecachedPSOsInMemory()

bool ShouldKeepPrecachedPSOsInMemory ( )

◆ ShouldTrackUsedPrecachedPSOs()

bool ShouldTrackUsedPrecachedPSOs ( )

◆ ValidateGraphicsPipelineStateInitializer()

void ValidateGraphicsPipelineStateInitializer ( const FGraphicsPipelineStateInitializer Initializer)
inline

◆ ValidateWorkGraphPipelineStateInitializer()

void ValidateWorkGraphPipelineStateInitializer ( const FWorkGraphPipelineStateInitializer Initializer)
inline

Variable Documentation

◆ CPrio_FCompilePipelineStateTask

FAutoConsoleTaskPriority CPrio_FCompilePipelineStateTask(TEXT("TaskGraph.TaskPriorities.CompilePipelineStateTask"), TEXT("Task and thread priority for FCompilePipelineStateTask."), ENamedThreads::HighThreadPriority, ENamedThreads::NormalTaskPriority, ENamedThreads::HighTaskPriority) ( TEXT("TaskGraph.TaskPriorities.CompilePipelineStateTask")  ,
TEXT("Task and thread priority for FCompilePipelineStateTask." ,
ENamedThreads::HighThreadPriority  ,
ENamedThreads::NormalTaskPriority  ,
ENamedThreads::HighTaskPriority   
)

◆ GComputePipelineCache

FComputePipelineCache GComputePipelineCache

◆ GEnablePSOAsyncCacheConsolidation

bool GEnablePSOAsyncCacheConsolidation = true

◆ GGraphicsPipelineCache

FGraphicsPipelineCache GGraphicsPipelineCache

◆ GPrecacheComputePipelineCache

TUniquePtr<FPrecacheComputePipelineCache> GPrecacheComputePipelineCache

◆ GPrecacheGraphicsPipelineCache

TUniquePtr<FPrecacheGraphicsPipelineCache> GPrecacheGraphicsPipelineCache

◆ GPSOPrecacheKeepInMemoryComputeMaxNum

int32 GPSOPrecacheKeepInMemoryComputeMaxNum = 1000

◆ GPSOPrecacheKeepInMemoryGraphicsMaxNum

int32 GPSOPrecacheKeepInMemoryGraphicsMaxNum = 2000

◆ GPSOPrecacheKeepInMemoryUntilUsed

int32 GPSOPrecacheKeepInMemoryUntilUsed = 2

◆ GPSOPrecachePermitPriorityEscalation

bool GPSOPrecachePermitPriorityEscalation = true

◆ GPSOPrecacheUnhealthyCacheHitchThresholdMs

int32 GPSOPrecacheUnhealthyCacheHitchThresholdMs = 80

◆ GPSOPrecacheUnhealthyCacheMaxHitches

int32 GPSOPrecacheUnhealthyCacheMaxHitches = 100

◆ GPSOPrecaching

int32 GPSOPrecaching = 1

◆ GPSOPrecompileThreadPoolThreadPriority

int32 GPSOPrecompileThreadPoolThreadPriority = (int32)EThreadPriority::TPri_BelowNormal

◆ GPSOWaitForHighPriorityRequestsOnly

int32 GPSOWaitForHighPriorityRequestsOnly = 0

◆ GRunPSOCreateTasksOnRHIT

bool GRunPSOCreateTasksOnRHIT = false

◆ GWorkGraphPipelineCache

FWorkGraphPipelineCache GWorkGraphPipelineCache

◆ PSO_MISS_FRAME_HISTORY_SIZE

constexpr int32 PSO_MISS_FRAME_HISTORY_SIZE = 3
constexpr