UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BoundShaderStateCache.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 BoundShaderStateCache.h: Bound shader state cache definition.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "RHI.h"
11
17{
18public:
31
42
46 inline FRHIVertexShader* GetVertexShader() const { return VertexShader; }
47 inline FRHIMeshShader* GetMeshShader() const { return MeshShader; }
48 inline FRHIAmplificationShader* GetAmplificationShader() const { return AmplificationShader; }
49 inline FRHIPixelShader* GetPixelShader() const { return PixelShader; }
50 inline FRHIGeometryShader* GetGeometryShader() const { return GeometryShader; }
51
55 inline FRHIVertexDeclaration* GetVertexDeclaration() const { return VertexDeclaration; }
56
57private:
68 FVertexDeclarationRHIRef VertexDeclaration;
70 FVertexShaderRHIRef VertexShader;
72 FMeshShaderRHIRef MeshShader;
74 FAmplificationShaderRHIRef AmplificationShader;
76 FPixelShaderRHIRef PixelShader;
78 FGeometryShaderRHIRef GeometryShader;
79
81};
82
83// Non-reference-counted version of shader state key.
84// This structure is used as the actual key type for TMap, which avoids reference counting overhead during lookup.
85// Note that FCachedBoundShaderStateLink contains a full-fat reference-counted FBoundShaderStateKey, ensuring
86// correct lifetime management.
88{
89public:
90
91 // Note: implicit cast is allowed/expected for this constructor
93 : VertexDeclaration(Key.VertexDeclaration.GetReference())
94 , VertexShader(Key.VertexShader.GetReference())
95 , MeshShader(Key.MeshShader.GetReference())
96 , AmplificationShader(Key.AmplificationShader.GetReference())
97 , PixelShader(Key.PixelShader.GetReference())
98 , GeometryShader(Key.GeometryShader.GetReference())
99 {}
100
112
122
129 {
130 return A.VertexDeclaration == B.VertexDeclaration &&
131 A.VertexShader == B.VertexShader &&
132 A.MeshShader == B.MeshShader &&
133 A.AmplificationShader == B.AmplificationShader &&
134 A.PixelShader == B.PixelShader &&
135 A.GeometryShader == B.GeometryShader;
136 }
137
144 {
145 return GetTypeHash(Key.VertexDeclaration) ^
146 GetTypeHash(Key.VertexShader) ^
147 GetTypeHash(Key.MeshShader) ^
148 GetTypeHash(Key.AmplificationShader) ^
149 GetTypeHash(Key.PixelShader) ^
150 GetTypeHash(Key.GeometryShader);
151 }
152
153private:
154 const FRHIVertexDeclaration* VertexDeclaration = nullptr;
155 const FRHIVertexShader* VertexShader = nullptr;
156 const FRHIMeshShader* MeshShader = nullptr;
157 const FRHIAmplificationShader* AmplificationShader = nullptr;
158 const FRHIPixelShader* PixelShader = nullptr;
159 const FRHIGeometryShader* GeometryShader = nullptr;
160};
161
168{
169public:
170
176
179 FRHIVertexDeclaration* VertexDeclaration,
183 bool bAddToSingleThreadedCache = true
184 );
185
188 FRHIVertexDeclaration* VertexDeclaration,
191 FRHIGeometryShader* GeometryShader,
193 bool bAddToSingleThreadedCache = true
194 );
195
199 FRHIAmplificationShader* AmplificationShader,
202 bool bAddToSingleThreadedCache = true
203 );
204
207
212 inline FRHIMeshShader* GetMeshShader() const { return Key.GetMeshShader(); }
214 inline FRHIPixelShader* GetPixelShader() const { return Key.GetPixelShader(); }
216
221
222protected:
225};
226
227
233 FRHIVertexDeclaration* VertexDeclaration,
236 FRHIGeometryShader* GeometryShader = nullptr,
237 FRHIMeshShader* MeshShader = nullptr,
238 FRHIAmplificationShader* AmplificationShader = nullptr
239 );
240
242
283
289 FRHIVertexDeclaration* VertexDeclaration,
292 FRHIGeometryShader* GeometryShader = nullptr,
293 FRHIMeshShader* MeshShader = nullptr,
294 FRHIAmplificationShader* AmplificationShader = nullptr
295 );
296
RHI_API FBoundShaderStateRHIRef GetCachedBoundShaderState_Threadsafe(FRHIVertexDeclaration *VertexDeclaration, FRHIVertexShader *VertexShader, FRHIPixelShader *PixelShader, FRHIGeometryShader *GeometryShader=nullptr, FRHIMeshShader *MeshShader=nullptr, FRHIAmplificationShader *AmplificationShader=nullptr)
Definition BoundShaderStateCache.cpp:128
RHI_API void EmptyCachedBoundShaderStates()
Definition BoundShaderStateCache.cpp:162
RHI_API FCachedBoundShaderStateLink * GetCachedBoundShaderState(FRHIVertexDeclaration *VertexDeclaration, FRHIVertexShader *VertexShader, FRHIPixelShader *PixelShader, FRHIGeometryShader *GeometryShader=nullptr, FRHIMeshShader *MeshShader=nullptr, FRHIAmplificationShader *AmplificationShader=nullptr)
Definition BoundShaderStateCache.cpp:90
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition BoundShaderStateCache.h:17
FRHIVertexShader * GetVertexShader() const
Definition BoundShaderStateCache.h:46
FBoundShaderStateKey(FRHIMeshShader *InMeshShader, FRHIAmplificationShader *InAmplificationShader, FRHIPixelShader *InPixelShader)
Definition BoundShaderStateCache.h:33
FRHIAmplificationShader * GetAmplificationShader() const
Definition BoundShaderStateCache.h:48
FRHIMeshShader * GetMeshShader() const
Definition BoundShaderStateCache.h:47
FRHIPixelShader * GetPixelShader() const
Definition BoundShaderStateCache.h:49
FBoundShaderStateKey(FRHIVertexDeclaration *InVertexDeclaration, FRHIVertexShader *InVertexShader, FRHIPixelShader *InPixelShader, FRHIGeometryShader *InGeometryShader=nullptr)
Definition BoundShaderStateCache.h:20
FRHIGeometryShader * GetGeometryShader() const
Definition BoundShaderStateCache.h:50
FRHIVertexDeclaration * GetVertexDeclaration() const
Definition BoundShaderStateCache.h:55
Definition BoundShaderStateCache.h:88
FBoundShaderStateLookupKey(FRHIVertexDeclaration *InVertexDeclaration, FRHIVertexShader *InVertexShader, FRHIPixelShader *InPixelShader, FRHIGeometryShader *InGeometryShader=nullptr)
Definition BoundShaderStateCache.h:101
FBoundShaderStateLookupKey(const FBoundShaderStateKey &Key)
Definition BoundShaderStateCache.h:92
FBoundShaderStateLookupKey(FRHIMeshShader *InMeshShader, FRHIAmplificationShader *InAmplificationShader, FRHIPixelShader *InPixelShader)
Definition BoundShaderStateCache.h:113
friend bool operator==(const FBoundShaderStateLookupKey &A, const FBoundShaderStateLookupKey &B)
Definition BoundShaderStateCache.h:128
friend uint32 GetTypeHash(const FBoundShaderStateLookupKey &Key)
Definition BoundShaderStateCache.h:143
Definition RHIResources.h:966
Definition RHIResources.h:733
Definition RHIResources.h:978
Definition RHIResources.h:960
Definition RHIResources.h:972
Definition RHIResources.h:725
Definition RHIResources.h:954
@ false
Definition radaudio_common.h:23