| /* |
| * Copyright 2016 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| * |
| */ |
| |
| // |
| // |
| // |
| |
| #include <stdlib.h> |
| #include <stdio.h> |
| |
| // |
| // |
| // |
| |
| #include "assert_cl.h" |
| |
| // |
| // |
| // |
| |
| #define CL_VAL_TO_STRING(err) case err: return #err |
| |
| // |
| // |
| // |
| |
| #define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR -1000 |
| |
| // |
| // |
| // |
| |
| char const * |
| cl_get_error_string(cl_int const err) |
| { |
| switch (err) |
| { |
| CL_VAL_TO_STRING(CL_SUCCESS); |
| CL_VAL_TO_STRING(CL_DEVICE_NOT_FOUND); |
| CL_VAL_TO_STRING(CL_DEVICE_NOT_AVAILABLE); |
| CL_VAL_TO_STRING(CL_COMPILER_NOT_AVAILABLE); |
| CL_VAL_TO_STRING(CL_MEM_OBJECT_ALLOCATION_FAILURE); |
| CL_VAL_TO_STRING(CL_OUT_OF_RESOURCES); |
| CL_VAL_TO_STRING(CL_OUT_OF_HOST_MEMORY); |
| CL_VAL_TO_STRING(CL_PROFILING_INFO_NOT_AVAILABLE); |
| CL_VAL_TO_STRING(CL_MEM_COPY_OVERLAP); |
| CL_VAL_TO_STRING(CL_IMAGE_FORMAT_MISMATCH); |
| CL_VAL_TO_STRING(CL_IMAGE_FORMAT_NOT_SUPPORTED); |
| CL_VAL_TO_STRING(CL_BUILD_PROGRAM_FAILURE); |
| CL_VAL_TO_STRING(CL_MAP_FAILURE); |
| CL_VAL_TO_STRING(CL_MISALIGNED_SUB_BUFFER_OFFSET); |
| CL_VAL_TO_STRING(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST); |
| CL_VAL_TO_STRING(CL_COMPILE_PROGRAM_FAILURE); |
| CL_VAL_TO_STRING(CL_LINKER_NOT_AVAILABLE); |
| CL_VAL_TO_STRING(CL_LINK_PROGRAM_FAILURE); |
| CL_VAL_TO_STRING(CL_DEVICE_PARTITION_FAILED); |
| CL_VAL_TO_STRING(CL_KERNEL_ARG_INFO_NOT_AVAILABLE); |
| CL_VAL_TO_STRING(CL_INVALID_VALUE); |
| CL_VAL_TO_STRING(CL_INVALID_DEVICE_TYPE); |
| CL_VAL_TO_STRING(CL_INVALID_PLATFORM); |
| CL_VAL_TO_STRING(CL_INVALID_DEVICE); |
| CL_VAL_TO_STRING(CL_INVALID_CONTEXT); |
| CL_VAL_TO_STRING(CL_INVALID_QUEUE_PROPERTIES); |
| CL_VAL_TO_STRING(CL_INVALID_COMMAND_QUEUE); |
| CL_VAL_TO_STRING(CL_INVALID_HOST_PTR); |
| CL_VAL_TO_STRING(CL_INVALID_MEM_OBJECT); |
| CL_VAL_TO_STRING(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR); |
| CL_VAL_TO_STRING(CL_INVALID_IMAGE_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_SAMPLER); |
| CL_VAL_TO_STRING(CL_INVALID_BINARY); |
| CL_VAL_TO_STRING(CL_INVALID_BUILD_OPTIONS); |
| CL_VAL_TO_STRING(CL_INVALID_PROGRAM); |
| CL_VAL_TO_STRING(CL_INVALID_PROGRAM_EXECUTABLE); |
| CL_VAL_TO_STRING(CL_INVALID_KERNEL_NAME); |
| CL_VAL_TO_STRING(CL_INVALID_KERNEL_DEFINITION); |
| CL_VAL_TO_STRING(CL_INVALID_KERNEL); |
| CL_VAL_TO_STRING(CL_INVALID_ARG_INDEX); |
| CL_VAL_TO_STRING(CL_INVALID_ARG_VALUE); |
| CL_VAL_TO_STRING(CL_INVALID_ARG_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_KERNEL_ARGS); |
| CL_VAL_TO_STRING(CL_INVALID_WORK_DIMENSION); |
| CL_VAL_TO_STRING(CL_INVALID_WORK_GROUP_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_WORK_ITEM_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_GLOBAL_OFFSET); |
| CL_VAL_TO_STRING(CL_INVALID_EVENT_WAIT_LIST); |
| CL_VAL_TO_STRING(CL_INVALID_EVENT); |
| CL_VAL_TO_STRING(CL_INVALID_OPERATION); |
| CL_VAL_TO_STRING(CL_INVALID_GL_OBJECT); |
| CL_VAL_TO_STRING(CL_INVALID_BUFFER_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_MIP_LEVEL); |
| CL_VAL_TO_STRING(CL_INVALID_GLOBAL_WORK_SIZE); |
| CL_VAL_TO_STRING(CL_INVALID_PROPERTY); |
| CL_VAL_TO_STRING(CL_INVALID_IMAGE_DESCRIPTOR); |
| CL_VAL_TO_STRING(CL_INVALID_COMPILER_OPTIONS); |
| CL_VAL_TO_STRING(CL_INVALID_LINKER_OPTIONS); |
| CL_VAL_TO_STRING(CL_INVALID_DEVICE_PARTITION_COUNT); |
| // CL_VAL_TO_STRING(CL_INVALID_PIPE_SIZE); |
| // CL_VAL_TO_STRING(CL_INVALID_DEVICE_QUEUE); |
| |
| // |
| // Extensions: |
| // |
| // cl_khr_gl_sharing |
| // |
| CL_VAL_TO_STRING(CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR); |
| |
| // |
| // |
| // |
| default: |
| return "UNKNOWN ERROR CODE"; |
| } |
| } |
| |
| // |
| // |
| // |
| |
| cl_int |
| assert_cl(cl_int const code, char const * const file, int const line, bool const abort) |
| { |
| if (code != CL_SUCCESS) |
| { |
| char const * const cl_err_str = cl_get_error_string(code); |
| |
| fprintf(stderr, |
| "\"%s\", line %d: assert_cl( %d ) = \"%s\"", |
| file,line,code,cl_err_str); |
| |
| if (abort) |
| { |
| // stop profiling and reset device here if necessary |
| exit(code); |
| } |
| } |
| |
| return code; |
| } |
| |
| // |
| // |
| // |
| |
| void |
| cl_get_event_info(cl_event event, |
| cl_int * const status, |
| cl_command_type * const type) |
| { |
| if (status != NULL) { |
| cl(GetEventInfo(event, |
| CL_EVENT_COMMAND_EXECUTION_STATUS, |
| sizeof(*status), |
| status, |
| NULL)); |
| } |
| |
| if (type != NULL) { |
| cl(GetEventInfo(event, |
| CL_EVENT_COMMAND_TYPE, |
| sizeof(*type), |
| type, |
| NULL)); |
| } |
| } |
| |
| |
| char const * |
| cl_get_event_command_status_string(cl_int const status) |
| { |
| switch (status) |
| { |
| CL_VAL_TO_STRING(CL_QUEUED); |
| CL_VAL_TO_STRING(CL_SUBMITTED); |
| CL_VAL_TO_STRING(CL_RUNNING); |
| CL_VAL_TO_STRING(CL_COMPLETE); |
| |
| default: |
| return "UNKNOWN COMMAND STATUS"; |
| } |
| } |
| |
| char const * |
| cl_get_event_command_type_string(cl_command_type const type) |
| { |
| switch (type) |
| { |
| CL_VAL_TO_STRING(CL_COMMAND_NDRANGE_KERNEL); |
| CL_VAL_TO_STRING(CL_COMMAND_TASK); |
| CL_VAL_TO_STRING(CL_COMMAND_NATIVE_KERNEL); |
| CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_READ_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_WRITE_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_TO_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_COPY_IMAGE_TO_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_MAP_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_MAP_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_UNMAP_MEM_OBJECT); |
| CL_VAL_TO_STRING(CL_COMMAND_MARKER); |
| CL_VAL_TO_STRING(CL_COMMAND_ACQUIRE_GL_OBJECTS); |
| CL_VAL_TO_STRING(CL_COMMAND_RELEASE_GL_OBJECTS); |
| CL_VAL_TO_STRING(CL_COMMAND_READ_BUFFER_RECT); |
| CL_VAL_TO_STRING(CL_COMMAND_WRITE_BUFFER_RECT); |
| CL_VAL_TO_STRING(CL_COMMAND_COPY_BUFFER_RECT); |
| CL_VAL_TO_STRING(CL_COMMAND_USER); |
| CL_VAL_TO_STRING(CL_COMMAND_BARRIER); |
| CL_VAL_TO_STRING(CL_COMMAND_MIGRATE_MEM_OBJECTS); |
| CL_VAL_TO_STRING(CL_COMMAND_FILL_BUFFER); |
| CL_VAL_TO_STRING(CL_COMMAND_FILL_IMAGE); |
| CL_VAL_TO_STRING(CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR); |
| |
| default: |
| return "UNKNOWN EVENT COMMAND TYPE"; |
| } |
| } |