Skip to main content

easy_async_opencl3/error/
api_error.rs

1#[derive(Debug)]
2pub enum ApiError {
3    Unknown(i32),
4    ClAcceleratorTypeNotSupportedIntel,
5    ClBuildProgramFailure,
6    ClCancelledImg,
7    ClCommandTerminatedItselfWithFailureArm,
8    ClCompilerNotAvailable,
9    ClCompileProgramFailure,
10    ClContextTerminatedKhr,
11    ClD3D11ResourceAlreadyAcquiredKhr,
12    ClD3D11ResourceNotAcquiredKhr,
13    ClDeviceNotAvailable,
14    ClDeviceNotFound,
15    ClMemObjectAllocationFailure,
16    ClOutOfResources,
17    ClOutOfHostMemory,
18    ClProfilingInfoNotAvailable,
19    ClMemCopyOverlap,
20    ClImageFormatMismatch,
21    ClImageFormatNotSupported,
22    ClMapFailure,
23    ClMisalignedSubBufferOffset,
24    ClExecStatusErrorForEventsInWaitList,
25    ClLinkerNotAvailable,
26    ClLinkProgramFailure,
27    ClDevicePartitionFailed,
28    ClKernelArgInfoNotAvailable,
29    ClInvalidValue,
30    ClInvalidDeviceType,
31    ClInvalidPlatform,
32    ClInvalidDevice,
33    ClInvalidContext,
34    ClInvalidQueueProperties,
35    ClInvalidCommandQueue,
36    ClInvalidHostPtr,
37    ClInvalidMemObject,
38    ClInvalidImageFormatDescriptor,
39    ClInvalidImageSize,
40    ClInvalidSampler,
41    ClInvalidBinary,
42    ClInvalidBuildOptions,
43    ClInvalidProgram,
44    ClInvalidProgramExecutable,
45    ClInvalidKernelName,
46    ClInvalidKernelDefinition,
47    ClInvalidKernel,
48    ClInvalidArgIndex,
49    ClInvalidArgValue,
50    ClInvalidArgSize,
51    ClInvalidKernelArgs,
52    ClInvalidWorkDimension,
53    ClInvalidWorkGroupSize,
54    ClInvalidWorkItemSize,
55    ClInvalidGlobalOffset,
56    ClInvalidEventWaitList,
57    ClInvalidEvent,
58    ClInvalidOperation,
59    ClInvalidGlObject,
60    ClInvalidBufferSize,
61    ClInvalidMipLevel,
62    ClInvalidGlobalWorkSize,
63    ClInvalidProperty,
64    ClInvalidImageDescriptor,
65    ClInvalidCompilerOptions,
66    ClInvalidLinkerOptions,
67    ClInvalidDevicePartitionCount,
68    ClInvalidPipeSize,
69    ClInvalidDeviceQueue,
70    ClInvalidSpecId,
71    ClMaxSizeRestrictionExceeded,
72}
73
74impl ApiError {
75    pub fn get_error(code: i32) -> ApiError {
76        match code {
77            cl3::error_codes::CL_ACCELERATOR_TYPE_NOT_SUPPORTED_INTEL => {
78                ApiError::ClAcceleratorTypeNotSupportedIntel
79            }
80            cl3::error_codes::CL_BUILD_PROGRAM_FAILURE => ApiError::ClBuildProgramFailure,
81            cl3::error_codes::CL_CANCELLED_IMG => ApiError::ClCancelledImg,
82            cl3::error_codes::CL_COMMAND_TERMINATED_ITSELF_WITH_FAILURE_ARM => {
83                ApiError::ClCommandTerminatedItselfWithFailureArm
84            }
85            cl3::error_codes::CL_COMPILER_NOT_AVAILABLE => ApiError::ClCompilerNotAvailable,
86            cl3::error_codes::CL_COMPILE_PROGRAM_FAILURE => ApiError::ClCompileProgramFailure,
87            cl3::error_codes::CL_CONTEXT_TERMINATED_KHR => ApiError::ClContextTerminatedKhr,
88            cl3::error_codes::CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR => {
89                ApiError::ClD3D11ResourceAlreadyAcquiredKhr
90            }
91            cl3::error_codes::CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR => {
92                ApiError::ClD3D11ResourceNotAcquiredKhr
93            }
94            cl3::error_codes::CL_DEVICE_NOT_AVAILABLE => ApiError::ClDeviceNotAvailable,
95            cl3::error_codes::CL_DEVICE_NOT_FOUND => ApiError::ClDeviceNotFound,
96            cl3::error_codes::CL_MEM_OBJECT_ALLOCATION_FAILURE => {
97                ApiError::ClMemObjectAllocationFailure
98            }
99            cl3::error_codes::CL_OUT_OF_RESOURCES => ApiError::ClOutOfResources,
100            cl3::error_codes::CL_OUT_OF_HOST_MEMORY => ApiError::ClOutOfHostMemory,
101            cl3::error_codes::CL_PROFILING_INFO_NOT_AVAILABLE => {
102                ApiError::ClProfilingInfoNotAvailable
103            }
104            cl3::error_codes::CL_MEM_COPY_OVERLAP => ApiError::ClMemCopyOverlap,
105            cl3::error_codes::CL_IMAGE_FORMAT_MISMATCH => ApiError::ClImageFormatMismatch,
106            cl3::error_codes::CL_IMAGE_FORMAT_NOT_SUPPORTED => ApiError::ClImageFormatNotSupported,
107            cl3::error_codes::CL_MAP_FAILURE => ApiError::ClMapFailure,
108            cl3::error_codes::CL_MISALIGNED_SUB_BUFFER_OFFSET => {
109                ApiError::ClMisalignedSubBufferOffset
110            }
111            cl3::error_codes::CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST => {
112                ApiError::ClExecStatusErrorForEventsInWaitList
113            }
114            cl3::error_codes::CL_LINKER_NOT_AVAILABLE => ApiError::ClLinkerNotAvailable,
115            cl3::error_codes::CL_LINK_PROGRAM_FAILURE => ApiError::ClLinkProgramFailure,
116            cl3::error_codes::CL_DEVICE_PARTITION_FAILED => ApiError::ClDevicePartitionFailed,
117            cl3::error_codes::CL_KERNEL_ARG_INFO_NOT_AVAILABLE => {
118                ApiError::ClKernelArgInfoNotAvailable
119            }
120            cl3::error_codes::CL_INVALID_VALUE => ApiError::ClInvalidValue,
121            cl3::error_codes::CL_INVALID_DEVICE_TYPE => ApiError::ClInvalidDeviceType,
122            cl3::error_codes::CL_INVALID_PLATFORM => ApiError::ClInvalidPlatform,
123            cl3::error_codes::CL_INVALID_DEVICE => ApiError::ClInvalidDevice,
124            cl3::error_codes::CL_INVALID_CONTEXT => ApiError::ClInvalidContext,
125            cl3::error_codes::CL_INVALID_QUEUE_PROPERTIES => ApiError::ClInvalidQueueProperties,
126            cl3::error_codes::CL_INVALID_COMMAND_QUEUE => ApiError::ClInvalidCommandQueue,
127            cl3::error_codes::CL_INVALID_HOST_PTR => ApiError::ClInvalidHostPtr,
128            cl3::error_codes::CL_INVALID_MEM_OBJECT => ApiError::ClInvalidMemObject,
129            cl3::error_codes::CL_INVALID_IMAGE_FORMAT_DESCRIPTOR => {
130                ApiError::ClInvalidImageFormatDescriptor
131            }
132            cl3::error_codes::CL_INVALID_IMAGE_SIZE => ApiError::ClInvalidImageSize,
133            cl3::error_codes::CL_INVALID_SAMPLER => ApiError::ClInvalidSampler,
134            cl3::error_codes::CL_INVALID_BINARY => ApiError::ClInvalidBinary,
135            cl3::error_codes::CL_INVALID_BUILD_OPTIONS => ApiError::ClInvalidBuildOptions,
136            cl3::error_codes::CL_INVALID_PROGRAM => ApiError::ClInvalidProgram,
137            cl3::error_codes::CL_INVALID_PROGRAM_EXECUTABLE => ApiError::ClInvalidProgramExecutable,
138            cl3::error_codes::CL_INVALID_KERNEL_NAME => ApiError::ClInvalidKernelName,
139            cl3::error_codes::CL_INVALID_KERNEL_DEFINITION => ApiError::ClInvalidKernelDefinition,
140            cl3::error_codes::CL_INVALID_KERNEL => ApiError::ClInvalidKernel,
141            cl3::error_codes::CL_INVALID_ARG_INDEX => ApiError::ClInvalidArgIndex,
142            cl3::error_codes::CL_INVALID_ARG_VALUE => ApiError::ClInvalidArgValue,
143            cl3::error_codes::CL_INVALID_ARG_SIZE => ApiError::ClInvalidArgSize,
144            cl3::error_codes::CL_INVALID_KERNEL_ARGS => ApiError::ClInvalidKernelArgs,
145            cl3::error_codes::CL_INVALID_WORK_DIMENSION => ApiError::ClInvalidWorkDimension,
146            cl3::error_codes::CL_INVALID_WORK_GROUP_SIZE => ApiError::ClInvalidWorkGroupSize,
147            cl3::error_codes::CL_INVALID_WORK_ITEM_SIZE => ApiError::ClInvalidWorkItemSize,
148            cl3::error_codes::CL_INVALID_GLOBAL_OFFSET => ApiError::ClInvalidGlobalOffset,
149            cl3::error_codes::CL_INVALID_EVENT_WAIT_LIST => ApiError::ClInvalidEventWaitList,
150            cl3::error_codes::CL_INVALID_EVENT => ApiError::ClInvalidEvent,
151            cl3::error_codes::CL_INVALID_OPERATION => ApiError::ClInvalidOperation,
152            cl3::error_codes::CL_INVALID_GL_OBJECT => ApiError::ClInvalidGlObject,
153            cl3::error_codes::CL_INVALID_BUFFER_SIZE => ApiError::ClInvalidBufferSize,
154            cl3::error_codes::CL_INVALID_MIP_LEVEL => ApiError::ClInvalidMipLevel,
155            cl3::error_codes::CL_INVALID_GLOBAL_WORK_SIZE => ApiError::ClInvalidGlobalWorkSize,
156            cl3::error_codes::CL_INVALID_PROPERTY => ApiError::ClInvalidProperty,
157            cl3::error_codes::CL_INVALID_IMAGE_DESCRIPTOR => ApiError::ClInvalidImageDescriptor,
158            cl3::error_codes::CL_INVALID_COMPILER_OPTIONS => ApiError::ClInvalidCompilerOptions,
159            cl3::error_codes::CL_INVALID_LINKER_OPTIONS => ApiError::ClInvalidLinkerOptions,
160            cl3::error_codes::CL_INVALID_DEVICE_PARTITION_COUNT => {
161                ApiError::ClInvalidDevicePartitionCount
162            }
163            cl3::error_codes::CL_INVALID_PIPE_SIZE => ApiError::ClInvalidPipeSize,
164            cl3::error_codes::CL_INVALID_DEVICE_QUEUE => ApiError::ClInvalidDeviceQueue,
165            cl3::error_codes::CL_INVALID_SPEC_ID => ApiError::ClInvalidSpecId,
166            cl3::error_codes::CL_MAX_SIZE_RESTRICTION_EXCEEDED => {
167                ApiError::ClMaxSizeRestrictionExceeded
168            }
169            _ => ApiError::Unknown(code),
170        }
171    }
172}
173
174impl std::fmt::Display for ApiError {
175    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
176        write!(f, "OpenCL API Error: {:?}", self)
177    }
178}
179
180impl std::error::Error for ApiError {}