diff options
| author | Yong He <yonghe@outlook.com> | 2024-06-11 12:31:37 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-11 12:31:37 -0700 |
| commit | 6909d65c77bb4e7c9cfb281bd1684a58d5f8b94d (patch) | |
| tree | 396a628b7fda779dcc6e820e86d44e29d0c7be95 /tests/spirv | |
| parent | ef20d9309674dc8c25a9798d95138cf739299928 (diff) | |
SPIRV backend: add support for tessellation stages, (#4336)
Diffstat (limited to 'tests/spirv')
| -rw-r--r-- | tests/spirv/tessellation.slang | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/spirv/tessellation.slang b/tests/spirv/tessellation.slang new file mode 100644 index 000000000..deb6ed298 --- /dev/null +++ b/tests/spirv/tessellation.slang @@ -0,0 +1,65 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv + +// CHECK-DAG: OpExecutionMode %main SpacingEqual + +// CHECK-DAG: OpExecutionMode %main OutputVertices 4 + +// CHECK-DAG: OpExecutionMode %main VertexOrderCw + +// CHECK-DAG: OpExecutionMode %main Quads + +// CHECK: OpDecorate %gl_TessLevelOuter BuiltIn TessLevelOuter +// CHECK: OpDecorate %gl_TessLevelOuter Patch +// CHECK: OpDecorate %gl_TessLevelInner BuiltIn TessLevelInner +// CHECK: OpDecorate %gl_TessLevelInner Patch + +// CHECK: OpControlBarrier %uint_2 %uint_4 %uint_0 + +// CHECK: OpStore %gl_TessLevelOuter +// CHECK: OpStore %gl_TessLevelInner + +struct VS_OUT +{ + float3 position : POSITION; +}; + +struct HS_OUT +{ + float3 position : POSITION; +}; + +struct HSC_OUT +{ + float EdgeTessFactor[4] : SV_TessFactor; + float InsideTessFactor[2] : SV_InsideTessFactor; +}; + +// Hull Shader (HS) +[domain("quad")] +[partitioning("integer")] +[outputtopology("triangle_cw")] +[outputcontrolpoints(4)] +[patchconstantfunc("constants")] +HS_OUT main(InputPatch<VS_OUT, 4> patch, uint i : SV_OutputControlPointID) +{ + HS_OUT o; + o.position = patch[i].position; + return o; +} + +HSC_OUT constants(InputPatch<VS_OUT, 4> patch) +{ + float3 p0 = patch[0].position; + float3 p1 = patch[1].position; + float3 p2 = patch[2].position; + float3 p3 = patch[3].position; + + HSC_OUT o; + o.EdgeTessFactor[0] = dot(p0, p1); + o.EdgeTessFactor[1] = dot(p0, p3); + o.EdgeTessFactor[2] = dot(p2, p3); + o.EdgeTessFactor[3] = dot(p1, p2); + o.InsideTessFactor[0] = lerp(o.EdgeTessFactor[1], o.EdgeTessFactor[3], 0.5); + o.InsideTessFactor[1] = lerp(o.EdgeTessFactor[0], o.EdgeTessFactor[2], 0.5); + return o; +}
\ No newline at end of file |
