yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

pdeayton-nvAdd fwidth_coarse and fwidth_fine functions (#6941)7d7027853

master
3.3 KiB105 linesraw
1//TEST:SIMPLE(filecheck=CHECK_HLSL): -target hlsl -stage fragment -entry main
2//TEST:SIMPLE(filecheck=CHECK_SPV): -target spirv -emit-spirv-directly -stage fragment -entry main
3//TEST:SIMPLE(filecheck=CHECK_GLSL): -target glsl -stage fragment -entry main
4
5bool testFragmentProcessingDerivativeFunctionsScalar()
6{
7// CHECK_HLSL: ddx
8// CHECK_SPV: OpDPdx
9// CHECK_GLSL: dFdx
10// CHECK_HLSL: ddy
11// CHECK_SPV: OpDPdy
12// CHECK_GLSL: dFdy
13// CHECK_HLSL: ddx_fine
14// CHECK_SPV: OpDPdxFine
15// CHECK_GLSL: dFdxFine
16// CHECK_HLSL: ddy_fine
17// CHECK_SPV: OpDPdyFine
18// CHECK_GLSL: dFdyFine
19// CHECK_HLSL: ddx_coarse
20// CHECK_SPV: OpDPdxCoarse
21// CHECK_GLSL: dFdxCoarse
22// CHECK_HLSL: ddy_coarse
23// CHECK_SPV: OpDPdyCoarse
24// CHECK_GLSL: dFdyCoarse
25// CHECK_HLSL: fwidth
26// CHECK_SPV: OpFwidth
27// CHECK_GLSL: fwidth
28// CHECK_HLSL: abs(ddx_fine({{.*}})) + abs(ddy_fine({{.*}}))
29// CHECK_SPV: OpFwidthFine
30// CHECK_GLSL: fwidthFine
31// CHECK_HLSL: abs(ddx_coarse({{.*}})) + abs(ddy_coarse({{.*}}))
32// CHECK_SPV: OpFwidthCoarse
33// CHECK_GLSL: fwidthCoarse
34    return true
35        && ddx(1.0f) != -1.0f
36        && ddy(1.0f) != -1.0f
37        && ddx_fine(1.0f) != -1.0f
38        && ddy_fine(1.0f) != -1.0f
39        && ddx_coarse(1.0f) != -1.0f
40        && ddy_coarse(1.0f) != -1.0f
41        && fwidth(1.0f) != -1.0f
42        && fwidth_fine(1.0f) != -1.0f
43        && fwidth_coarse(1.0f) != -1.0f
44        ;
45}
46__generic<let N:int>
47bool testFragmentProcessingDerivativeFunctionsVector()
48{
49// CHECK_HLSL: ddx
50// CHECK_SPV: OpDPdx
51// CHECK_GLSL: dFdx
52// CHECK_HLSL: ddy
53// CHECK_SPV: OpDPdy
54// CHECK_GLSL: dFdy
55// CHECK_HLSL: ddx_fine
56// CHECK_SPV: OpDPdxFine
57// CHECK_GLSL: dFdxFine
58// CHECK_HLSL: ddy_fine
59// CHECK_SPV: OpDPdyFine
60// CHECK_GLSL: dFdyFine
61// CHECK_HLSL: ddx_coarse
62// CHECK_SPV: OpDPdxCoarse
63// CHECK_GLSL: dFdxCoarse
64// CHECK_HLSL: ddy_coarse
65// CHECK_SPV: OpDPdyCoarse
66// CHECK_GLSL: dFdyCoarse
67// CHECK_HLSL: fwidth
68// CHECK_SPV: OpFwidth
69// CHECK_GLSL: fwidth
70// CHECK_HLSL: abs(ddx_fine({{.*}})) + abs(ddy_fine({{.*}}))
71// CHECK_SPV: OpFwidthFine
72// CHECK_GLSL: fwidthFine
73// CHECK_HLSL: abs(ddx_coarse({{.*}})) + abs(ddy_coarse({{.*}}))
74// CHECK_SPV: OpFwidthCoarse
75// CHECK_GLSL: fwidthCoarse
76    return true
77        && all(ddx(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
78        && all(ddy(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
79        && all(ddx_fine(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
80        && all(ddy_fine(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
81        && all(ddx_coarse(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
82        && all(ddy_coarse(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
83        && all(fwidth(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
84        && all(fwidth_fine(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
85        && all(fwidth_coarse(vector<float,N>(1.0f)) != vector<float,N>(-1.0f))
86        ;
87}
88
89bool testFragmentProcessingFunctions()
90{
91    return true
92        && testFragmentProcessingDerivativeFunctionsScalar()
93        && testFragmentProcessingDerivativeFunctionsVector<2>()
94        && testFragmentProcessingDerivativeFunctionsVector<3>()
95        && testFragmentProcessingDerivativeFunctionsVector<4>()
96        ;
97    ;
98}
99
100[shader("pixel")]
101int4 main() : SV_Target {
102    return int4(true
103        && testFragmentProcessingFunctions()
104        );
105}