1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
use std::fmt; #[derive(Clone, Copy, Eq, PartialEq, Hash)] pub struct StatusCodeError { pub status_code: i32, } impl StatusCodeError { pub fn new(code: i32) -> Option<StatusCodeError> { match code { 0 => None, status_code => Some(StatusCodeError { status_code }), } } pub fn description(&self) -> &'static str { match self.status_code { -1 => "CL_DEVICE_NOT_FOUND", -2 => "CL_DEVICE_NOT_AVAILABLE", -3 => "CL_COMPILER_NOT_AVAILABLE", -4 => "CL_MEM_OBJECT_ALLOCATION_FAILURE", -5 => "CL_OUT_OF_RESOURCES", -6 => "CL_OUT_OF_HOST_MEMORY", -7 => "CL_PROFILING_INFO_NOT_AVAILABLE", -8 => "CL_MEM_COPY_OVERLAP", -9 => "CL_IMAGE_FORMAT_MISMATCH", -10 => "CL_IMAGE_FORMAT_NOT_SUPPORTED", -11 => "CL_BUILD_PROGRAM_FAILURE", -12 => "CL_MAP_FAILURE", -13 => "CL_MISALIGNED_SUB_BUFFER_OFFSET", -14 => "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST", -15 => "CL_COMPILE_PROGRAM_FAILURE", -16 => "CL_LINKER_NOT_AVAILABLE", -17 => "CL_LINK_PROGRAM_FAILURE", -18 => "CL_DEVICE_PARTITION_FAILED", -19 => "CL_KERNEL_ARG_INFO_NOT_AVAILABLE", -30 => "CL_INVALID_VALUE", -31 => "CL_INVALID_DEVICE_TYPE", -32 => "CL_INVALID_PLATFORM", -33 => "CL_INVALID_DEVICE", -34 => "CL_INVALID_CONTEXT", -35 => "CL_INVALID_QUEUE_PROPERTIES", -36 => "CL_INVALID_COMMAND_QUEUE", -37 => "CL_INVALID_HOST_PTR", -38 => "CL_INVALID_MEM_OBJECT", -39 => "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR", -40 => "CL_INVALID_IMAGE_SIZE", -41 => "CL_INVALID_SAMPLER", -42 => "CL_INVALID_BINARY", -43 => "CL_INVALID_BUILD_OPTIONS", -44 => "CL_INVALID_PROGRAM", -45 => "CL_INVALID_PROGRAM_EXECUTABLE", -46 => "CL_INVALID_KERNEL_NAME", -47 => "CL_INVALID_KERNEL_DEFINITION", -48 => "CL_INVALID_KERNEL", -49 => "CL_INVALID_ARG_INDEX", -50 => "CL_INVALID_ARG_VALUE", -51 => "CL_INVALID_ARG_SIZE", -52 => "CL_INVALID_KERNEL_ARGS", -53 => "CL_INVALID_WORK_DIMENSION", -54 => "CL_INVALID_WORK_GROUP_SIZE", -55 => "CL_INVALID_WORK_ITEM_SIZE", -56 => "CL_INVALID_GLOBAL_OFFSET", -57 => "CL_INVALID_EVENT_WAIT_LIST", -58 => "CL_INVALID_EVENT", -59 => "CL_INVALID_OPERATION", -60 => "CL_INVALID_GL_OBJECT", -61 => "CL_INVALID_BUFFER_SIZE", -62 => "CL_INVALID_MIP_LEVEL", -63 => "CL_INVALID_GLOBAL_WORK_SIZE", -64 => "CL_INVALID_PROPERTY", x => panic!("OpenCL returned an unexpected status code: {:?}", x), } } } impl fmt::Display for StatusCodeError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!( f, "OpenCL Status Code Error {} {}", self.status_code, self.description() ) } } impl fmt::Debug for StatusCodeError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!( f, "OpenCL Status Code Error {} {}", self.status_code, self.description() ) } }