diff options
Diffstat (limited to 'tests/language-feature')
| -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() +{} |
