mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 16:30:10 +01:00
clover: Add clEnqueue{Marker, Barrier}WithWaitList.
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
7b11c97d31
commit
5827781d25
2 changed files with 43 additions and 7 deletions
|
|
@ -129,8 +129,8 @@ namespace clover {
|
|||
NULL, // clEnqueueFillBuffer
|
||||
NULL, // clEnqueueFillImage
|
||||
NULL, // clEnqueueMigrateMemObjects
|
||||
NULL, // clEnqueueMarkerWithWaitList
|
||||
NULL, // clEnqueueBarrierWithWaitList
|
||||
clEnqueueMarkerWithWaitList,
|
||||
clEnqueueBarrierWithWaitList,
|
||||
NULL, // clGetExtensionFunctionAddressForPlatform
|
||||
NULL, // clCreateFromGLTexture
|
||||
NULL, // clGetDeviceIDsFromD3D11KHR
|
||||
|
|
|
|||
|
|
@ -178,6 +178,29 @@ clEnqueueMarker(cl_command_queue d_q, cl_event *rd_ev) try {
|
|||
return e.get();
|
||||
}
|
||||
|
||||
CLOVER_API cl_int
|
||||
clEnqueueMarkerWithWaitList(cl_command_queue d_q, cl_uint num_deps,
|
||||
const cl_event *d_deps, cl_event *rd_ev) try {
|
||||
auto &q = obj(d_q);
|
||||
auto deps = objs<wait_list_tag>(d_deps, num_deps);
|
||||
|
||||
for (auto &ev : deps) {
|
||||
if (ev.context() != q.context())
|
||||
throw error(CL_INVALID_CONTEXT);
|
||||
}
|
||||
|
||||
// Create a hard event that depends on the events in the wait list:
|
||||
// previous commands in the same queue are implicitly serialized
|
||||
// with respect to it -- hard events always are.
|
||||
auto hev = create<hard_event>(q, CL_COMMAND_MARKER, deps);
|
||||
|
||||
ret_object(rd_ev, hev);
|
||||
return CL_SUCCESS;
|
||||
|
||||
} catch (error &e) {
|
||||
return e.get();
|
||||
}
|
||||
|
||||
CLOVER_API cl_int
|
||||
clEnqueueBarrier(cl_command_queue d_q) try {
|
||||
obj(d_q);
|
||||
|
|
@ -191,12 +214,12 @@ clEnqueueBarrier(cl_command_queue d_q) try {
|
|||
}
|
||||
|
||||
CLOVER_API cl_int
|
||||
clEnqueueWaitForEvents(cl_command_queue d_q, cl_uint num_evs,
|
||||
const cl_event *d_evs) try {
|
||||
clEnqueueBarrierWithWaitList(cl_command_queue d_q, cl_uint num_deps,
|
||||
const cl_event *d_deps, cl_event *rd_ev) try {
|
||||
auto &q = obj(d_q);
|
||||
auto evs = objs(d_evs, num_evs);
|
||||
auto deps = objs<wait_list_tag>(d_deps, num_deps);
|
||||
|
||||
for (auto &ev : evs) {
|
||||
for (auto &ev : deps) {
|
||||
if (ev.context() != q.context())
|
||||
throw error(CL_INVALID_CONTEXT);
|
||||
}
|
||||
|
|
@ -204,14 +227,27 @@ clEnqueueWaitForEvents(cl_command_queue d_q, cl_uint num_evs,
|
|||
// Create a hard event that depends on the events in the wait list:
|
||||
// subsequent commands in the same queue will be implicitly
|
||||
// serialized with respect to it -- hard events always are.
|
||||
create<hard_event>(q, 0, evs);
|
||||
auto hev = create<hard_event>(q, CL_COMMAND_BARRIER, deps);
|
||||
|
||||
ret_object(rd_ev, hev);
|
||||
return CL_SUCCESS;
|
||||
|
||||
} catch (error &e) {
|
||||
return e.get();
|
||||
}
|
||||
|
||||
CLOVER_API cl_int
|
||||
clEnqueueWaitForEvents(cl_command_queue d_q, cl_uint num_evs,
|
||||
const cl_event *d_evs) try {
|
||||
// The wait list is mandatory for clEnqueueWaitForEvents().
|
||||
objs(d_evs, num_evs);
|
||||
|
||||
return clEnqueueBarrierWithWaitList(d_q, num_evs, d_evs, NULL);
|
||||
|
||||
} catch (error &e) {
|
||||
return e.get();
|
||||
}
|
||||
|
||||
CLOVER_API cl_int
|
||||
clGetEventProfilingInfo(cl_event d_ev, cl_profiling_info param,
|
||||
size_t size, void *r_buf, size_t *r_size) try {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue