summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/spirv/pointer-2.slang2
-rw-r--r--tests/spirv/sv-vertex-id.slang16
-rw-r--r--tests/spirv/sv-vulkan-instance-vertex-id.slang42
3 files changed, 59 insertions, 1 deletions
diff --git a/tests/spirv/pointer-2.slang b/tests/spirv/pointer-2.slang
index 201d97001..1f2b2d0ea 100644
--- a/tests/spirv/pointer-2.slang
+++ b/tests/spirv/pointer-2.slang
@@ -44,7 +44,7 @@ ConstantBuffer<PushConstants> constantBuffer;
// CHECK_SPV_VIA_GLSL: OpTypePointer PhysicalStorageBuffer
[shader("vertex")]
-VSOutput vertexMain(int vertexIndex: SV_VertexID)
+VSOutput vertexMain(int vertexIndex: SV_VulkanVertexID)
{
//
// Test field access chains.
diff --git a/tests/spirv/sv-vertex-id.slang b/tests/spirv/sv-vertex-id.slang
new file mode 100644
index 000000000..c92f0351e
--- /dev/null
+++ b/tests/spirv/sv-vertex-id.slang
@@ -0,0 +1,16 @@
+//TEST:SIMPLE(filecheck=GLSL): -target glsl -entry vertMain -stage vertex
+//TEST:SIMPLE(filecheck=CHECK): -target spirv
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-via-glsl
+
+// CHECK-DAG: %[[BASE_VERTEX:[0-9]+|[a-zA-Z_][a-zA-Z0-9_]*]] = OpVariable {{.*}} BuiltIn BaseVertex
+// CHECK-DAG: %[[REG1:[0-9a-zA-Z_]+]] = OpLoad %int %[[BASE_VERTEX]]
+// CHECK-DAG: %[[REG2:[0-9a-zA-Z_]+]] = OpLoad %int %gl_VertexIndex
+// CHECK-DAG: OpISub %int %[[REG2]] %[[REG1]]
+
+// GLSL: gl_VertexIndex - gl_BaseVertex
+
+[shader("vertex")]
+float4 vertMain(int i : SV_VertexID) : SV_Position
+{
+ return i;
+}
diff --git a/tests/spirv/sv-vulkan-instance-vertex-id.slang b/tests/spirv/sv-vulkan-instance-vertex-id.slang
new file mode 100644
index 000000000..c8654c857
--- /dev/null
+++ b/tests/spirv/sv-vulkan-instance-vertex-id.slang
@@ -0,0 +1,42 @@
+//TEST:SIMPLE(filecheck=SPIRV): -entry main -stage vertex -target spirv -emit-spirv-directly
+//TEST:SIMPLE(filecheck=GLSL): -entry main -stage vertex -target glsl
+//TEST:SIMPLE(filecheck=METAL): -entry main -stage vertex -target metal
+//TEST:SIMPLE(filecheck=WGSL): -entry main -stage vertex -target wgsl
+
+struct VSInput
+{
+ uint vertexID : SV_VulkanVertexID;
+ uint instanceID : SV_VulkanInstanceID;
+};
+
+struct VSOutput
+{
+ float4 position : SV_POSITION;
+};
+
+[shader("vertex")]
+VSOutput main(VSInput input)
+{
+ VSOutput output;
+ output.position = float4(input.vertexID + input.instanceID);
+
+ // SPIRV-DAG: BuiltIn InstanceIndex
+ // SPIRV-DAG: BuiltIn VertexIndex
+ // SPIRV-NOT: BuiltIn BaseInstance
+ // SPIRV-NOT: BuiltIn BaseVertex
+
+ // GLSL-NOT: GL_ARB_shader_draw_parameters
+ // GLSL-DAG: gl_VertexIndex
+ // GLSL-NOT: gl_BaseVertex
+ // GLSL-DAG: gl_InstanceIndex
+ // GLSL-NOT: gl_BaseInstance
+
+ // METAL-DAG: vertex_id
+ // METAL-DAG: instance_id
+
+ // WGSL-DAG: vertex_index
+ // WGSL-DAG: instance_index
+
+ return output;
+}
+