summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorDarren Wihandi <65404740+fairywreath@users.noreply.github.com>2025-05-19 14:21:25 -0400
committerGitHub <noreply@github.com>2025-05-19 11:21:25 -0700
commit634e3960c2bc322bbd51fccc7ff395d9f24e35dc (patch)
treed7cc501d74a1e4e5fb7fa7d5dcf6c6d515603678 /tests
parent31d80c767865d360afba39e5248ab709c587792f (diff)
Map `SV_VertexID` to `gl_VertexIndex-gl_BaseVertex`, add `SV_Vulkan*ID` semantics (#7150)
* Map SV_VertexID to `gl_VertexIndex - gl_BaseVertex`, provide SV_Vulkan* SV semantics * Fix docs * Regenerate toc * Fix affected pointer-2 test * Add tests --------- Co-authored-by: Yong He <yonghe@outlook.com>
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;
+}
+