human-readable error message for the OpenCL error codes.
authoryhfudev <yhfudev@gmail.com>
Sat, 16 Jan 2016 05:41:31 +0000 (00:41 -0500)
committeryhfudev <yhfudev@gmail.com>
Sat, 16 Jan 2016 05:41:31 +0000 (00:41 -0500)
src/ext_OpenCL.c

index dae654e..24e4579 100644 (file)
@@ -5,13 +5,61 @@
 
 #include <ext_OpenCL.h>
 
+const char *
+val2cstr_cl (cl_int CL_err)
+{
+#define CLERR(a) case a: return #a
+    switch (CL_err) {
+    CLERR(CL_BUILD_PROGRAM_FAILURE);
+    CLERR(CL_COMPILER_NOT_AVAILABLE);
+    CLERR(CL_DEVICE_NOT_FOUND);
+    CLERR(CL_INVALID_ARG_INDEX);
+    CLERR(CL_INVALID_ARG_SIZE);
+    CLERR(CL_INVALID_ARG_VALUE);
+    CLERR(CL_INVALID_BINARY);
+    CLERR(CL_INVALID_BUFFER_SIZE);
+    CLERR(CL_INVALID_BUILD_OPTIONS);
+    CLERR(CL_INVALID_COMMAND_QUEUE);
+    CLERR(CL_INVALID_CONTEXT);
+    CLERR(CL_INVALID_DEVICE);
+    CLERR(CL_INVALID_DEVICE_TYPE);
+    CLERR(CL_INVALID_EVENT);
+    CLERR(CL_INVALID_EVENT_WAIT_LIST);
+    CLERR(CL_INVALID_GLOBAL_OFFSET);
+    CLERR(CL_INVALID_HOST_PTR);
+    CLERR(CL_INVALID_KERNEL);
+    CLERR(CL_INVALID_KERNEL_ARGS);
+    CLERR(CL_INVALID_KERNEL_DEFINITION);
+    CLERR(CL_INVALID_KERNEL_NAME);
+    CLERR(CL_INVALID_MEM_OBJECT);
+    CLERR(CL_INVALID_OPERATION);
+    CLERR(CL_INVALID_PLATFORM);
+    CLERR(CL_INVALID_PROGRAM);
+    CLERR(CL_INVALID_PROGRAM_EXECUTABLE);
+    CLERR(CL_INVALID_QUEUE_PROPERTIES);
+    CLERR(CL_INVALID_SAMPLER);
+    CLERR(CL_INVALID_VALUE);
+    CLERR(CL_INVALID_WORK_DIMENSION);
+    CLERR(CL_INVALID_WORK_GROUP_SIZE);
+    CLERR(CL_INVALID_WORK_ITEM_SIZE);
+    CLERR(CL_MISALIGNED_SUB_BUFFER_OFFSET);
+    CLERR(CL_MAP_FAILURE);
+    CLERR(CL_MEM_COPY_OVERLAP);
+    CLERR(CL_MEM_OBJECT_ALLOCATION_FAILURE);
+    CLERR(CL_OUT_OF_HOST_MEMORY);
+    CLERR(CL_OUT_OF_RESOURCES);
+
+    }
+    return "(unknown CL error)";
+}
+
 void hc_clEnqueueNDRangeKernel (cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, const size_t *global_work_offset, const size_t *global_work_size, const size_t *local_work_size, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)
 {
   cl_int CL_err = clEnqueueNDRangeKernel (command_queue, kernel, work_dim, global_work_offset, global_work_size, local_work_size, num_events_in_wait_list, event_wait_list, event);
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueNDRangeKernel()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueNDRangeKernel()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -23,7 +71,7 @@ void hc_clGetEventInfo (cl_event event, cl_event_info param_name, size_t param_v
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetEventInfo()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetEventInfo()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -35,7 +83,7 @@ void hc_clFlush (cl_command_queue command_queue)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clFlush()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clFlush()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -47,7 +95,7 @@ void hc_clFinish (cl_command_queue command_queue)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clFinish()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clFinish()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -59,7 +107,7 @@ void hc_clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t arg_size, co
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clSetKernelArg()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clSetKernelArg()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -71,7 +119,7 @@ void hc_clEnqueueWriteBuffer (cl_command_queue command_queue, cl_mem buffer, cl_
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueWriteBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueWriteBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -83,7 +131,7 @@ void hc_clEnqueueCopyBuffer (cl_command_queue command_queue, cl_mem src_buffer,
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueCopyBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueCopyBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -95,7 +143,7 @@ void hc_clEnqueueReadBuffer (cl_command_queue command_queue, cl_mem buffer, cl_b
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueReadBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueReadBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -107,7 +155,7 @@ void hc_clGetPlatformIDs (cl_uint num_entries, cl_platform_id *platforms, cl_uin
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetPlatformIDs()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetPlatformIDs()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -119,7 +167,7 @@ void hc_clGetPlatformInfo (cl_platform_id platform, cl_platform_info param_name,
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetPlatformInfo()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetPlatformInfo()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -131,7 +179,7 @@ void hc_clGetDeviceIDs (cl_platform_id platform, cl_device_type device_type, cl_
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetDeviceIDs()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetDeviceIDs()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -143,7 +191,7 @@ void hc_clGetDeviceInfo (cl_device_id device, cl_device_info param_name, size_t
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetDeviceInfo()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetDeviceInfo()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -157,7 +205,7 @@ cl_context hc_clCreateContext (cl_context_properties *properties, cl_uint num_de
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateContext()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateContext()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -174,7 +222,7 @@ cl_command_queue hc_clCreateCommandQueue (cl_context context, cl_device_id devic
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateCommandQueue()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateCommandQueue()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -191,7 +239,7 @@ cl_command_queue hc_clCreateCommandQueueWithProperties (cl_context context, cl_d
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateCommandQueueWithProperties()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateCommandQueueWithProperties()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -208,7 +256,7 @@ cl_mem hc_clCreateBuffer (cl_context context, cl_mem_flags flags, size_t size, v
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -224,7 +272,7 @@ cl_program hc_clCreateProgramWithSource (cl_context context, cl_uint count, cons
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateProgramWithSource()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateProgramWithSource()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -240,7 +288,7 @@ cl_program hc_clCreateProgramWithBinary (cl_context context, cl_uint num_devices
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clCreateProgramWithBinary()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clCreateProgramWithBinary()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -254,7 +302,7 @@ void hc_clBuildProgram (cl_program program, cl_uint num_devices, const cl_device
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clBuildProgram()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clBuildProgram()", CL_err, val2cstr_cl(CL_err));
 
     // If we exit here we can't see the error message
     // exit (-1);
@@ -283,7 +331,7 @@ void hc_clReleaseMemObject (cl_mem mem)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clReleaseMemObject()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clReleaseMemObject()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -295,7 +343,7 @@ void hc_clReleaseKernel (cl_kernel kernel)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clReleaseProgram()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clReleaseProgram()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -307,7 +355,7 @@ void hc_clReleaseProgram (cl_program program)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clReleaseProgram()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clReleaseProgram()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -319,7 +367,7 @@ void hc_clReleaseCommandQueue (cl_command_queue command_queue)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clReleaseCommandQueue()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clReleaseCommandQueue()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -331,7 +379,7 @@ void hc_clReleaseContext (cl_context context)
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clReleaseContext()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clReleaseContext()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -345,7 +393,7 @@ void *hc_clEnqueueMapBuffer (cl_command_queue command_queue, cl_mem buffer, cl_b
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueMapBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueMapBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -359,7 +407,7 @@ void hc_clEnqueueUnmapMemObject (cl_command_queue command_queue, cl_mem memobj,
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueUnmapMemObject()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueUnmapMemObject()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -371,7 +419,7 @@ void hc_clEnqueueFillBuffer (cl_command_queue command_queue, cl_mem buffer, cons
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clEnqueueFillBuffer()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clEnqueueFillBuffer()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }
@@ -383,7 +431,7 @@ void hc_clGetKernelWorkGroupInfo (cl_kernel kernel, cl_device_id device, cl_kern
 
   if (CL_err != CL_SUCCESS)
   {
-    log_error ("ERROR: %s %d\n", "clGetKernelWorkGroupInfo()", CL_err);
+    log_error ("ERROR: %s (%d)%s\n", "clGetKernelWorkGroupInfo()", CL_err, val2cstr_cl(CL_err));
 
     exit (-1);
   }