From a00db74d1afa717dd90dfcf3170c63d0d1c0d3d7 Mon Sep 17 00:00:00 2001 From: Darren Wihandi <65404740+fairywreath@users.noreply.github.com> Date: Fri, 20 Dec 2024 01:00:20 -0500 Subject: Add base vertex and base instance system values (#5918) * Add base vertex and base instance system values * Fixed incorrect stage in tests --- .../system-values-draw-parameters.slang | 19 ++++++++++++ .../system-values-draw-parameters.slang | 34 ++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 tests/glsl-intrinsic/system-values-draw-parameters.slang create mode 100644 tests/hlsl-intrinsic/system-values-draw-parameters.slang (limited to 'tests') diff --git a/tests/glsl-intrinsic/system-values-draw-parameters.slang b/tests/glsl-intrinsic/system-values-draw-parameters.slang new file mode 100644 index 000000000..a58305c13 --- /dev/null +++ b/tests/glsl-intrinsic/system-values-draw-parameters.slang @@ -0,0 +1,19 @@ +//TEST:SIMPLE(filecheck=CHECK_SPIRV): -entry main -stage vertex -target spirv +//TEST:SIMPLE(filecheck=CHECK_GLSL): -entry main -stage vertex -target glsl +//TEST:SIMPLE(filecheck=CHECK_HLSL): -entry main -stage vertex -target hlsl +//TEST:SIMPLE(filecheck=CHECK_METAL): -entry main -stage vertex -target metal + +#version 460 + +void main() +{ + float x = float(gl_VertexIndex + gl_BaseVertex) * 0.1f; + float y = float(gl_InstanceIndex + gl_BaseInstance) * 0.2f; + gl_Position = vec4(x, y, 0.0f, 1.0f); // Output 2D position with z=0 and w=1. + + // CHECK_SPIRV: BuiltIn BaseInstance + // CHECK_GLSL: gl_BaseInstance + // CHECK_HLSL: SV_StartInstanceLocation + // CHECK_METAL: base_instance +} + diff --git a/tests/hlsl-intrinsic/system-values-draw-parameters.slang b/tests/hlsl-intrinsic/system-values-draw-parameters.slang new file mode 100644 index 000000000..ea84ac116 --- /dev/null +++ b/tests/hlsl-intrinsic/system-values-draw-parameters.slang @@ -0,0 +1,34 @@ +//TEST:SIMPLE(filecheck=CHECK_SPIRV): -entry main -stage vertex -target spirv +//TEST:SIMPLE(filecheck=CHECK_GLSL): -entry main -stage vertex -target glsl +//TEST:SIMPLE(filecheck=CHECK_HLSL): -entry main -stage vertex -target hlsl +//TEST:SIMPLE(filecheck=CHECK_METAL): -entry main -stage vertex -target metal + +struct VSInput +{ + uint vertexID : SV_VertexID; + uint instanceID : SV_InstanceID; +}; + +struct VSOutput +{ + float4 position : SV_POSITION; +}; + +VSOutput main(VSInput input, + uint startVertexLocation : SV_StartVertexLocation, + uint startInstanceLocation : SV_StartInstanceLocation) +{ + VSOutput output; + + float x = (float)(input.vertexID + startVertexLocation) * 0.1f; + float y = (float)(input.instanceID + startInstanceLocation) * 0.2f; + output.position = float4(x, y, 0.0f, 1.0f); + + // CHECK_SPIRV: BuiltIn BaseInstance + // CHECK_GLSL: gl_BaseInstance + // CHECK_HLSL: SV_StartInstanceLocation + // CHECK_METAL: base_instance + + return output; +} + -- cgit v1.2.3