[Mesa-dev] [PATCH 2/2] clover: Add clEnqueue{Marker, Barrier}WithWaitList
Francisco Jerez
currojerez at riseup.net
Sat Apr 26 03:05:25 PDT 2014
EdB <edb+mesa at sigluy.net> writes:
Looks OK to me, some nitpicks related to the coding style below.
> ---
> src/gallium/state_trackers/clover/api/dispatch.cpp | 4 +-
> src/gallium/state_trackers/clover/api/event.cpp | 48 ++++++++++++++++++----
> 2 files changed, 42 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/state_trackers/clover/api/dispatch.cpp b/src/gallium/state_trackers/clover/api/dispatch.cpp
> index 746372c..e4f7ea3 100644
> --- a/src/gallium/state_trackers/clover/api/dispatch.cpp
> +++ b/src/gallium/state_trackers/clover/api/dispatch.cpp
> @@ -129,8 +129,8 @@ namespace clover {
> NULL, // clEnqueueFillBuffer
> NULL, // clEnqueueFillImage
> NULL, // clEnqueueMigrateMemObjects
> - NULL, // clEnqueueMarkerWithWaitList
> - NULL, // clEnqueueBarrierWithWaitList
> + clEnqueueMarkerWithWaitList,
> + clEnqueueBarrierWithWaitList,
> NULL, // clGetExtensionFunctionAddressForPlatform
> NULL, // clCreateFromGLTexture
> NULL, // clGetDeviceIDsFromD3D11KHR
> diff --git a/src/gallium/state_trackers/clover/api/event.cpp b/src/gallium/state_trackers/clover/api/event.cpp
> index 6b1956c..daf9577 100644
> --- a/src/gallium/state_trackers/clover/api/event.cpp
> +++ b/src/gallium/state_trackers/clover/api/event.cpp
> @@ -179,6 +179,27 @@ clEnqueueMarker(cl_command_queue d_q, cl_event *rd_ev) try {
> }
>
> CLOVER_API cl_int
> +clEnqueueMarkerWithWaitList(cl_command_queue d_q, cl_uint num_evs,
> + const cl_event *d_evs, cl_event *rd_ev) try {
> + auto &q = obj(d_q);
> + auto deps = objs<wait_list_tag>(d_evs, num_evs);
> +
> + for (auto &ev : deps) {
The indentation is weird here.
> + if (ev.context() != q.context())
> + throw error(CL_INVALID_CONTEXT);
> + }
> +
> + // Create a hard event that depends on the events in the wait list.
I think it would be useful to mention here that this event is implicitly
serialized with respect to the previous events in the command queue.
> + 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,21 +212,20 @@ 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_evs,
> + const cl_event *d_evs, cl_event *rd_ev) try {
> auto &q = obj(d_q);
> - auto evs = objs(d_evs, num_evs);
> + auto deps = objs<wait_list_tag>(d_evs, num_evs);
The event list was named "evs" after its corresponding API objects
d_evs, and num_evs. It would be nice if you kept that correspondence,
e.g. by renaming the entry-point arguments to d_deps and num_deps. The
same applies to clEnqueueMarkerWithWaitList().
>
> - for (auto &ev : evs) {
> + for (auto &ev : deps) {
Odd indentation again.
> if (ev.context() != q.context())
> throw error(CL_INVALID_CONTEXT);
> }
>
> - // 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);
> + // Create a hard event that depends on the events in the wait list.
I think the comment was more informative the way it was.
> + auto hev = create<hard_event>(q, CL_COMMAND_BARRIER, deps);
>
> + ret_object(rd_ev, hev);
> return CL_SUCCESS;
>
> } catch (error &e) {
> @@ -213,6 +233,18 @@ clEnqueueWaitForEvents(cl_command_queue d_q, cl_uint num_evs,
> }
>
> 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 {
> property_buffer buf { r_buf, size, r_size };
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 229 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140426/1a7a4186/attachment.sig>
More information about the mesa-dev
mailing list