summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/pipeline/tessellation/scalar-tessellation-factor.slang52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/pipeline/tessellation/scalar-tessellation-factor.slang b/tests/pipeline/tessellation/scalar-tessellation-factor.slang
new file mode 100644
index 000000000..9fc97732d
--- /dev/null
+++ b/tests/pipeline/tessellation/scalar-tessellation-factor.slang
@@ -0,0 +1,52 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -stage hull -entry hullMain -warnings-disable 39001
+
+// Test for issue #7000: scalar tessellation factors should convert to arrays properly
+
+struct VSOutput
+{
+ float4 Pos : SV_POSITION;
+ float3 Normal;
+ float2 UV;
+};
+
+struct HSOutput
+{
+ float4 Pos : SV_POSITION;
+ float3 Normal;
+ float2 UV;
+};
+
+struct ConstantsHSOutput
+{
+ float TessLevelOuter[3] : SV_TessFactor;
+ float TessLevelInner : SV_InsideTessFactor; // Scalar (should convert to float[2] for GLSL)
+};
+
+ConstantsHSOutput ConstantsHS()
+{
+ ConstantsHSOutput output;
+ output.TessLevelInner = 4.0;
+ output.TessLevelOuter[0] = 4.0;
+ output.TessLevelOuter[1] = 4.0;
+ output.TessLevelOuter[2] = 4.0;
+ return output;
+}
+
+[shader("hull")]
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("ConstantsHS")]
+HSOutput hullMain(InputPatch<VSOutput, 3> patch, uint InvocationID: SV_OutputControlPointID)
+{
+ HSOutput output;
+ output.Pos = patch[InvocationID].Pos;
+ output.Normal = patch[InvocationID].Normal;
+ output.UV = patch[InvocationID].UV;
+ return output;
+}
+
+// CHECK: OpExecutionMode
+// CHECK-DAG: OpDecorate {{.*}} BuiltIn TessLevelInner
+// CHECK-DAG: OpDecorate {{.*}} BuiltIn TessLevelOuter \ No newline at end of file