const char *get_opencl_error_str(cl_int errorCode) { #define DECLARE_ERROR(err) \ case (err): \ return #err switch (errorCode) { DECLARE_ERROR(CL_SUCCESS); DECLARE_ERROR(CL_DEVICE_NOT_FOUND); DECLARE_ERROR(CL_DEVICE_NOT_AVAILABLE); DECLARE_ERROR(CL_COMPILER_NOT_AVAILABLE); DECLARE_ERROR(CL_MEM_OBJECT_ALLOCATION_FAILURE); case CL_OUT_OF_RESOURCES: return "CL_OUT_OF_RESOURCES - either running out of memory or possible " "watchdog exception. See f.e " "https://devtalk.nvidia.com/default/topic/471020/" "driver-crashs-while-opencl-app-is-running/"; DECLARE_ERROR(CL_OUT_OF_HOST_MEMORY); DECLARE_ERROR(CL_PROFILING_INFO_NOT_AVAILABLE); DECLARE_ERROR(CL_MEM_COPY_OVERLAP); DECLARE_ERROR(CL_IMAGE_FORMAT_MISMATCH); DECLARE_ERROR(CL_IMAGE_FORMAT_NOT_SUPPORTED); DECLARE_ERROR(CL_BUILD_PROGRAM_FAILURE); DECLARE_ERROR(CL_MAP_FAILURE); DECLARE_ERROR(CL_MISALIGNED_SUB_BUFFER_OFFSET); DECLARE_ERROR(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST); DECLARE_ERROR(CL_INVALID_VALUE); DECLARE_ERROR(CL_INVALID_DEVICE_TYPE); DECLARE_ERROR(CL_INVALID_PLATFORM); DECLARE_ERROR(CL_INVALID_DEVICE); DECLARE_ERROR(CL_INVALID_CONTEXT); DECLARE_ERROR(CL_INVALID_QUEUE_PROPERTIES); DECLARE_ERROR(CL_INVALID_COMMAND_QUEUE); DECLARE_ERROR(CL_INVALID_HOST_PTR); DECLARE_ERROR(CL_INVALID_MEM_OBJECT); DECLARE_ERROR(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR); DECLARE_ERROR(CL_INVALID_IMAGE_SIZE); DECLARE_ERROR(CL_INVALID_SAMPLER); DECLARE_ERROR(CL_INVALID_BINARY); DECLARE_ERROR(CL_INVALID_BUILD_OPTIONS); DECLARE_ERROR(CL_INVALID_PROGRAM); DECLARE_ERROR(CL_INVALID_PROGRAM_EXECUTABLE); DECLARE_ERROR(CL_INVALID_KERNEL_NAME); DECLARE_ERROR(CL_INVALID_KERNEL_DEFINITION); DECLARE_ERROR(CL_INVALID_KERNEL); DECLARE_ERROR(CL_INVALID_ARG_INDEX); DECLARE_ERROR(CL_INVALID_ARG_VALUE); DECLARE_ERROR(CL_INVALID_ARG_SIZE); DECLARE_ERROR(CL_INVALID_KERNEL_ARGS); DECLARE_ERROR(CL_INVALID_WORK_DIMENSION); DECLARE_ERROR(CL_INVALID_WORK_GROUP_SIZE); DECLARE_ERROR(CL_INVALID_WORK_ITEM_SIZE); DECLARE_ERROR(CL_INVALID_GLOBAL_OFFSET); DECLARE_ERROR(CL_INVALID_EVENT_WAIT_LIST); DECLARE_ERROR(CL_INVALID_EVENT); DECLARE_ERROR(CL_INVALID_OPERATION); DECLARE_ERROR(CL_INVALID_GL_OBJECT); DECLARE_ERROR(CL_INVALID_BUFFER_SIZE); DECLARE_ERROR(CL_INVALID_MIP_LEVEL); DECLARE_ERROR(CL_INVALID_GLOBAL_WORK_SIZE); // DECLARE_ERROR(CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR); // DECLARE_ERROR(CL_PLATFORM_NOT_FOUND_KHR); // DECLARE_ERROR(CL_INVALID_PROPERTY_EXT); // DECLARE_ERROR(CL_DEVICE_PARTITION_FAILED_EXT); // DECLARE_ERROR(CL_INVALID_PARTITION_COUNT_EXT); DECLARE_ERROR(CL_INVALID_PROPERTY); default: return "unknown error code"; } #undef DECLARE_ERROR }
static void twopence_registerErrorConstants(PyObject *m) { struct map { int code; const char * name; }; struct map errorMap[] = { DECLARE_ERROR(PARAMETER_ERROR), DECLARE_ERROR(OPEN_SESSION_ERROR), DECLARE_ERROR(SEND_COMMAND_ERROR), DECLARE_ERROR(FORWARD_INPUT_ERROR), DECLARE_ERROR(RECEIVE_RESULTS_ERROR), DECLARE_ERROR(COMMAND_TIMEOUT_ERROR), DECLARE_ERROR(LOCAL_FILE_ERROR), DECLARE_ERROR(SEND_FILE_ERROR), DECLARE_ERROR(REMOTE_FILE_ERROR), DECLARE_ERROR(RECEIVE_FILE_ERROR), DECLARE_ERROR(INTERRUPT_COMMAND_ERROR), DECLARE_ERROR(INVALID_TARGET_ERROR), DECLARE_ERROR(UNKNOWN_PLUGIN_ERROR), DECLARE_ERROR(INCOMPATIBLE_PLUGIN_ERROR), DECLARE_ERROR(UNSUPPORTED_FUNCTION_ERROR), DECLARE_ERROR(PROTOCOL_ERROR), DECLARE_ERROR(INTERNAL_ERROR), DECLARE_ERROR(TRANSPORT_ERROR), DECLARE_ERROR(INCOMPATIBLE_PROTOCOL_ERROR), DECLARE_ERROR(INVALID_TRANSACTION), DECLARE_ERROR(COMMAND_CANCELED_ERROR), { -1, NULL } }; struct map *em; for (em = errorMap; em->name; ++em) PyModule_AddIntConstant(m, em->name, -em->code); }