From 14764896c34b230a5563f48d8b8e565de2f3aa10 Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 2 Feb 2024 22:28:02 -0800 Subject: Capability type checking. (#3530) * Capability type checking. * Fix. --------- Co-authored-by: Yong He --- .../language-feature/capability/capability1.slang | 28 ++++++++++ .../language-feature/capability/capability2.slang | 61 ++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 tests/language-feature/capability/capability1.slang create mode 100644 tests/language-feature/capability/capability2.slang (limited to 'tests/language-feature/capability') 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() +{} -- cgit v1.2.3