open_cl_low_level/
status_code.rs

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