diff options
| author | Yong He <yonghe@outlook.com> | 2024-02-02 22:28:02 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-02 22:28:02 -0800 |
| commit | 14764896c34b230a5563f48d8b8e565de2f3aa10 (patch) | |
| tree | 2f105d3f6222103f458054f1cd38e280b6fb52b4 /tests/language-feature/capability | |
| parent | c15e7ade4e27e1649d5b98f5854e9e52bb9e60ae (diff) | |
Capability type checking. (#3530)
* Capability type checking.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tests/language-feature/capability')
| -rw-r--r-- | tests/language-feature/capability/capability1.slang | 28 | ||||
| -rw-r--r-- | tests/language-feature/capability/capability2.slang | 61 |
2 files changed, 89 insertions, 0 deletions
diff --git a/tests/language-feature/capability/capability1.slang b/tests/language-feature/capability/capability1.slang new file mode 100644 index 000000000..bccccb964 --- /dev/null +++ b/tests/language-feature/capability/capability1.slang @@ -0,0 +1,28 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main2 -stage compute + +[require(spvShaderClockKHR)] +void leafFunc1() {} + +[require(spvShaderNonUniform)] +void leafFunc2() {} + +void caller() +{ + leafFunc1(); + leafFunc2(); +} + +[require(spirv, shaderclock)] +// CHECK: ([[# @LINE+1]]): error 36104: +void main1() +{ + caller(); // Error, shaderclock does not imply spvShaderNonUniform. +} + + +[require(spirv, shaderclock)] +void main2() +{ + // CHECK-NOT: error + leafFunc1(); // OK, shaderclock implies spvShaderClockKHR. +} diff --git a/tests/language-feature/capability/capability2.slang b/tests/language-feature/capability/capability2.slang new file mode 100644 index 000000000..743f998cf --- /dev/null +++ b/tests/language-feature/capability/capability2.slang @@ -0,0 +1,61 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main -stage compute +module test; + +[require(spvAtomicFloat16AddEXT)] +interface IFoo +{ + [require(spvRayQueryKHR)] + void method1(); + + void method2(); +} + +[require(spvGroupNonUniformArithmetic)] +void useNonUniformArithmetic() +{} + +[require(spvRayQueryKHR)] +void useRayQueryKHR() +{} + +[require(spvAtomicFloat16AddEXT)] +void useAtomicFloat16() +{} + +// This should be OK, uses nothing past what is declared in the interface. +struct Impl1 : IFoo +{ + void method1() + { + useAtomicFloat16(); + useRayQueryKHR(); + } + + void method2() + { + useAtomicFloat16(); + } +} + +// CHECK-NOT: error 361 + +struct Impl2 : IFoo +{ + // CHECK: ([[# @LINE+1]]): error 36104: {{.*}}spvGroupNonUniformArithmetic + void method1() + { + useRayQueryKHR(); // OK. + useNonUniformArithmetic(); // error. + } + // CHECK-NOT: error 361 + + // CHECK: ([[# @LINE+1]]): error 36104: {{.*}}spvGroupNonUniformArithmetic + void method2() + { + useAtomicFloat16(); + useNonUniformArithmetic(); // error. + } +} + +void main() +{} |
