From ab41d548db376c6b52869004d1b6e21b88b4c9c8 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 6 Feb 2024 16:30:31 -0800 Subject: Improve Capability System (#3555) * Improve capability system. * Update documentation. * Tuning semantics. * LSP: hierarchical diagnostics. * Fix test. * Fix test. --- .../language-feature/capability/capability3.slang | 47 ++++++++++++++++++++++ .../language-feature/capability/capability4.slang | 25 ++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 tests/language-feature/capability/capability3.slang create mode 100644 tests/language-feature/capability/capability4.slang (limited to 'tests/language-feature') diff --git a/tests/language-feature/capability/capability3.slang b/tests/language-feature/capability/capability3.slang new file mode 100644 index 000000000..f7ba1d793 --- /dev/null +++ b/tests/language-feature/capability/capability3.slang @@ -0,0 +1,47 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main -stage compute + +// Test that capabilities can be declared on module. + +[require(glsl)] +[require(spirv)] +module test; + +void f() +{ + __require_capability glsl; +} + +// CHECK: ([[# @LINE+1]]): error 36108 +public void g() +{ + __require_capability spvAtomicFloat16AddEXT; +} + +void l() +{ + __target_switch + { + case glsl: + f(); + return; + case spirv: + __require_capability spvAtomicFloat16AddEXT; + return; + } +} + +// CHECK: ([[# @LINE+1]]): error 36104: {{.*}} +public void use() +{ + l(); // Error +} + +// CHECK-NOT: ([[# @LINE+1]]): error +[require(spirv, spvAtomicFloat16AddEXT)] +public void use1() +{ + l(); // Error +} + +void main() +{} \ No newline at end of file diff --git a/tests/language-feature/capability/capability4.slang b/tests/language-feature/capability/capability4.slang new file mode 100644 index 000000000..fce1f78ac --- /dev/null +++ b/tests/language-feature/capability/capability4.slang @@ -0,0 +1,25 @@ +//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly -entry main -stage compute + +// Check that a non-static member method implictly requires capabilities +// defined in ThisType. + +[require(hlsl)] +struct Type +{ + int member; + [require(glsl)] + [mutating] + // CHECK: ([[# @LINE+1]]): error 36108: + void f() + { + } + + [require(glsl)] + // CHECK-NOT: ([[# @LINE+1]]): error 36108: + static void f1() + { + } +} + +void main() +{} -- cgit v1.2.3