@@ -29,8 +29,44 @@ int main() {
29
29
{ // Scope in which SYCL interop context object is live
30
30
vector_class<device> Devices{};
31
31
Devices.push_back (Device);
32
- auto ContextInterop = level_zero::make<context>(
33
- Devices, ZeContext, level_zero::ownership::keep);
32
+ auto Context = level_zero::make<context>(Devices, ZeContext,
33
+ level_zero::ownership::keep);
34
+
35
+ // Create L0 event pool
36
+ ze_event_pool_handle_t ZeEventPool;
37
+ ze_event_pool_desc_t ZeEventPoolDesc{};
38
+ ZeEventPoolDesc.stype = ZE_STRUCTURE_TYPE_EVENT_POOL_DESC;
39
+ ZeEventPoolDesc.count = 1 ;
40
+ ZeEventPoolDesc.flags = ZE_EVENT_POOL_FLAG_HOST_VISIBLE;
41
+ zeEventPoolCreate (ZeContext, &ZeEventPoolDesc, 1 , &ZeDevice, &ZeEventPool);
42
+
43
+ // Create L0 event
44
+ ze_event_handle_t ZeEvent;
45
+ ze_event_desc_t ZeEventDesc{};
46
+ ZeEventDesc.stype = ZE_STRUCTURE_TYPE_EVENT_DESC;
47
+ ZeEventDesc.signal = ZE_EVENT_SCOPE_FLAG_HOST;
48
+ ZeEventDesc.wait = 0 ;
49
+ ZeEventDesc.index = 0 ;
50
+ zeEventCreate (ZeEventPool, &ZeEventDesc, &ZeEvent);
51
+
52
+ { // Scope in which SYCL interop event is alive
53
+ int i = 0 ;
54
+ event Event = level_zero::make<event>(Context, ZeEvent,
55
+ level_zero::ownership::keep);
56
+
57
+ info::event_command_status status;
58
+ do {
59
+ status = Event.get_info <info::event::command_execution_status>();
60
+ printf (" %d: %s\n " , i,
61
+ status == info::event_command_status::complete ? " complete"
62
+ : " !complete" );
63
+ if (++i == 5 ) {
64
+ zeEventHostSignal (ZeEvent);
65
+ }
66
+ } while (status != info::event_command_status::complete);
67
+ }
68
+ zeEventDestroy (ZeEvent);
69
+ zeEventPoolDestroy (ZeEventPool);
34
70
}
35
71
36
72
// Verifies that Level-Zero context is not destroyed by SYCL RT yet.
0 commit comments