open_cl_low_level/
status_code.rs1use 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}