One comment. -----Original Message----- From: Beignet [mailto:[email protected]] On Behalf Of [email protected] Sent: Wednesday, April 30, 2014 9:38 AM To: [email protected] Cc: Luo, Xionghu Subject: [Beignet] [PATCH V3 2/2] add [opencl 1.2] API clEnqueueMarkerWithWaitList.
From: Luo <[email protected]> --- src/cl_api.c | 25 ++++++++++++++++++++++--- src/cl_event.c | 15 ++++++++++++--- src/cl_event.h | 2 +- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/cl_api.c b/src/cl_api.c index 1543ff4..de67f01 100644 --- a/src/cl_api.c +++ b/src/cl_api.c @@ -2623,8 +2623,8 @@ error: } cl_int -clEnqueueMarker(cl_command_queue command_queue, - cl_event * event) +clEnqueueMarker(cl_command_queue command_queue, + cl_event *event) { cl_int err = CL_SUCCESS; CHECK_QUEUE(command_queue); @@ -2633,7 +2633,26 @@ clEnqueueMarker(cl_command_queue command_queue, goto error; } - cl_event_marker(command_queue, event); + cl_event_marker_with_wait_list(command_queue, 0, NULL, event); +error: + return err; +} + +cl_int +clEnqueueMarkerWithWaitList(cl_command_queue command_queue, + cl_uint num_events_in_wait_list, + const cl_event *event_wait_list, + cl_event *event) +{ + cl_int err = CL_SUCCESS; + CHECK_QUEUE(command_queue); + if(event == NULL) { + err = CL_INVALID_VALUE; + goto error; + } + TRY(cl_event_check_waitlist, num_events_in_wait_list, +event_wait_list, event, command_queue->ctx); + + cl_event_marker_with_wait_list(command_queue, + num_events_in_wait_list, event_wait_list, event); error: return err; } diff --git a/src/cl_event.c b/src/cl_event.c index 9d21984..aa065c2 100644 --- a/src/cl_event.c +++ b/src/cl_event.c @@ -486,16 +486,25 @@ void cl_event_update_status(cl_event event) cl_event_set_status(event, CL_COMPLETE); } -cl_int cl_event_marker(cl_command_queue queue, cl_event* event) +cl_int cl_event_marker_with_wait_list(cl_command_queue queue, + cl_uint num_events_in_wait_list, + const cl_event *event_wait_list, + cl_event* event) { enqueue_data data; + cl_uint i = 0; >>>>>>>>>> i is useless now. *event = cl_event_new(queue->ctx, queue, CL_COMMAND_MARKER, CL_TRUE); if(event == NULL) return CL_OUT_OF_HOST_MEMORY; - //if wait_events_num>0, the marker event need wait queue->wait_events - if(queue->wait_events_num > 0) { + //enqueues a marker command which waits for either a list of events + to complete, or if the list is //empty it waits for all commands previously enqueued in command_queue to complete before it completes. + if(num_events_in_wait_list > 0){ + data.type = EnqueueMarker; + cl_event_new_enqueue_callback(*event, &data, num_events_in_wait_list, event_wait_list); + return CL_SUCCESS; + } else if(queue->wait_events_num > 0) { data.type = EnqueueMarker; cl_event_new_enqueue_callback(*event, &data, queue->wait_events_num, queue->wait_events); return CL_SUCCESS; diff --git a/src/cl_event.h b/src/cl_event.h index 3c61110..5a78a8d 100644 --- a/src/cl_event.h +++ b/src/cl_event.h @@ -90,7 +90,7 @@ void cl_event_set_status(cl_event, cl_int); /* Check and update event status */ void cl_event_update_status(cl_event); /* Create the marker event */ -cl_int cl_event_marker(cl_command_queue, cl_event*); +cl_int cl_event_marker_with_wait_list(cl_command_queue, cl_uint, const +cl_event *, cl_event*); /* Do the event profiling */ cl_int cl_event_get_timestamp(cl_event event, cl_profiling_info param_name); #endif /* __CL_EVENT_H__ */ -- 1.8.1.2 _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet _______________________________________________ Beignet mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/beignet
