summaryrefslogtreecommitdiff
path: root/tests/language-feature/capability/capability2.slang
diff options
context:
space:
mode:
Diffstat (limited to 'tests/language-feature/capability/capability2.slang')
-rw-r--r--tests/language-feature/capability/capability2.slang61
1 files changed, 61 insertions, 0 deletions
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()
+{}