summaryrefslogtreecommitdiffstats
path: root/tests/spirv
diff options
context:
space:
mode:
Diffstat (limited to 'tests/spirv')
-rw-r--r--tests/spirv/flat-builtin.slang12
-rw-r--r--tests/spirv/primitive-id.slang23
2 files changed, 35 insertions, 0 deletions
diff --git a/tests/spirv/flat-builtin.slang b/tests/spirv/flat-builtin.slang
new file mode 100644
index 000000000..927c6d045
--- /dev/null
+++ b/tests/spirv/flat-builtin.slang
@@ -0,0 +1,12 @@
+//TEST:SIMPLE(filecheck=CHECK):-target spirv -emit-spirv-directly -entry main -stage fragment
+struct PerPrimitive {
+ int primitive_id : SV_PrimitiveID;
+ int layer : SV_RenderTargetArrayIndex;
+};
+
+// CHECK: OpDecorate %gl_PrimitiveID Flat
+// CHECK: OpDecorate %gl_Layer Flat
+[shader("fragment")]
+uint main(PerPrimitive data) : SV_Target {
+ return data.primitive_id + data.layer;
+} \ No newline at end of file
diff --git a/tests/spirv/primitive-id.slang b/tests/spirv/primitive-id.slang
new file mode 100644
index 000000000..8c354200b
--- /dev/null
+++ b/tests/spirv/primitive-id.slang
@@ -0,0 +1,23 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main -stage mesh
+struct PerVertex {
+ float4 pos : SV_Position;
+};
+
+struct PerPrimitive {
+ uint32_t primitive_id : SV_PrimitiveID;
+ uint32_t layer : SV_RenderTargetArrayIndex;
+};
+
+// CHECK: %gl_PrimitiveID = OpVariable %_ptr_Output__arr_int_int_1 Output
+
+[shader("mesh")]
+[numthreads(1, 1, 1)]
+[outputtopology("triangle")]
+void main(out vertices PerVertex vertices[3], out indices uint3 triangles[1], out primitives PerPrimitive primitive_data[1]) {
+ SetMeshOutputCounts(3, 1);
+
+ vertices[0].pos = vertices[1].pos = vertices[2].pos = 0;
+ triangles[0] = uint3(0, 1, 2);
+ primitive_data[0].primitive_id = 0;
+ primitive_data[0].layer = 0;
+} \ No newline at end of file