Home | History | Annotate | Download | only in cl
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  *
      7  */
      8 
      9 //
     10 //
     11 //
     12 
     13 #include <stdlib.h>
     14 #include <stdio.h>
     15 
     16 //
     17 //
     18 //
     19 
     20 #include "assert_cl.h"
     21 
     22 //
     23 //
     24 //
     25 
     26 #define CL_VAL_TO_STRING(err) case err: return #err
     27 
     28 //
     29 //
     30 //
     31 
     32 #define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR  -1000
     33 
     34 //
     35 //
     36 //
     37 
     38 char const *
     39 cl_get_error_string(cl_int const err)
     40 {
     41   switch (err)
     42     {
     43       CL_VAL_TO_STRING(CL_SUCCESS);
     44       CL_VAL_TO_STRING(CL_DEVICE_NOT_FOUND);
     45       CL_VAL_TO_STRING(CL_DEVICE_NOT_AVAILABLE);
     46       CL_VAL_TO_STRING(CL_COMPILER_NOT_AVAILABLE);
     47       CL_VAL_TO_STRING(CL_MEM_OBJECT_ALLOCATION_FAILURE);
     48       CL_VAL_TO_STRING(CL_OUT_OF_RESOURCES);
     49       CL_VAL_TO_STRING(CL_OUT_OF_HOST_MEMORY);
     50       CL_VAL_TO_STRING(CL_PROFILING_INFO_NOT_AVAILABLE);
     51       CL_VAL_TO_STRING(CL_MEM_COPY_OVERLAP);
     52       CL_VAL_TO_STRING(CL_IMAGE_FORMAT_MISMATCH);
     53       CL_VAL_TO_STRING(CL_IMAGE_FORMAT_NOT_SUPPORTED);
     54       CL_VAL_TO_STRING(CL_BUILD_PROGRAM_FAILURE);
     55       CL_VAL_TO_STRING(CL_MAP_FAILURE);
     56       CL_VAL_TO_STRING(CL_MISALIGNED_SUB_BUFFER_OFFSET);
     57       CL_VAL_TO_STRING(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST);
     58       CL_VAL_TO_STRING(CL_COMPILE_PROGRAM_FAILURE);
     59       CL_VAL_TO_STRING(CL_LINKER_NOT_AVAILABLE);
     60       CL_VAL_TO_STRING(CL_LINK_PROGRAM_FAILURE);
     61       CL_VAL_TO_STRING(CL_DEVICE_PARTITION_FAILED);
     62       CL_VAL_TO_STRING(CL_KERNEL_ARG_INFO_NOT_AVAILABLE);
     63       CL_VAL_TO_STRING(CL_INVALID_VALUE);
     64       CL_VAL_TO_STRING(CL_INVALID_DEVICE_TYPE);
     65       CL_VAL_TO_STRING(CL_INVALID_PLATFORM);
     66       CL_VAL_TO_STRING(CL_INVALID_DEVICE);
     67       CL_VAL_TO_STRING(CL_INVALID_CONTEXT);
     68       CL_VAL_TO_STRING(CL_INVALID_QUEUE_PROPERTIES);
     69       CL_VAL_TO_STRING(CL_INVALID_COMMAND_QUEUE);
     70       CL_VAL_TO_STRING(CL_INVALID_HOST_PTR);
     71       CL_VAL_TO_STRING(CL_INVALID_MEM_OBJECT);
     72       CL_VAL_TO_STRING(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR);
     73       CL_VAL_TO_STRING(CL_INVALID_IMAGE_SIZE);
     74       CL_VAL_TO_STRING(CL_INVALID_SAMPLER);
     75       CL_VAL_TO_STRING(CL_INVALID_BINARY);
     76       CL_VAL_TO_STRING(CL_INVALID_BUILD_OPTIONS);
     77       CL_VAL_TO_STRING(CL_INVALID_PROGRAM);
     78       CL_VAL_TO_STRING(CL_INVALID_PROGRAM_EXECUTABLE);
     79       CL_VAL_TO_STRING(CL_INVALID_KERNEL_NAME);
     80       CL_VAL_TO_STRING(CL_INVALID_KERNEL_DEFINITION);
     81       CL_VAL_TO_STRING(CL_INVALID_KERNEL);
     82       CL_VAL_TO_STRING(CL_INVALID_ARG_INDEX);
     83       CL_VAL_TO_STRING(CL_INVALID_ARG_VALUE);
     84       CL_VAL_TO_STRING(CL_INVALID_ARG_SIZE);
     85       CL_VAL_TO_STRING(CL_INVALID_KERNEL_ARGS);
     86       CL_VAL_TO_STRING(CL_INVALID_WORK_DIMENSION);
     87       CL_VAL_TO_STRING(CL_INVALID_WORK_GROUP_SIZE);
     88       CL_VAL_TO_STRING(CL_INVALID_WORK_ITEM_SIZE);
     89       CL_VAL_TO_STRING(CL_INVALID_GLOBAL_OFFSET);
     90       CL_VAL_TO_STRING(CL_INVALID_EVENT_WAIT_LIST);
     91       CL_VAL_TO_STRING(CL_INVALID_EVENT);
     92       CL_VAL_TO_STRING(CL_INVALID_OPERATION);
     93       CL_VAL_TO_STRING(CL_INVALID_GL_OBJECT);
     94       CL_VAL_TO_STRING(CL_INVALID_BUFFER_SIZE);
     95       CL_VAL_TO_STRING(CL_INVALID_MIP_LEVEL);
     96       CL_VAL_TO_STRING(CL_INVALID_GLOBAL_WORK_SIZE);
     97       CL_VAL_TO_STRING(CL_INVALID_PROPERTY);
     98       CL_VAL_TO_STRING(CL_INVALID_IMAGE_DESCRIPTOR);
     99       CL_VAL_TO_STRING(CL_INVALID_COMPILER_OPTIONS);
    100       CL_VAL_TO_STRING(CL_INVALID_LINKER_OPTIONS);
    101       CL_VAL_TO_STRING(CL_INVALID_DEVICE_PARTITION_COUNT);
    102       // CL_VAL_TO_STRING(CL_INVALID_PIPE_SIZE);
    103       // CL_VAL_TO_STRING(CL_INVALID_DEVICE_QUEUE);
    104 
    105       //
    106       // Extensions:
    107       //
    108       //   cl_khr_gl_sharing
    109       //
    110       CL_VAL_TO_STRING(CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR);
    111 
    112       //
    113       //
    114       //
    115     default:
    116       return "UNKNOWN ERROR CODE";
    117     }
    118 }
    119 
    120 //
    121 //
    122 //
    123 
    124 cl_int
    125 assert_cl(cl_int const code, char const * const file, int const line, bool const abort)
    126 {
    127   if (code != CL_SUCCESS)
    128     {
    129       char const * const cl_err_str = cl_get_error_string(code);
    130 
    131       fprintf(stderr,
    132               "\"%s\", line %d: assert_cl( %d ) = \"%s\"",
    133               file,line,code,cl_err_str);
    134 
    135       if (abort)
    136         {
    137           // stop profiling and reset device here if necessary
    138           exit(code);
    139         }
    140     }
    141 
    142   return code;
    143 }
    144 
    145 //
    146 //
    147 //
    148 
    149 void
    150 cl_get_event_info(cl_event                event,
    151                   cl_int          * const status,
    152                   cl_command_type * const type)
    153 {
    154   if (status != NULL) {
    155     cl(GetEventInfo(event,
    156                     CL_EVENT_COMMAND_EXECUTION_STATUS,
    157                     sizeof(*status),
    158                     status,
    159                     NULL));
    160   }
    161 
    162   if (type != NULL) {
    163     cl(GetEventInfo(event,
    164                     CL_EVENT_COMMAND_TYPE,
    165                     sizeof(*type),
    166                     type,
    167                     NULL));
    168   }
    169 }
    170 
    171 
    172 char const *
    173 cl_get_event_command_status_string(cl_int const status)
    174 {
    175   switch (status)
    176     {
    177       CL_VAL_TO_STRING(CL_QUEUED);
    178       CL_VAL_TO_STRING(CL_SUBMITTED);
    179       CL_VAL_TO_STRING(CL_RUNNING);
    180       CL_VAL_TO_STRING(CL_COMPLETE);
    181 
    182     default:
    183       return "UNKNOWN COMMAND STATUS";
    184     }
    185 }
    186 
    187 char const *
    188 cl_get_event_command_type_string(cl_command_type const type)
    189 {
    190   switch (type)
    191     {
    192       CL_VAL_TO_STRING(CL_COMMAND_NDRANGE_KERNEL);
    193       CL_VAL_TO_STRING(CL_COMMAND_TASK);
    194       CL_VAL_TO_STRING(CL_COMMAND_NATIVE_KERNEL);
    195       CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER);
    196       CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER);
    197       CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER);
    198       CL_VAL_TO_STRING(CL_COMMAND_READ_IMAGE);
    199       CL_VAL_TO_STRING(CL_COMMAND_WRITE_IMAGE);
    200       CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE);
    201       CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_TO_IMAGE);
    202       CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE_TO_BUFFER);
    203       CL_VAL_TO_STRING(CL_COMMAND_MAP_BUFFER);
    204       CL_VAL_TO_STRING(CL_COMMAND_MAP_IMAGE);
    205       CL_VAL_TO_STRING(CL_COMMAND_UNMAP_MEM_OBJECT);
    206       CL_VAL_TO_STRING(CL_COMMAND_MARKER);
    207       CL_VAL_TO_STRING(CL_COMMAND_ACQUIRE_GL_OBJECTS);
    208       CL_VAL_TO_STRING(CL_COMMAND_RELEASE_GL_OBJECTS);
    209       CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER_RECT);
    210       CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER_RECT);
    211       CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_RECT);
    212       CL_VAL_TO_STRING(CL_COMMAND_USER);
    213       CL_VAL_TO_STRING(CL_COMMAND_BARRIER);
    214       CL_VAL_TO_STRING(CL_COMMAND_MIGRATE_MEM_OBJECTS);
    215       CL_VAL_TO_STRING(CL_COMMAND_FILL_BUFFER);
    216       CL_VAL_TO_STRING(CL_COMMAND_FILL_IMAGE);
    217       CL_VAL_TO_STRING(CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR);
    218 
    219     default:
    220       return "UNKNOWN EVENT COMMAND TYPE";
    221     }
    222 }
    223