您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

58 行
1.5 KiB

#include "../../Core/ShaderLibrary/Common.hlsl"
#define SOURCE(n) _Source##n
#define RESULT(n) _Result##n
#define SOURCE_DECLARATION(n) Texture2D<float##n> SOURCE(n)
#define RESULT_DECLARATION(n) RWTexture2D<float##n> RESULT(n)
SOURCE_DECLARATION(1);
SOURCE_DECLARATION(2);
SOURCE_DECLARATION(3);
SOURCE_DECLARATION(4);
RESULT_DECLARATION(1);
RESULT_DECLARATION(2);
RESULT_DECLARATION(3);
RESULT_DECLARATION(4);
SamplerState sampler_LinearClamp;
CBUFFER_START(cb)
float4 _Size;
CBUFFER_END
#define KERNEL_SAMPLECOPY(sourceN, resultN, subscript) [numthreads(8, 8, 1)]\
void KSampleCopy##sourceN##_##resultN##_##subscript(uint2 dispatchThreadId : SV_DispatchThreadID)\
{\
RESULT(resultN)[dispatchThreadId] = SOURCE(sourceN).SampleLevel(sampler_LinearClamp, float2(dispatchThreadId) * _Size.zw, 0.0).subscript;\
}
// Source R
#pragma kernel KSampleCopy1_1_x
KERNEL_SAMPLECOPY(1, 1, x);
// Source RG
// Result R
#pragma kernel KSampleCopy2_1_x
KERNEL_SAMPLECOPY(2, 1, x);
#pragma kernel KSampleCopy2_1_y
KERNEL_SAMPLECOPY(2, 1, y);
// Result RG
#pragma kernel KSampleCopy2_2_xx
KERNEL_SAMPLECOPY(2, 2, xx);
#pragma kernel KSampleCopy2_2_xy
KERNEL_SAMPLECOPY(2, 2, xy);
#pragma kernel KSampleCopy2_2_yx
KERNEL_SAMPLECOPY(2, 2, yx);
#pragma kernel KSampleCopy2_2_yy
KERNEL_SAMPLECOPY(2, 2, yy);
// Source RGBA
// Result R
#pragma kernel KSampleCopy4_1_x
KERNEL_SAMPLECOPY(4, 1, x);
#pragma kernel KSampleCopy4_1_y
KERNEL_SAMPLECOPY(4, 1, y);
#pragma kernel KSampleCopy4_1_z
KERNEL_SAMPLECOPY(4, 1, z);
#pragma kernel KSampleCopy4_1_w
KERNEL_SAMPLECOPY(4, 1, w);