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
}
Example #2
0
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);
}