diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/spirv/pointer-2.slang | 2 | ||||
| -rw-r--r-- | tests/spirv/sv-vertex-id.slang | 16 | ||||
| -rw-r--r-- | tests/spirv/sv-vulkan-instance-vertex-id.slang | 42 |
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; +} + |
