UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RHIShaderParametersShared.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7namespace UE::RHICore
8{
10 {
11 if (FRHIResource* Resource = Parameter.Resource)
12 {
13 switch (Parameter.Type)
14 {
15 case FRHIShaderParameterResource::EType::Texture: return static_cast<FRHITexture*>(Resource)->GetDefaultBindlessHandle();
16 case FRHIShaderParameterResource::EType::ResourceView: return static_cast<FRHIShaderResourceView*>(Resource)->GetBindlessHandle();
17 case FRHIShaderParameterResource::EType::UnorderedAccessView: return static_cast<FRHIUnorderedAccessView*>(Resource)->GetBindlessHandle();
18 case FRHIShaderParameterResource::EType::Sampler: return static_cast<FRHISamplerState*>(Resource)->GetBindlessHandle();
19 case FRHIShaderParameterResource::EType::ResourceCollection: return static_cast<FRHIResourceCollection*>(Resource)->GetBindlessHandle();
20 default:
21 checkf(false, TEXT("Unhandled resource type?"));
22 break;
23 }
24 }
25
26 return FRHIDescriptorHandle();
27 }
28
29 template<typename FContextRHI>
31 {
32 if (ShaderRHI->GetType() == RRT_PixelShader)
33 {
34 Context.RHISetUAVParameter(static_cast<FRHIPixelShader*>(ShaderRHI), Index, UAV);
35 }
36 else
37 {
38 checkf(false, TEXT("TShaderRHI Can't have compute shader to be set. UAVs are not supported on vertex, tessellation and geometry shaders."));
39 }
40 }
41
42 template<typename FContextRHI>
47
48 template<typename FContextRHI, typename TShaderRHI>
56 , bool bBindUAVsFirst = true // UE TODO: investigate where this is absolutely necessary
57 )
58 {
59 if (InParameters.Num())
60 {
61 for (const FRHIShaderParameter& Parameter : InParameters)
62 {
63 Context.RHISetShaderParameter(ShaderRHI, Parameter.BufferIndex, Parameter.BaseIndex, Parameter.ByteSize, &InParametersData[Parameter.ByteOffset]);
64 }
65 }
66
67#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
69 {
71 if (Handle.IsValid())
72 {
73 const uint32 BindlessIndex = Handle.GetIndex();
74 Context.RHISetShaderParameter(ShaderRHI, 0, Parameter.Index, 4, &BindlessIndex);
75 }
76 }
77#endif
78
80 {
82 {
84 {
85 SetShaderUAV(Context, ShaderRHI, Parameter.Index, static_cast<FRHIUnorderedAccessView*>(Parameter.Resource));
86 }
87 }
88 }
89
91 {
92 switch (Parameter.Type)
93 {
95 Context.RHISetShaderTexture(ShaderRHI, Parameter.Index, static_cast<FRHITexture*>(Parameter.Resource));
96 break;
98 Context.RHISetShaderResourceViewParameter(ShaderRHI, Parameter.Index, static_cast<FRHIShaderResourceView*>(Parameter.Resource));
99 break;
101 if (!bBindUAVsFirst)
102 {
103 SetShaderUAV(Context, ShaderRHI, Parameter.Index, static_cast<FRHIUnorderedAccessView*>(Parameter.Resource));
104 }
105 break;
107 Context.RHISetShaderSampler(ShaderRHI, Parameter.Index, static_cast<FRHISamplerState*>(Parameter.Resource));
108 break;
110 Context.RHISetShaderUniformBuffer(ShaderRHI, Parameter.Index, static_cast<FRHIUniformBuffer*>(Parameter.Resource));
111 break;
112 default:
113 checkf(false, TEXT("Unhandled resource type?"));
114 break;
115 }
116 }
117 }
118
119 template<typename FContextRHI, typename TShaderRHI>
121 {
122 for (const FRHIShaderParameterUnbind& Unbind : InUnbinds)
123 {
124 switch (Unbind.Type)
125 {
127 Context.RHISetShaderResourceViewParameter(ShaderRHI, Unbind.Index, nullptr);
128 break;
130 SetShaderUAV(Context, ShaderRHI, Unbind.Index, nullptr);
131 break;
132 default:
133 checkf(false, TEXT("Unhandled resource type?"));
134 break;
135 }
136 }
137 }
138}
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ RRT_PixelShader
Definition RHIDefinitions.h:1041
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHIResources.h:1018
Definition RHIResources.h:947
Definition RHIResources.h:972
Definition RHIResourceCollection.h:46
Definition RHIResources.h:54
Definition RHIResources.h:671
Definition RHIResources.h:3304
Definition RHIResources.h:2153
Definition RHIResources.h:1232
Definition RHIResources.h:3294
Definition RHIResources.h:819
void RHISetShaderUnbindsShared(FContextRHI &Context, TShaderRHI *ShaderRHI, TConstArrayView< FRHIShaderParameterUnbind > InUnbinds)
Definition RHIShaderParametersShared.h:120
void RHISetShaderParametersShared(FContextRHI &Context, TShaderRHI *ShaderRHI, TConstArrayView< uint8 > InParametersData, TConstArrayView< FRHIShaderParameter > InParameters, TConstArrayView< FRHIShaderParameterResource > InResourceParameters, TConstArrayView< FRHIShaderParameterResource > InBindlessParameters, bool bBindUAVsFirst=true)
Definition RHIShaderParametersShared.h:49
FRHIDescriptorHandle GetBindlessParameterHandle(const FRHIShaderParameterResource &Parameter)
Definition RHIShaderParametersShared.h:9
void SetShaderUAV(FContextRHI &Context, FRHIGraphicsShader *ShaderRHI, uint16 Index, FRHIUnorderedAccessView *UAV)
Definition RHIShaderParametersShared.h:30
U16 Index
Definition radfft.cpp:71
Definition RHIDefinitions.h:1401
Definition RHIShaderParameters.h:32
Definition RHIShaderParameters.h:354
Definition RHIShaderParameters.h:16