8
8
class TestClass1 {};
9
9
class TestClass2 {};
10
10
11
+ namespace sycl {
12
+ // Explicitly mark fir property as device-copyable
13
+ template <>
14
+ struct is_device_copyable <sycl::ext::oneapi::experimental::fir>
15
+ : std::true_type {};
16
+ template <>
17
+ struct is_device_copyable <const sycl::ext::oneapi::experimental::fir>
18
+ : std::true_type {};
19
+ }
20
+
11
21
int main () {
12
22
// Check only compile-time properties are device-copyable
13
23
using P1 = decltype (sycl::ext::oneapi::experimental::properties (
14
24
sycl::ext::oneapi::experimental::baz<1 >,
15
25
sycl::ext::oneapi::experimental::boo<TestClass1, TestClass2>,
16
26
sycl::ext::oneapi::experimental::bar));
17
-
27
+ using CP1 = const P1;
18
28
static_assert (sycl::is_device_copyable_v<
19
29
sycl::ext::oneapi::experimental::baz_key::value_t <1 >>);
20
30
static_assert (
@@ -23,28 +33,44 @@ int main() {
23
33
static_assert (sycl::is_device_copyable_v<
24
34
sycl::ext::oneapi::experimental::bar_key::value_t >);
25
35
static_assert (sycl::is_device_copyable_v<P1>);
36
+ static_assert (sycl::is_device_copyable_v<CP1>);
26
37
27
38
// Check property list with non-device-copyable property
28
39
using P2 = decltype (sycl::ext::oneapi::experimental::properties (
29
40
sycl::ext::oneapi::experimental::bar,
30
41
sycl::ext::oneapi::experimental::foz{42.42 , false }));
42
+ using CP2 = const P2;
31
43
static_assert (
32
44
!sycl::is_device_copyable_v<sycl::ext::oneapi::experimental::foz>);
33
45
static_assert (!sycl::is_device_copyable_v<P2>);
46
+ static_assert (!sycl::is_device_copyable_v<CP2>);
47
+
48
+ // Check property list with explicit device-copyable property
49
+ using P3 = decltype (sycl::ext::oneapi::experimental::properties (
50
+ sycl::ext::oneapi::experimental::bar,
51
+ sycl::ext::oneapi::experimental::fir{42.42 , false }));
52
+ using CP3 = const P3;
53
+ static_assert (
54
+ sycl::is_device_copyable_v<sycl::ext::oneapi::experimental::fir>);
55
+ static_assert (sycl::is_device_copyable_v<P3>);
56
+ static_assert (sycl::is_device_copyable_v<CP3>);
34
57
35
58
// Check property list with device-copyable compile-time and runtime
36
59
// properties
37
- using P3 = decltype (sycl::ext::oneapi::experimental::properties (
60
+ using P4 = decltype (sycl::ext::oneapi::experimental::properties (
38
61
sycl::ext::oneapi::experimental::baz<1 >,
39
62
sycl::ext::oneapi::experimental::foo{1234 }));
63
+ using CP4 = const P4;
40
64
static_assert (
41
65
sycl::is_device_copyable_v<sycl::ext::oneapi::experimental::foo>);
42
- static_assert (sycl::is_device_copyable_v<P3>);
66
+ static_assert (sycl::is_device_copyable_v<P4>);
67
+ static_assert (sycl::is_device_copyable_v<CP4>);
43
68
44
69
// Check that device-copyable property list can indeed be used in a kernel
45
70
const auto PropertyList = sycl::ext::oneapi::experimental::properties (
46
71
sycl::ext::oneapi::experimental::baz<1 >,
47
- sycl::ext::oneapi::experimental::foo{0 });
72
+ sycl::ext::oneapi::experimental::foo{0 },
73
+ sycl::ext::oneapi::experimental::fir{12.34 , true });
48
74
49
75
sycl::queue Q;
50
76
Q.submit ([&](sycl::handler &CGH) {
@@ -53,8 +79,11 @@ int main() {
53
79
sycl::ext::oneapi::experimental::baz_key>();
54
80
decltype (PropertyList)::has_property<
55
81
sycl::ext::oneapi::experimental::foo_key>();
82
+ decltype (PropertyList)::has_property<
83
+ sycl::ext::oneapi::experimental::fir_key>();
56
84
PropertyList.get_property <sycl::ext::oneapi::experimental::baz_key>();
57
85
PropertyList.get_property <sycl::ext::oneapi::experimental::foo_key>();
86
+ PropertyList.get_property <sycl::ext::oneapi::experimental::fir_key>();
58
87
});
59
88
});
60
89
return 0 ;
0 commit comments