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

2015-08-06 Thread Francisco Jerez
EdB edb+m...@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 

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

2015-08-05 Thread EdB
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__

---
 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) {