From bae87afb20f95f9f27c64c4955bbc4464c576509 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 6 Feb 2025 22:02:43 -0800 Subject: Support stage_switch. (#6311) * Support stage_switch. * Update proposal status. * Fix gl_InstanceID. * Fix. --- tests/language-feature/stage-switch.slang | 38 +++++++++++++++++++++++++++++++ tests/spirv/primitive-id-2.slang | 13 +++++++++++ 2 files changed, 51 insertions(+) create mode 100644 tests/language-feature/stage-switch.slang create mode 100644 tests/spirv/primitive-id-2.slang (limited to 'tests') diff --git a/tests/language-feature/stage-switch.slang b/tests/language-feature/stage-switch.slang new file mode 100644 index 000000000..1bdd1f85a --- /dev/null +++ b/tests/language-feature/stage-switch.slang @@ -0,0 +1,38 @@ + +//TEST:SIMPLE(filecheck=CHECK):-target spirv + +float ddx_or(float val, float defaultVal) +{ + __stage_switch + { + case fragment: + return ddx(val); + default: + return defaultVal; + } +} + +float intermediate(float val) +{ + return ddx_or(val, 1.0); +} + +RWStructuredBuffer output; + +[numthreads(1,1,1)] +void computeMain() +{ + // CHECK-LABEL: %computeMain = OpFunction + // CHECK: OpStore %{{.*}} %float_1 + // CHECK: OpFunctionEnd + output[0] = intermediate(2.0); +} + +[shader("fragment")] +float4 fragmentMain(float vin) : SV_Target +{ + // CHECK-LABEL: %fragmentMain = OpFunction + // CHECK: OpDPdx + // CHECK: OpFunctionEnd + return intermediate(vin); +} \ No newline at end of file diff --git a/tests/spirv/primitive-id-2.slang b/tests/spirv/primitive-id-2.slang new file mode 100644 index 000000000..b10514b53 --- /dev/null +++ b/tests/spirv/primitive-id-2.slang @@ -0,0 +1,13 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -entry main -stage fragment + +// CHECK: OpCapability Geometry +// CHECK: BuiltIn PrimitiveId + +#version 450 + +out vec4 color; + +void main() +{ + color = float4(gl_PrimitiveID, 0, 0, 1); +} \ No newline at end of file -- cgit v1.2.3