UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHIStaticStates.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 RHIStaticStates.h: RHI static state template definition.
5=============================================================================*/
6
7#pragma once
8
9#include "Stats/Stats.h"
12#include "RHI.h"
13#include "RenderResource.h"
14#include "Misc/ScopedEvent.h"
15
49
53template<typename InitializerType,typename RHIRefType,typename RHIParamRefType>
55{
56public:
58 {
59 checkSlow(StaticResource.StateRHI);
60 return StaticResource.StateRHI;
61 };
62
63private:
65 class FStaticStateResource : public FRenderResource
66 {
67 public:
68 RHIRefType StateRHI;
69 FStaticStateResource()
70 {
72 {
73 StateRHI = InitializerType::CreateRHI();
74 }
75 else
76 {
78 }
79 }
80
81 // FRenderResource interface.
82 virtual void InitRHI(FRHICommandListBase& RHICmdList) override
83 {
85 StateRHI = InitializerType::CreateRHI();
86 }
87 virtual void ReleaseRHI() override final
88 {
90 StateRHI.SafeRelease();
91 }
92 virtual void ReleaseResource() override final
93 {
95 }
96
97 ~FStaticStateResource()
98 {
100 ReleaseResource();
101 }
102 };
103
104 static FStaticStateResource StaticResource;
105};
106
107template<typename InitializerType, typename RHIRefType, typename RHIParamRefType>
109
119 int32 MipBias = 0,
120 // Note: setting to a different value than GSystemSettings.MaxAnisotropy is only supported in D3D11 (is that still true?)
121 // A value of 0 will use GSystemSettings.MaxAnisotropy
122 int32 MaxAnisotropy = 1,
123 uint32 BorderColor = 0,
125 ESamplerCompareFunction SamplerComparisonFunction=SCF_Never>
126class TStaticSamplerState : public TStaticStateRHI<TStaticSamplerState<Filter,AddressU,AddressV,AddressW,MipBias,MaxAnisotropy,BorderColor,SamplerComparisonFunction>,FSamplerStateRHIRef, FRHISamplerState*>
127{
128public:
130 {
131 FSamplerStateInitializerRHI Initializer( Filter, AddressU, AddressV, AddressW, MipBias, MaxAnisotropy, 0, FLT_MAX, BorderColor, SamplerComparisonFunction );
133 }
134};
135
142template<ERasterizerFillMode FillMode = FM_Solid, ERasterizerCullMode CullMode = CM_None, ERasterizerDepthClipMode DepthClipMode = ERasterizerDepthClipMode::DepthClip, bool bEnableMSAA = true>
143class TStaticRasterizerState : public TStaticStateRHI<TStaticRasterizerState<FillMode, CullMode, DepthClipMode, bEnableMSAA>, FRasterizerStateRHIRef, FRHIRasterizerState*>
144{
145public:
147 {
148 const FRasterizerStateInitializerRHI Initializer(FillMode, CullMode, 0.0f, 0.0f, DepthClipMode, bEnableMSAA);
150 }
151};
152
154template<bool bEnableMSAA>
190
197template<
198 bool bEnableDepthWrite = true,
200 bool bEnableFrontFaceStencil = false,
201 ECompareFunction FrontFaceStencilTest = CF_Always,
202 EStencilOp FrontFaceStencilFailStencilOp = SO_Keep,
203 EStencilOp FrontFaceDepthFailStencilOp = SO_Keep,
204 EStencilOp FrontFacePassStencilOp = SO_Keep,
205 bool bEnableBackFaceStencil = false,
206 ECompareFunction BackFaceStencilTest = CF_Always,
207 EStencilOp BackFaceStencilFailStencilOp = SO_Keep,
208 EStencilOp BackFaceDepthFailStencilOp = SO_Keep,
209 EStencilOp BackFacePassStencilOp = SO_Keep,
210 uint8 StencilReadMask = 0xFF,
211 uint8 StencilWriteMask = 0xFF
212 >
214 TStaticDepthStencilState<
215 bEnableDepthWrite,
216 DepthTest,
217 bEnableFrontFaceStencil,
218 FrontFaceStencilTest,
219 FrontFaceStencilFailStencilOp,
220 FrontFaceDepthFailStencilOp,
221 FrontFacePassStencilOp,
222 bEnableBackFaceStencil,
223 BackFaceStencilTest,
224 BackFaceStencilFailStencilOp,
225 BackFaceDepthFailStencilOp,
226 BackFacePassStencilOp,
227 StencilReadMask,
228 StencilWriteMask
229 >,
230 FDepthStencilStateRHIRef,
231 FRHIDepthStencilState*
232 >
233{
234public:
236 {
238 bEnableDepthWrite,
239 DepthTest,
240 bEnableFrontFaceStencil,
241 FrontFaceStencilTest,
242 FrontFaceStencilFailStencilOp,
243 FrontFaceDepthFailStencilOp,
244 FrontFacePassStencilOp,
245 bEnableBackFaceStencil,
246 BackFaceStencilTest,
247 BackFaceStencilFailStencilOp,
248 BackFaceDepthFailStencilOp,
249 BackFacePassStencilOp,
250 StencilReadMask,
251 StencilWriteMask);
252
254 }
255};
256
275template<
332 bool bUseAlphaToCoverage = false
333 >
335 TStaticBlendState<
336 RT0ColorWriteMask,RT0ColorBlendOp,RT0ColorSrcBlend,RT0ColorDestBlend,RT0AlphaBlendOp,RT0AlphaSrcBlend,RT0AlphaDestBlend,
337 RT1ColorWriteMask,RT1ColorBlendOp,RT1ColorSrcBlend,RT1ColorDestBlend,RT1AlphaBlendOp,RT1AlphaSrcBlend,RT1AlphaDestBlend,
338 RT2ColorWriteMask,RT2ColorBlendOp,RT2ColorSrcBlend,RT2ColorDestBlend,RT2AlphaBlendOp,RT2AlphaSrcBlend,RT2AlphaDestBlend,
339 RT3ColorWriteMask,RT3ColorBlendOp,RT3ColorSrcBlend,RT3ColorDestBlend,RT3AlphaBlendOp,RT3AlphaSrcBlend,RT3AlphaDestBlend,
340 RT4ColorWriteMask,RT4ColorBlendOp,RT4ColorSrcBlend,RT4ColorDestBlend,RT4AlphaBlendOp,RT4AlphaSrcBlend,RT4AlphaDestBlend,
341 RT5ColorWriteMask,RT5ColorBlendOp,RT5ColorSrcBlend,RT5ColorDestBlend,RT5AlphaBlendOp,RT5AlphaSrcBlend,RT5AlphaDestBlend,
342 RT6ColorWriteMask,RT6ColorBlendOp,RT6ColorSrcBlend,RT6ColorDestBlend,RT6AlphaBlendOp,RT6AlphaSrcBlend,RT6AlphaDestBlend,
343 RT7ColorWriteMask,RT7ColorBlendOp,RT7ColorSrcBlend,RT7ColorDestBlend,RT7AlphaBlendOp,RT7AlphaSrcBlend,RT7AlphaDestBlend,
344 bUseAlphaToCoverage
345 >,
346 FBlendStateRHIRef,
347 FRHIBlendState*
348 >
349{
350public:
352 {
362
364 }
365};
366
367
371template<
380 bool bUseAlphaToCoverage = false
381 >
383 RT0ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
384 RT1ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
385 RT2ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
386 RT3ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
387 RT4ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
388 RT5ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
389 RT6ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
390 RT7ColorWriteMask,BO_Add,BF_One,BF_Zero,BO_Add,BF_One,BF_Zero,
391 bUseAlphaToCoverage
392 >
393{
394public:
410};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define RETURN_QUICK_DECLARE_CYCLE_STAT(StatId, GroupId)
Definition Stats.h:655
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FSamplerStateRHIRef RHICreateSamplerState(const FSamplerStateInitializerRHI &Initializer)
Definition DynamicRHI.h:1145
FBlendStateRHIRef RHICreateBlendState(const FBlendStateInitializerRHI &Initializer)
Definition DynamicRHI.h:1163
FDepthStencilStateRHIRef RHICreateDepthStencilState(const FDepthStencilStateInitializerRHI &Initializer)
Definition DynamicRHI.h:1157
FRasterizerStateRHIRef RHICreateRasterizerState(const FRasterizerStateInitializerRHI &Initializer)
Definition DynamicRHI.h:1151
ESamplerAddressMode
Definition RHIDefinitions.h:339
@ AM_Clamp
Definition RHIDefinitions.h:341
EBlendOperation
Definition RHIDefinitions.h:459
@ BO_Add
Definition RHIDefinitions.h:460
EStencilOp
Definition RHIDefinitions.h:443
@ SO_Keep
Definition RHIDefinitions.h:444
ERasterizerCullMode
Definition RHIDefinitions.h:369
@ CM_CCW
Definition RHIDefinitions.h:372
@ CM_CW
Definition RHIDefinitions.h:371
@ CM_None
Definition RHIDefinitions.h:370
ECompareFunction
Definition RHIDefinitions.h:406
@ CF_DepthNearOrEqual
Definition RHIDefinitions.h:420
@ CF_Always
Definition RHIDefinitions.h:414
ERasterizerDepthClipMode
Definition RHIDefinitions.h:380
ESamplerFilter
Definition RHIDefinitions.h:326
@ SF_Point
Definition RHIDefinitions.h:327
ESamplerCompareFunction
Definition RHIDefinitions.h:352
@ SCF_Never
Definition RHIDefinitions.h:353
EBlendFactor
Definition RHIDefinitions.h:472
@ BF_One
Definition RHIDefinitions.h:474
@ BF_Zero
Definition RHIDefinitions.h:473
EColorWriteMask
Definition RHIDefinitions.h:390
@ CW_RGBA
Definition RHIDefinitions.h:398
ERasterizerFillMode
Definition RHIDefinitions.h:358
@ FM_Point
Definition RHIDefinitions.h:359
@ FM_Solid
Definition RHIDefinitions.h:361
@ FM_Wireframe
Definition RHIDefinitions.h:360
#define GRHISupportsRHIThread
Definition RHIGlobals.h:870
#define GIsRHIInitialized
Definition RHIGlobals.h:756
FRHIRasterizerState * GetStaticRasterizerState(ERasterizerFillMode FillMode, ERasterizerCullMode CullMode)
Definition RHIStaticStates.h:155
void BeginInitResource(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe)
Definition RenderResource.cpp:293
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHI.h:403
Definition RHIStaticStates.h:20
TStatId GetStatId() const
Definition RHIStaticStates.h:31
void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent)
Definition RHIStaticStates.h:43
static ESubsequentsMode::Type GetSubsequentsMode()
Definition RHIStaticStates.h:41
FInitStaticResourceRenderThreadTask(void(*InDoConstruct)(), FScopedEvent &InEvent)
Definition RHIStaticStates.h:25
ENamedThreads::Type GetDesiredThread()
Definition RHIStaticStates.h:36
Definition RHICommandList.h:455
Definition RHIResources.h:679
Definition RenderResource.h:37
virtual RENDERCORE_API void ReleaseResource()
Definition RenderResource.cpp:206
Definition ScopedEvent.h:19
Definition StaticArray.h:26
Definition RHIStaticStates.h:393
static FBlendStateRHIRef CreateRHI()
Definition RHIStaticStates.h:395
Definition RHIStaticStates.h:349
static FBlendStateRHIRef CreateRHI()
Definition RHIStaticStates.h:351
Definition RHIStaticStates.h:233
static FDepthStencilStateRHIRef CreateRHI()
Definition RHIStaticStates.h:235
Definition RHIStaticStates.h:144
static FRasterizerStateRHIRef CreateRHI()
Definition RHIStaticStates.h:146
Definition RHIStaticStates.h:127
static FSamplerStateRHIRef CreateRHI()
Definition RHIStaticStates.h:129
Definition RHIStaticStates.h:55
static RHIParamRefType GetRHI()
Definition RHIStaticStates.h:57
Type
Definition TaskGraphInterfaces.h:57
UE_FORCEINLINE_HINT Type GetRenderThread_Local()
Definition TaskGraphInterfaces.h:128
Type
Definition TaskGraphInterfaces.h:249
@ FireAndForget
Definition TaskGraphInterfaces.h:253
Definition RHI.h:278
Definition RHI.h:232
Definition LightweightStats.h:416