1
1
// REQUIRES: level_zero,level_zero_headers
2
- // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -I %sycl_source_dir %s -o %t.out
2
+ // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -I %sycl_source_dir %s -o %t.out -lze_loader
3
3
// RUN: env SYCL_BE=PI_LEVEL_ZERO %GPU_RUN_PLACEHOLDER %t.out
4
4
5
5
// Test for Level Zero interop API
@@ -24,17 +24,24 @@ int main() {
24
24
auto ZeContext = Context.get_native <backend::level_zero>();
25
25
auto ZeQueue = Queue.get_native <backend::level_zero>();
26
26
27
+ // Create native Level-Zero context.
28
+ // It then will be owned/destroyed by SYCL RT.
29
+ ze_context_handle_t ZeContextInterop{};
30
+ ze_context_desc_t ZeContextDesc = {ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr ,
31
+ 0 };
32
+ zeContextCreate (ZePlatform, &ZeContextDesc, &ZeContextInterop);
33
+
27
34
// Re-create SYCL objects from native Level Zero handles
28
35
auto PlatformInterop = level_zero::make<platform>(ZePlatform);
29
36
auto DeviceInterop = level_zero::make<device>(PlatformInterop, ZeDevice);
30
- auto ContextInterop =
31
- level_zero::make<context>(PlatformInterop. get_devices (), ZeContext );
37
+ auto ContextInterop = level_zero::make<context>(PlatformInterop. get_devices (),
38
+ ZeContextInterop );
32
39
auto QueueInterop = level_zero::make<queue>(ContextInterop, ZeQueue);
33
40
34
41
// Check native handles
35
42
assert (ZePlatform == PlatformInterop.get_native <backend::level_zero>());
36
43
assert (ZeDevice == DeviceInterop.get_native <backend::level_zero>());
37
- assert (ZeContext == ContextInterop.get_native <backend::level_zero>());
44
+ assert (ZeContextInterop == ContextInterop.get_native <backend::level_zero>());
38
45
assert (ZeQueue == QueueInterop.get_native <backend::level_zero>());
39
46
40
47
// Verify re-created objects
0 commit comments