summaryrefslogtreecommitdiff
path: root/tests/language-feature
diff options
context:
space:
mode:
Diffstat (limited to 'tests/language-feature')
-rw-r--r--tests/language-feature/capability/capability1.slang28
-rw-r--r--tests/language-feature/capability/capability2.slang61
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()
+{}