Skip to content

Commit 5c49067

Browse files
RossBruntonbb-ur
authored andcommitted
Support urEventSetCallback (#19809)
1 parent 2192436 commit 5c49067

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

source/adapters/offload/event.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4169
UR_APIEXPORT ur_result_t UR_APICALL urEventGetProfilingInfo(ur_event_handle_t,
4270
ur_profiling_info_t,
4371
size_t, void *,

source/adapters/offload/ur_interface_loader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ UR_DLLEXPORT ur_result_t UR_APICALL urGetEventProcAddrTable(
7474
pDdiTable->pfnGetProfilingInfo = urEventGetProfilingInfo;
7575
pDdiTable->pfnRelease = urEventRelease;
7676
pDdiTable->pfnRetain = urEventRetain;
77-
pDdiTable->pfnSetCallback = nullptr;
77+
pDdiTable->pfnSetCallback = urEventSetCallback;
7878
pDdiTable->pfnWait = urEventWait;
7979
return UR_RESULT_SUCCESS;
8080
}

0 commit comments

Comments
 (0)