yum-mirror/slang

Making it easier to work with shaders

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

Jay KwakLegalize array size of SV_TessFactor and SV_InsideTessFactor (#6409)73a8d74bd

master
1.7 KiB55 linesraw
1//TEST:SIMPLE(filecheck=GLSL):-target glsl -entry hullMain -stage hull -allow-glsl
2//TEST:SIMPLE(filecheck=SPIRV):-target spirv -entry hullMain -stage hull -allow-glsl
3
4// When targeting SPIRV, the tessellation factors should be an array with size 4 or 2.
5
6// GLSL: gl_TessLevelOuter[3] = 0.0;
7// GLSL: gl_TessLevelInner[1] = 0.0;
8
9// SPIRV: OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter
10// SPIRV: OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner
11
12// SPIRV-DAG: OpStore %gl_TessLevelOuter %[[OuterOpCompositeConstruct:[1-9][0-9]*]]
13// SPIRV-DAG: %[[OuterOpCompositeConstruct]] = OpCompositeConstruct %[[OuterOpTypeArray:[a-zA-Z_0-9]*]]
14// SPIRV-DAG: %[[OuterOpTypeArray]] = OpTypeArray %{{[^ ]*}} %[[OuterOpConstant:[a-zA-Z_0-9]*]]
15// SPIRV-DAG: %[[OuterOpConstant]] = OpConstant %{{[^ ]*}} 4
16
17// SPIRV-DAG: OpStore %gl_TessLevelInner %[[InnerOpCompositeConstruct:[1-9][0-9]*]]
18// SPIRV-DAG: %[[InnerOpCompositeConstruct]] = OpCompositeConstruct %[[InnerOpTypeArray:[a-zA-Z_0-9]*]]
19// SPIRV-DAG: %[[InnerOpTypeArray]] = OpTypeArray %{{[^ ]*}} %[[InnerOpConstant:[a-zA-Z_0-9]*]]
20// SPIRV-DAG: %[[InnerOpConstant]] = OpConstant %{{[^ ]*}} 2
21
22struct HsOut
23{
24    float2 pos;
25    float2 hm;
26};
27
28struct HscOut
29{
30    float EdgeTessFactor[3] : SV_TessFactor; // Should be legalized to float[4]
31    float InsideTessFactor[1] : SV_InsideTessFactor; // Should be legalized to float[2]
32};
33
34[domain("tri")]
35[partitioning("integer")]
36[outputtopology("triangle_ccw")]
37[outputcontrolpoints(4)]
38[patchconstantfunc("constants")]
39HsOut hullMain()
40{
41    HsOut o;
42    o.pos = 1;
43    o.hm = 2;
44    return o;
45}
46
47HscOut constants()
48{
49    HscOut o;
50    o.EdgeTessFactor[0] = 1;
51    o.EdgeTessFactor[1] = 2;
52    o.EdgeTessFactor[2] = 3;
53    o.InsideTessFactor[0] = 0.5;
54    return o;
55}