7
7
#include < CL/sycl.hpp>
8
8
// clang-format off
9
9
#include < level_zero/ze_api.h>
10
- #include < CL/ sycl/backend/level_zero.hpp>
10
+ #include < sycl/ext/oneapi /backend/level_zero.hpp>
11
11
// clang-format on
12
12
13
13
using namespace cl ::sycl;
14
14
15
15
int main () {
16
+ #ifdef SYCL_EXT_ONEAPI_BACKEND_LEVEL_ZERO
16
17
queue Queue{};
18
+
19
+ auto Event = Queue.single_task ([=]() {});
17
20
auto Context = Queue.get_info <info::queue::context>();
18
21
auto Device = Queue.get_info <info::queue::device>();
19
22
auto Platform = Device.get_info <info::device::platform>();
20
23
21
24
// Get native Level Zero handles
22
- auto ZePlatform = Platform.get_native <backend::level_zero>();
23
- auto ZeDevice = Device.get_native <backend::level_zero>();
24
- auto ZeContext = Context.get_native <backend::level_zero>();
25
- auto ZeQueue = Queue.get_native <backend::level_zero>();
25
+ auto ZePlatform = get_native<backend::ext_oneapi_level_zero>(Platform);
26
+ auto ZeDevice = get_native<backend::ext_oneapi_level_zero>(Device);
27
+ auto ZeContext = get_native<backend::ext_oneapi_level_zero>(Context);
28
+ auto ZeQueue = get_native<backend::ext_oneapi_level_zero>(Queue);
29
+ auto ZeEvent = get_native<backend::ext_oneapi_level_zero>(Event);
26
30
27
31
// Create native Level-Zero context.
28
32
// It then will be owned/destroyed by SYCL RT.
@@ -32,17 +36,33 @@ int main() {
32
36
zeContextCreate (ZePlatform, &ZeContextDesc, &ZeContextInterop);
33
37
34
38
// Re-create SYCL objects from native Level Zero handles
35
- auto PlatformInterop = level_zero::make<platform>(ZePlatform);
36
- auto DeviceInterop = level_zero::make<device>(PlatformInterop, ZeDevice);
37
- auto ContextInterop = level_zero::make<context>(PlatformInterop.get_devices (),
38
- ZeContextInterop);
39
- auto QueueInterop = level_zero::make<queue>(ContextInterop, ZeQueue);
39
+ auto PlatformInterop =
40
+ make_platform<backend::ext_oneapi_level_zero>(ZePlatform);
41
+ auto DeviceInterop = make_device<backend::ext_oneapi_level_zero>(ZeDevice);
42
+
43
+ backend_input_t <backend::ext_oneapi_level_zero, context> ContextInteropInput =
44
+ {ZeContextInterop, Context.get_devices ()};
45
+ auto ContextInterop =
46
+ make_context<backend::ext_oneapi_level_zero>(ContextInteropInput);
47
+
48
+ backend_input_t <backend::ext_oneapi_level_zero, queue> QueueInteropInput = {
49
+ ZeQueue};
50
+ auto QueueInterop = make_queue<backend::ext_oneapi_level_zero>(
51
+ QueueInteropInput, ContextInterop);
52
+
53
+ backend_input_t <backend::ext_oneapi_level_zero, event> EventInteropInput = {
54
+ ZeEvent};
55
+ auto EventInterop = make_event<backend::ext_oneapi_level_zero>(
56
+ EventInteropInput, ContextInterop);
40
57
41
58
// Check native handles
42
- assert (ZePlatform == PlatformInterop.get_native <backend::level_zero>());
43
- assert (ZeDevice == DeviceInterop.get_native <backend::level_zero>());
44
- assert (ZeContextInterop == ContextInterop.get_native <backend::level_zero>());
45
- assert (ZeQueue == QueueInterop.get_native <backend::level_zero>());
59
+ assert (ZePlatform ==
60
+ get_native<backend::ext_oneapi_level_zero>(PlatformInterop));
61
+ assert (ZeDevice == get_native<backend::ext_oneapi_level_zero>(DeviceInterop));
62
+ assert (ZeContextInterop ==
63
+ get_native<backend::ext_oneapi_level_zero>(ContextInterop));
64
+ assert (ZeQueue == get_native<backend::ext_oneapi_level_zero>(QueueInterop));
65
+ assert (ZeEvent == get_native<backend::ext_oneapi_level_zero>(EventInterop));
46
66
47
67
// Verify re-created objects
48
68
int Arr[] = {2 };
@@ -54,6 +74,9 @@ int main() {
54
74
});
55
75
}
56
76
assert (Arr[0 ] == 6 );
57
-
77
+ #else
78
+ std::cout << " Test skipped due to missing support for Level-Zero backend."
79
+ << std::endl;
80
+ #endif
58
81
return 0 ;
59
82
}
0 commit comments