From f9bcad35562c1f08638e6d3eb397d370d7d2f8f8 Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Fri, 19 Apr 2024 23:18:40 -0400 Subject: Initial pass to add capability declarations to stdlib intrinsics. (#3912) --- .../capability-invalid-compute-in-fragment.slang | 10 +++++ .../capability-invalid-fragment-in-compute.slang | 21 +++++++++++ .../language-feature/capability/capability3.slang | 43 +++++++++------------- .../cpp-target-has-cpp-impl-from-default.slang | 32 ++++++++++++++++ .../cpp-target-has-cpp-impl-from-default2.slang | 34 +++++++++++++++++ .../capability/cpp-target-missing-cpp-impl.slang | 34 +++++++++++++++++ 6 files changed, 149 insertions(+), 25 deletions(-) create mode 100644 tests/language-feature/capability/capability-invalid-compute-in-fragment.slang create mode 100644 tests/language-feature/capability/capability-invalid-fragment-in-compute.slang create mode 100644 tests/language-feature/capability/cpp-target-has-cpp-impl-from-default.slang create mode 100644 tests/language-feature/capability/cpp-target-has-cpp-impl-from-default2.slang create mode 100644 tests/language-feature/capability/cpp-target-missing-cpp-impl.slang (limited to 'tests/language-feature') diff --git a/tests/language-feature/capability/capability-invalid-compute-in-fragment.slang b/tests/language-feature/capability/capability-invalid-compute-in-fragment.slang new file mode 100644 index 000000000..d36a62adf --- /dev/null +++ b/tests/language-feature/capability/capability-invalid-compute-in-fragment.slang @@ -0,0 +1,10 @@ +//TEST:SIMPLE(filecheck=CHECK): -target glsl -entry main -stage fragment -allow-glsl +//TEST:SIMPLE(filecheck=CHECK_IGNORE_CAPS): -target glsl -entry main -stage fragment -allow-glsl -ignore-capabilities +// CHECK_IGNORE_CAPS-NOT: error 36107 +// CHECK: error 36107 + +float4 main() +{ + memoryBarrierAtomicCounter(); + return float4(1.0f); +} diff --git a/tests/language-feature/capability/capability-invalid-fragment-in-compute.slang b/tests/language-feature/capability/capability-invalid-fragment-in-compute.slang new file mode 100644 index 000000000..946ba4470 --- /dev/null +++ b/tests/language-feature/capability/capability-invalid-fragment-in-compute.slang @@ -0,0 +1,21 @@ +//TEST:SIMPLE(filecheck=CHECK): -target hlsl -emit-spirv-directly -entry computeMain -stage compute -allow-glsl -DPRE +//TEST:SIMPLE(filecheck=CHECK): -target hlsl -emit-spirv-directly -entry computeMain -stage compute -allow-glsl -DPOST +//TEST:SIMPLE(filecheck=CHECK_IGNORE_CAPS): -target hlsl -emit-spirv-directly -entry computeMain -stage compute -allow-glsl -ignore-capabilities -DPRE +//TEST:SIMPLE(filecheck=CHECK_IGNORE_CAPS): -target hlsl -emit-spirv-directly -entry computeMain -stage compute -allow-glsl -ignore-capabilities -DPOST + +// CHECK_IGNORE_CAPS-NOT: error 36107 +// CHECK: error 36107 +SamplerState samplerState; +Texture2D rw; + +[numthreads(1,1,1)] +void computeMain() +{ +#ifdef PRE + rw.Load(0); +#endif + clip(0.0f); +#ifdef POST + rw.Load(0); +#endif +} \ No newline at end of file diff --git a/tests/language-feature/capability/capability3.slang b/tests/language-feature/capability/capability3.slang index 02eb7d495..96c07a51f 100644 --- a/tests/language-feature/capability/capability3.slang +++ b/tests/language-feature/capability/capability3.slang @@ -3,47 +3,40 @@ // CHECK_IGNORE_CAPS-NOT: error 36108 // Test that capabilities can be declared on module. - [require(glsl)] [require(spirv)] module test; -void f() -{ - __require_capability glsl; -} - -// CHECK: ([[# @LINE+1]]): error 36108 -public void g() -{ - __require_capability spvAtomicFloat16AddEXT; -} +RWStructuredBuffer sideEffect; -void l() +// CHECK: error 36104 +[require(glsl, _sm_4_0)] +public void use1() { __target_switch { case glsl: - f(); - return; - case spirv: - __require_capability spvAtomicFloat16AddEXT; return; } } -// CHECK: ([[# @LINE+1]]): error 36104: {{.*}} -public void use() +void use2Sub() { - l(); // Error + __target_switch + { + case glsl: + sideEffect[1] = 1; + } } - -// CHECK-NOT: ([[# @LINE+1]]): error -[require(spirv, spvAtomicFloat16AddEXT)] -public void use1() +// CHECK: error 36108 +[require(spirv, spirv_1_0)] +public void use2() { - l(); // Error + use2Sub(); } void main() -{} \ No newline at end of file +{ + use1(); + use2(); +} \ No newline at end of file diff --git a/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default.slang b/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default.slang new file mode 100644 index 000000000..46ffaf2a7 --- /dev/null +++ b/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default.slang @@ -0,0 +1,32 @@ +//TEST:SIMPLE(filecheck=CHECK): -target cpp -entry computeMain -stage compute -allow-glsl + +// CHECK: computeMain( + +layout(binding = 0) buffer MyBlockName +{ + int v[1]; +} outputBuffer; + +// `default` only should try to define `glsl`, but glsl target is +// present in a `case` statment. Therefore this code should error +// since cpp is missing a target for a function called +[require(cpp_glsl)] +void someInternalFunc() +{ + __target_switch + { + case glsl: + outputBuffer.v[0] = 0; + default: + outputBuffer.v[0] = 0; + } +} +void someMin() +{ + someInternalFunc(); +} +[numthreads(1,1,1)] +void computeMain() +{ + someMin(); +} diff --git a/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default2.slang b/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default2.slang new file mode 100644 index 000000000..fc8983ef1 --- /dev/null +++ b/tests/language-feature/capability/cpp-target-has-cpp-impl-from-default2.slang @@ -0,0 +1,34 @@ +//TEST:SIMPLE(filecheck=CHECK): -target cpp -entry computeMain -stage compute -allow-glsl + +// CHECK: computeMain( + +layout(binding = 0) buffer MyBlockName +{ + int v[1]; +} outputBuffer; + +// `default` only should try to define `glsl`, but glsl target is +// present in a `case` statment. Therefore this code should error +// since cpp is missing a target for a function called +[require(cpp)] +[require(glsl)] +[require(spirv)] +void someInternalFunc() +{ + __target_switch + { + case glsl: + outputBuffer.v[0] = 0; + default: + outputBuffer.v[0] = 0; + } +} +void someMin() +{ + someInternalFunc(); +} +[numthreads(1,1,1)] +void computeMain() +{ + someMin(); +} diff --git a/tests/language-feature/capability/cpp-target-missing-cpp-impl.slang b/tests/language-feature/capability/cpp-target-missing-cpp-impl.slang new file mode 100644 index 000000000..a01993e8f --- /dev/null +++ b/tests/language-feature/capability/cpp-target-missing-cpp-impl.slang @@ -0,0 +1,34 @@ +//TEST:SIMPLE(filecheck=CHECK): -target cpp -entry computeMain -stage compute -allow-glsl +//TEST:SIMPLE(filecheck=CHECK_IGNORE_CAPS): -target cpp -entry computeMain -stage compute -allow-glsl -ignore-capabilities +// CHECK_IGNORE_CAPS-NOT: error 36107 +// CHECK: error 36107 + +layout(binding = 0) buffer MyBlockName +{ + int v[1]; +} outputBuffer; + +// `default` only should try to define `glsl`, but glsl target is +// present in a `case` statment. Therefore this code should error +// since cpp is missing a target for a function called +[require(glsl)] +void someInternalFunc() +{ + __target_switch + { + case glsl: + outputBuffer.v[0] = 0; + default: + outputBuffer.v[0] = 0; + } +} +void someMin() +{ + someInternalFunc(); +} + +[numthreads(1,1,1)] +void computeMain() +{ + someMin(); +} -- cgit v1.2.3