[Mesa-dev] [PATCH 1/1] clover: Add clEnqueue{Marker, Barrier}WithWaitList

Francisco Jerez currojerez at riseup.net
Tue Apr 29 07:20:26 PDT 2014


EdB <edb+mesa at sigluy.net> writes:
> ---
>  src/gallium/state_trackers/clover/api/dispatch.cpp |  4 +-
>  src/gallium/state_trackers/clover/api/event.cpp    | 46 +++++++++++++++++++---
>  2 files changed, 43 insertions(+), 7 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..6652171 100644
> --- a/src/gallium/state_trackers/clover/api/event.cpp
> +++ b/src/gallium/state_trackers/clover/api/event.cpp
> @@ -179,6 +179,29 @@ clEnqueueMarker(cl_command_queue d_q, cl_event *rd_ev) try {
>  }
>  
>  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:
> +   // subsequent commands in the same queue will be 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,8 +227,9 @@ 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) {
> @@ -213,6 +237,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


Thanks, pushed.
-------------- 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/20140429/5039adb4/attachment.sig>


More information about the mesa-dev mailing list