UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CopyTextureShaders.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "GlobalShader.h"
6#include "Math/IntVector.h"
9#include "RHICommandList.h"
10#include "RHIDefinitions.h"
12#include "Shader.h"
13#include "ShaderCompilerCore.h"
14#include "ShaderCore.h"
16#include "ShaderParameters.h"
18
21
23{
24 Texture2D = 0,
26 Texture3D = 2
27};
28
30{
31 Float,
32 Int32,
33 Uint32
34};
35
37{
38 template <ECopyTextureResourceType> struct TThreadGroupSize { static constexpr int32 X = 8, Y = 8, Z = 1; };
39 template <> struct TThreadGroupSize<ECopyTextureResourceType::Texture3D> { static constexpr int32 X = 4, Y = 4, Z = 4; };
40
51}
52
54{
56protected:
60 {
61 DstOffsetParam.Bind(Initializer.ParameterMap, TEXT("DstOffset"), SPF_Mandatory);
62 SrcOffsetParam.Bind(Initializer.ParameterMap, TEXT("SrcOffset"), SPF_Mandatory);
63 DimensionsParam.Bind(Initializer.ParameterMap, TEXT("Dimensions"), SPF_Mandatory);
64 SrcResourceParam.Bind(Initializer.ParameterMap, TEXT("SrcResource"), SPF_Mandatory);
65 DstResourceParam.Bind(Initializer.ParameterMap, TEXT("DstResource"), SPF_Mandatory);
66 }
67
68public:
78
81
83 FRHIComputeCommandList& RHICmdList,
85 FIntVector const& SrcOffset,
86 FIntVector const& DstOffset,
87 FIntVector const& Dimensions
88 )
89 {
90 check(SrcOffset.GetMin() >= 0 && DstOffset.GetMin() >= 0 && Dimensions.GetMin() >= 0);
91 check(Context.DstType != ECopyTextureResourceType::Texture2D || Dimensions.Z <= 1);
92
94
98
100
101 RHICmdList.DispatchComputeShader(
102 FMath::DivideAndRoundUp(uint32(Dimensions.X), Context.ThreadGroupSizeX),
103 FMath::DivideAndRoundUp(uint32(Dimensions.Y), Context.ThreadGroupSizeY),
104 FMath::DivideAndRoundUp(uint32(Dimensions.Z), Context.ThreadGroupSizeZ)
105 );
106 }
107
109
110protected:
111 template<typename ShaderType>
113
114 template <ECopyTextureResourceType SrcType>
116
117 template <ECopyTextureResourceType SrcType, ECopyTextureResourceType DstType>
119
125};
126
127template <ECopyTextureResourceType SrcType, ECopyTextureResourceType DstType, ECopyTextureValueType ValueType, uint32 NumChannels>
129{
130 static_assert(NumChannels >= 1 && NumChannels <= 4, "Only 1 to 4 channels are supported.");
131
133
134public:
139
143
144 static const TCHAR* GetSourceFilename() { return TEXT("/Engine/Private/CopyTextureShaders.usf"); }
145 static const TCHAR* GetFunctionName() { return TEXT("CopyTextureCS"); }
146
151
153 {
155
156 OutEnvironment.SetDefine(TEXT("THREADGROUPSIZE_X"), ThreadGroupSizeX);
157 OutEnvironment.SetDefine(TEXT("THREADGROUPSIZE_Y"), ThreadGroupSizeY);
158 OutEnvironment.SetDefine(TEXT("THREADGROUPSIZE_Z"), ThreadGroupSizeZ);
159 OutEnvironment.SetDefine(TEXT("SRC_TYPE"), uint32(SrcType));
160 OutEnvironment.SetDefine(TEXT("DST_TYPE"), uint32(DstType));
161
162 switch (ValueType)
163 {
165 switch (NumChannels)
166 {
167 case 1: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("float")); break;
168 case 2: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("float2")); break;
169 case 3: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("float3")); break;
170 case 4: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("float4")); break;
171 }
172 break;
173
175 switch (NumChannels)
176 {
177 case 1: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("int")); break;
178 case 2: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("int2")); break;
179 case 3: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("int3")); break;
180 case 4: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("int4")); break;
181 }
182 break;
183
185 switch (NumChannels)
186 {
187 case 1: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("uint")); break;
188 case 2: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("uint2")); break;
189 case 3: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("uint3")); break;
190 case 4: OutEnvironment.SetDefine(TEXT("VALUE_TYPE"), TEXT("uint4")); break;
191 }
192 break;
193 }
194 }
195
197 {
198 OutContext.ThreadGroupSizeX = ThreadGroupSizeX;
199 OutContext.ThreadGroupSizeY = ThreadGroupSizeY;
200 OutContext.ThreadGroupSizeZ = ThreadGroupSizeZ;
201 OutContext.SrcType = SrcType;
202 OutContext.DstType = DstType;
203 OutContext.ValueType = ValueType;
204 OutContext.NumChannels = NumChannels;
205 }
206};
207
208template <typename ShaderType>
210{
211 TShaderRef<ShaderType> Shader = GlobalShaderMap->GetShader<ShaderType>();
212 Shader->GetDispatchContext(OutContext);
213 return Shader;
214}
215
216template <ECopyTextureResourceType SrcType, ECopyTextureResourceType DstType>
227
228template <ECopyTextureResourceType SrcType>
230{
231 switch (DstType)
232 {
233 default: checkNoEntry();
234 case ECopyTextureResourceType::Texture2D: return FCopyTextureCS::SelectShader<SrcType, ECopyTextureResourceType::Texture2D >(GlobalShaderMap, ValueType, OutContext);
235 case ECopyTextureResourceType::Texture2DArray: return FCopyTextureCS::SelectShader<SrcType, ECopyTextureResourceType::Texture2DArray>(GlobalShaderMap, ValueType, OutContext);
236 case ECopyTextureResourceType::Texture3D: return FCopyTextureCS::SelectShader<SrcType, ECopyTextureResourceType::Texture3D >(GlobalShaderMap, ValueType, OutContext);
237 }
238}
239
241{
242 switch (SrcType)
243 {
244 default: checkNoEntry();
245 case ECopyTextureResourceType::Texture2D: return FCopyTextureCS::SelectShader<ECopyTextureResourceType::Texture2D >(GlobalShaderMap, DstType, ValueType, OutContext);
246 case ECopyTextureResourceType::Texture2DArray: return FCopyTextureCS::SelectShader<ECopyTextureResourceType::Texture2DArray>(GlobalShaderMap, DstType, ValueType, OutContext);
247 case ECopyTextureResourceType::Texture3D: return FCopyTextureCS::SelectShader<ECopyTextureResourceType::Texture3D >(GlobalShaderMap, DstType, ValueType, OutContext);
248 }
249}
#define check(expr)
Definition AssertionMacros.h:314
#define checkNoEntry()
Definition AssertionMacros.h:316
ECopyTextureValueType
Definition CopyTextureShaders.h:30
ECopyTextureResourceType
Definition CopyTextureShaders.h:23
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool IsFeatureLevelSupported(const FStaticShaderPlatform InShaderPlatform, ERHIFeatureLevel::Type InFeatureLevel)
Definition DataDrivenShaderPlatformInfo.h:1047
#define DECLARE_EXPORTED_TYPE_LAYOUT(T, RequiredAPI, Interface)
Definition MemoryLayout.h:559
void SetShaderValue(FRHIBatchedShaderParameters &BatchedParameters, const FShaderParameter &Parameter, const ParameterType &Value, uint32 ElementIndex=0)
Definition ShaderParameterUtils.h:24
@ SPF_Mandatory
Definition ShaderParameters.h:51
#define DECLARE_EXPORTED_SHADER_TYPE(ShaderClass, ShaderMetaTypeShortcut, RequiredAPI,...)
Definition Shader.h:1683
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition CopyTextureShaders.h:54
LAYOUT_FIELD(FShaderParameter, DstOffsetParam)
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)
Definition CopyTextureShaders.h:69
void Dispatch(FRHIComputeCommandList &RHICmdList, const CopyTextureCS::DispatchContext &Context, FIntVector const &SrcOffset, FIntVector const &DstOffset, FIntVector const &Dimensions)
Definition CopyTextureShaders.h:82
LAYOUT_FIELD(FShaderParameter, SrcOffsetParam)
const FShaderResourceParameter & GetSrcResourceParam()
Definition CopyTextureShaders.h:79
static TShaderRef< FCopyTextureCS > SelectShader(FGlobalShaderMap *GlobalShaderMap, ECopyTextureResourceType SrcType, ECopyTextureResourceType DstType, ECopyTextureValueType ValueType, CopyTextureCS::DispatchContext &OutContext)
Definition CopyTextureShaders.h:240
const FShaderResourceParameter & GetDstResourceParam()
Definition CopyTextureShaders.h:80
LAYOUT_FIELD(FShaderResourceParameter, DstResourceParam)
LAYOUT_FIELD(FShaderResourceParameter, SrcResourceParam)
LAYOUT_FIELD(FShaderParameter, DimensionsParam)
FCopyTextureCS()
Definition CopyTextureShaders.h:57
FCopyTextureCS(const ShaderMetaType::CompiledShaderInitializerType &Initializer)
Definition CopyTextureShaders.h:58
static const bool GetRequiresBindfulUtilityShaders(const FStaticShaderPlatform Platform)
Definition DataDrivenShaderPlatformInfo.h:819
Definition GlobalShader.h:173
RENDERCORE_API TShaderRef< FShader > GetShader(FShaderType *ShaderType, int32 PermutationId=0) const
Definition GlobalShader.cpp:608
Definition GlobalShader.h:269
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &Environment)
Definition GlobalShader.h:289
Definition MemoryImage.h:49
FRHIBatchedShaderParameters & GetScratchShaderParameters()
Definition RHICommandList.h:1190
Definition RHICommandList.h:2735
void SetBatchedShaderParameters(FRHIComputeShader *InShader, FRHIBatchedShaderParameters &InBatchedParameters)
Definition RHICommandList.h:2850
void DispatchComputeShader(uint32 ThreadGroupCountX, uint32 ThreadGroupCountY, uint32 ThreadGroupCountZ)
Definition RHICommandList.h:2929
FRHIComputeShader * GetBoundComputeShader() const
Definition RHICommandList.h:2793
Definition RHIResources.h:1018
Definition ShaderParameters.h:56
Definition ShaderParameters.h:87
Definition CopyTextureShaders.h:129
static const TCHAR * GetSourceFilename()
Definition CopyTextureShaders.h:144
static bool ShouldCompilePermutation(const FGlobalShaderPermutationParameters &Parameters)
Definition CopyTextureShaders.h:147
static constexpr uint32 ThreadGroupSizeX
Definition CopyTextureShaders.h:140
static constexpr uint32 ThreadGroupSizeY
Definition CopyTextureShaders.h:141
static constexpr uint32 ThreadGroupSizeZ
Definition CopyTextureShaders.h:142
TCopyResourceCS(const ShaderMetaType::CompiledShaderInitializerType &Initializer)
Definition CopyTextureShaders.h:136
TCopyResourceCS()
Definition CopyTextureShaders.h:135
static const TCHAR * GetFunctionName()
Definition CopyTextureShaders.h:145
static void ModifyCompilationEnvironment(const FGlobalShaderPermutationParameters &Parameters, FShaderCompilerEnvironment &OutEnvironment)
Definition CopyTextureShaders.h:152
void GetDispatchContext(CopyTextureCS::DispatchContext &OutContext)
Definition CopyTextureShaders.h:196
Definition Shader.h:1021
Definition CopyTextureShaders.h:37
@ SM5
Definition RHIFeatureLevel.h:42
Definition CopyTextureShaders.h:42
uint32 ThreadGroupSizeY
Definition CopyTextureShaders.h:44
uint32 ThreadGroupSizeZ
Definition CopyTextureShaders.h:45
ECopyTextureValueType ValueType
Definition CopyTextureShaders.h:48
ECopyTextureResourceType DstType
Definition CopyTextureShaders.h:47
uint32 ThreadGroupSizeX
Definition CopyTextureShaders.h:43
uint32 NumChannels
Definition CopyTextureShaders.h:49
ECopyTextureResourceType SrcType
Definition CopyTextureShaders.h:46
Definition CopyTextureShaders.h:38
static constexpr int32 Z
Definition CopyTextureShaders.h:38
static constexpr int32 Y
Definition CopyTextureShaders.h:38
static constexpr int32 X
Definition CopyTextureShaders.h:38
Definition GlobalShader.h:73
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
Definition RHIShaderParameters.h:241
Definition Shader.h:1610
Definition ShaderCore.h:544
const EShaderPlatform Platform
Definition ShaderPermutation.h:29
IntType Y
Definition IntVector.h:34
IntType X
Definition IntVector.h:31
IntType Z
Definition IntVector.h:37
IntType GetMin() const
Definition IntVector.h:453