[Mesa-dev] [PATCH v3] clover: stub missing CL 1.2 functions

Francisco Jerez currojerez at riseup.net
Thu Aug 6 04:28:11 PDT 2015


EdB <edb+mesa at sigluy.net> writes:

> As sugested by Tom a long time ago
> and in order to be able to create Piglit tests
>
> v2:
> replace NOT_SUPPORTED_BY_CL_1_1 macro with an inline function
> remove extra space in clLinkProgram arg
>
> v3:
> use __func__
>
Hah!  Using __func__ *is* an argument to prefer a macro over an inline
function, feel free to go back to the macro, but if you do please stick
to the usual practice of parenthesizing the macro parameters and
wrapping the whole thing in a 'do { } while (0)' block to avoid
surprises.

Also because the preprocessor doesn't care about C++ namespaces I
suggest you prefix it with CLOVER_ to make it clear that it logically
belongs to the clover namespace.

> ---
>  src/gallium/state_trackers/clover/api/dispatch.cpp | 10 ++++-----
>  src/gallium/state_trackers/clover/api/kernel.cpp   |  8 +++++++
>  src/gallium/state_trackers/clover/api/memory.cpp   | 25 ++++++++++++++++++++--
>  src/gallium/state_trackers/clover/api/program.cpp  | 10 +++++++++
>  src/gallium/state_trackers/clover/api/transfer.cpp | 12 +++++++++++
>  src/gallium/state_trackers/clover/api/util.hpp     |  9 ++++++++
>  6 files changed, 67 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/state_trackers/clover/api/dispatch.cpp b/src/gallium/state_trackers/clover/api/dispatch.cpp
> index b5a4094..f10babe 100644
> --- a/src/gallium/state_trackers/clover/api/dispatch.cpp
> +++ b/src/gallium/state_trackers/clover/api/dispatch.cpp
> @@ -123,12 +123,12 @@ namespace clover {
>        clCreateImage,
>        clCreateProgramWithBuiltInKernels,
>        clCompileProgram,
> -      NULL, // clLinkProgram
> +      clLinkProgram,
>        clUnloadPlatformCompiler,
> -      NULL, // clGetKernelArgInfo
> -      NULL, // clEnqueueFillBuffer
> -      NULL, // clEnqueueFillImage
> -      NULL, // clEnqueueMigrateMemObjects
> +      clGetKernelArgInfo,
> +      clEnqueueFillBuffer,
> +      clEnqueueFillImage,
> +      clEnqueueMigrateMemObjects,
>        clEnqueueMarkerWithWaitList,
>        clEnqueueBarrierWithWaitList,
>        NULL, // clGetExtensionFunctionAddressForPlatform
> diff --git a/src/gallium/state_trackers/clover/api/kernel.cpp b/src/gallium/state_trackers/clover/api/kernel.cpp
> index 857a152..8def01f 100644
> --- a/src/gallium/state_trackers/clover/api/kernel.cpp
> +++ b/src/gallium/state_trackers/clover/api/kernel.cpp
> @@ -189,6 +189,14 @@ clGetKernelWorkGroupInfo(cl_kernel d_kern, cl_device_id d_dev,
>     return CL_INVALID_DEVICE;
>  }
>  
> +CLOVER_API cl_int
> +clGetKernelArgInfo(cl_kernel d_kern,
> +                   cl_uint idx, cl_kernel_arg_info param,
> +                   size_t size, void *r_buf, size_t *r_size) {
> +   not_supported_by("1.1", __func__);
> +   return CL_KERNEL_ARG_INFO_NOT_AVAILABLE;
> +}
> +
>  namespace {
>     ///
>     /// Common argument checking shared by kernel invocation commands.
> diff --git a/src/gallium/state_trackers/clover/api/memory.cpp b/src/gallium/state_trackers/clover/api/memory.cpp
> index 3ff6ba0..e44461f 100644
> --- a/src/gallium/state_trackers/clover/api/memory.cpp
> +++ b/src/gallium/state_trackers/clover/api/memory.cpp
> @@ -358,8 +358,29 @@ clCreateImage(cl_context d_ctx, cl_mem_flags flags,
>                const cl_image_desc *image_desc,
>                void *host_ptr, cl_int *r_errcode) {
>     // This function was added in OpenCL 1.2
> -   std::cerr << "CL user error: clCreateImage() not supported by OpenCL 1.1." <<
> -                std::endl;
> +   not_supported_by("1.1", __func__);
>     ret_error(r_errcode, CL_INVALID_OPERATION);
>     return NULL;
>  }
> +
> +CLOVER_API cl_int
> +clEnqueueFillBuffer(cl_command_queue command_queue, cl_mem buffer,
> +                    const void *pattern, size_t pattern_size,
> +                    size_t offset, size_t size,
> +                    cl_uint num_events_in_wait_list,
> +                    const cl_event *event_wait_list,
> +                    cl_event *event) {
> +   not_supported_by("1.1", __func__);
> +   return CL_INVALID_VALUE;
> +}
> +
> +CLOVER_API cl_int
> +clEnqueueFillImage(cl_command_queue command_queue, cl_mem image,
> +                   const void *fill_color,
> +                   const size_t *origin, const size_t *region,
> +                   cl_uint num_events_in_wait_list,
> +                   const cl_event *event_wait_list,
> +                   cl_event *event) {
> +   not_supported_by("1.1", __func__);
> +   return CL_INVALID_VALUE;
> +}
> diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp
> index e9b1f38..f8e771e 100644
> --- a/src/gallium/state_trackers/clover/api/program.cpp
> +++ b/src/gallium/state_trackers/clover/api/program.cpp
> @@ -231,6 +231,16 @@ clCompileProgram(cl_program d_prog, cl_uint num_devs,
>     return e.get();
>  }
>  
> +CLOVER_API cl_program
> +clLinkProgram(cl_context d_ctx, cl_uint num_devs, const cl_device_id *d_devs,
> +              const char *p_opts, cl_uint num_progs, const cl_program *d_progs,
> +              void (*pfn_notify)(cl_program, void *), void *user_data,
> +              cl_int *r_errcode) {
> +   not_supported_by("1.1", __func__);
> +   ret_error(r_errcode, CL_LINKER_NOT_AVAILABLE);
> +   return NULL;
> +}
> +
>  CLOVER_API cl_int
>  clUnloadCompiler() {
>     return CL_SUCCESS;
> diff --git a/src/gallium/state_trackers/clover/api/transfer.cpp b/src/gallium/state_trackers/clover/api/transfer.cpp
> index fdb9405..ec5f97d 100644
> --- a/src/gallium/state_trackers/clover/api/transfer.cpp
> +++ b/src/gallium/state_trackers/clover/api/transfer.cpp
> @@ -726,3 +726,15 @@ clEnqueueUnmapMemObject(cl_command_queue d_q, cl_mem d_mem, void *ptr,
>  } catch (error &e) {
>     return e.get();
>  }
> +
> +CLOVER_API cl_int
> +clEnqueueMigrateMemObjects(cl_command_queue command_queue,
> +                           cl_uint num_mem_objects,
> +                           const cl_mem *mem_objects,
> +                           cl_mem_migration_flags flags,
> +                           cl_uint num_events_in_wait_list,
> +                           const cl_event *event_wait_list,
> +                           cl_event *event) {
> +   not_supported_by("1.1", __func__);
> +   return CL_INVALID_VALUE;
> +}
> diff --git a/src/gallium/state_trackers/clover/api/util.hpp b/src/gallium/state_trackers/clover/api/util.hpp
> index 918df61..1bba9f9 100644
> --- a/src/gallium/state_trackers/clover/api/util.hpp
> +++ b/src/gallium/state_trackers/clover/api/util.hpp
> @@ -40,6 +40,15 @@
>  
>  namespace clover {
>     ///
> +   /// Emit a warring for \a function no supported by \a version
> +   ///
> +   inline void
> +   not_supported_by(const std::string &version, const std::string &function) {
> +      std::cerr << "CL user error: " << function
> +                << "() not supported by OpenCL " << version << std::endl;
> +   }
> +
> +   ///
>     /// Return an error code in \a p if non-zero.
>     ///
>     inline void
> -- 
> 2.5.0
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150806/f1561776/attachment.sig>


More information about the mesa-dev mailing list