@@ -38,6 +38,34 @@ UR_APIEXPORT ur_result_t UR_APICALL urEventGetInfo(ur_event_handle_t hEvent,
3838 return UR_RESULT_SUCCESS ;
3939}
4040
41+ namespace {
42+ struct callback_data_t {
43+ ur_event_callback_t Callback;
44+ ur_event_handle_t Event;
45+ ur_execution_info_t Status;
46+ void *UserData;
47+ };
48+ void CallbackHandler (void *CallbackData) {
49+ auto *Data = reinterpret_cast <callback_data_t *>(CallbackData);
50+ Data->Callback (Data->Event , Data->Status , Data->UserData );
51+ delete Data;
52+ }
53+ } // namespace
54+
55+ UR_APIEXPORT ur_result_t UR_APICALL
56+ urEventSetCallback (ur_event_handle_t hEvent, ur_execution_info_t execStatus,
57+ ur_event_callback_t pfnNotify, void *pUserData) {
58+ // Liboffload only supports a transition from SUBMITTED to COMPLETE
59+ ol_queue_handle_t Queue;
60+ OL_RETURN_ON_ERR (olCreateQueue (hEvent->UrQueue ->OffloadDevice , &Queue));
61+ OL_RETURN_ON_ERR (olWaitEvents (Queue, &hEvent->OffloadEvent , 1 ));
62+ auto CallbackData =
63+ new callback_data_t {pfnNotify, hEvent, execStatus, pUserData};
64+ OL_RETURN_ON_ERR (olLaunchHostFunction (Queue, CallbackHandler, CallbackData));
65+ OL_RETURN_ON_ERR (olDestroyQueue (Queue));
66+ return UR_RESULT_SUCCESS ;
67+ }
68+
4169UR_APIEXPORT ur_result_t UR_APICALL urEventGetProfilingInfo (ur_event_handle_t ,
4270 ur_profiling_info_t ,
4371 size_t , void *,
0 commit comments