]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/compute/exception/opencl_error.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / compute / exception / opencl_error.hpp
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
10
11 #ifndef BOOST_COMPUTE_EXCEPTION_OPENCL_ERROR_HPP
12 #define BOOST_COMPUTE_EXCEPTION_OPENCL_ERROR_HPP
13
14 #include <exception>
15 #include <string>
16 #include <sstream>
17
18 #include <boost/compute/cl.hpp>
19
20 namespace boost {
21 namespace compute {
22
23 /// \class opencl_error
24 /// \brief A run-time OpenCL error.
25 ///
26 /// The opencl_error class represents an error returned from an OpenCL
27 /// function.
28 ///
29 /// \see context_error
30 class opencl_error : public std::exception
31 {
32 public:
33 /// Creates a new opencl_error exception object for \p error.
34 explicit opencl_error(cl_int error) throw()
35 : m_error(error),
36 m_error_string(to_string(error))
37 {
38 }
39
40 /// Destroys the opencl_error object.
41 ~opencl_error() throw()
42 {
43 }
44
45 /// Returns the numeric error code.
46 cl_int error_code() const throw()
47 {
48 return m_error;
49 }
50
51 /// Returns a string description of the error.
52 std::string error_string() const throw()
53 {
54 return m_error_string;
55 }
56
57 /// Returns a C-string description of the error.
58 const char* what() const throw()
59 {
60 return m_error_string.c_str();
61 }
62
63 /// Static function which converts the numeric OpenCL error code \p error
64 /// to a human-readable string.
65 ///
66 /// For example:
67 /// \code
68 /// std::cout << opencl_error::to_string(CL_INVALID_KERNEL_ARGS) << std::endl;
69 /// \endcode
70 ///
71 /// Will print "Invalid Kernel Arguments".
72 ///
73 /// If the error code is unknown (e.g. not a valid OpenCL error), a string
74 /// containing "Unknown OpenCL Error" along with the error number will be
75 /// returned.
76 static std::string to_string(cl_int error)
77 {
78 switch(error){
79 case CL_SUCCESS: return "Success";
80 case CL_DEVICE_NOT_FOUND: return "Device Not Found";
81 case CL_DEVICE_NOT_AVAILABLE: return "Device Not Available";
82 case CL_COMPILER_NOT_AVAILABLE: return "Compiler Not Available";
83 case CL_MEM_OBJECT_ALLOCATION_FAILURE: return "Memory Object Allocation Failure";
84 case CL_OUT_OF_RESOURCES: return "Out of Resources";
85 case CL_OUT_OF_HOST_MEMORY: return "Out of Host Memory";
86 case CL_PROFILING_INFO_NOT_AVAILABLE: return "Profiling Information Not Available";
87 case CL_MEM_COPY_OVERLAP: return "Memory Copy Overlap";
88 case CL_IMAGE_FORMAT_MISMATCH: return "Image Format Mismatch";
89 case CL_IMAGE_FORMAT_NOT_SUPPORTED: return "Image Format Not Supported";
90 case CL_BUILD_PROGRAM_FAILURE: return "Build Program Failure";
91 case CL_MAP_FAILURE: return "Map Failure";
92 case CL_INVALID_VALUE: return "Invalid Value";
93 case CL_INVALID_DEVICE_TYPE: return "Invalid Device Type";
94 case CL_INVALID_PLATFORM: return "Invalid Platform";
95 case CL_INVALID_DEVICE: return "Invalid Device";
96 case CL_INVALID_CONTEXT: return "Invalid Context";
97 case CL_INVALID_QUEUE_PROPERTIES: return "Invalid Queue Properties";
98 case CL_INVALID_COMMAND_QUEUE: return "Invalid Command Queue";
99 case CL_INVALID_HOST_PTR: return "Invalid Host Pointer";
100 case CL_INVALID_MEM_OBJECT: return "Invalid Memory Object";
101 case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: return "Invalid Image Format Descriptor";
102 case CL_INVALID_IMAGE_SIZE: return "Invalid Image Size";
103 case CL_INVALID_SAMPLER: return "Invalid Sampler";
104 case CL_INVALID_BINARY: return "Invalid Binary";
105 case CL_INVALID_BUILD_OPTIONS: return "Invalid Build Options";
106 case CL_INVALID_PROGRAM: return "Invalid Program";
107 case CL_INVALID_PROGRAM_EXECUTABLE: return "Invalid Program Executable";
108 case CL_INVALID_KERNEL_NAME: return "Invalid Kernel Name";
109 case CL_INVALID_KERNEL_DEFINITION: return "Invalid Kernel Definition";
110 case CL_INVALID_KERNEL: return "Invalid Kernel";
111 case CL_INVALID_ARG_INDEX: return "Invalid Argument Index";
112 case CL_INVALID_ARG_VALUE: return "Invalid Argument Value";
113 case CL_INVALID_ARG_SIZE: return "Invalid Argument Size";
114 case CL_INVALID_KERNEL_ARGS: return "Invalid Kernel Arguments";
115 case CL_INVALID_WORK_DIMENSION: return "Invalid Work Dimension";
116 case CL_INVALID_WORK_GROUP_SIZE: return "Invalid Work Group Size";
117 case CL_INVALID_WORK_ITEM_SIZE: return "Invalid Work Item Size";
118 case CL_INVALID_GLOBAL_OFFSET: return "Invalid Global Offset";
119 case CL_INVALID_EVENT_WAIT_LIST: return "Invalid Event Wait List";
120 case CL_INVALID_EVENT: return "Invalid Event";
121 case CL_INVALID_OPERATION: return "Invalid Operation";
122 case CL_INVALID_GL_OBJECT: return "Invalid GL Object";
123 case CL_INVALID_BUFFER_SIZE: return "Invalid Buffer Size";
124 case CL_INVALID_MIP_LEVEL: return "Invalid MIP Level";
125 case CL_INVALID_GLOBAL_WORK_SIZE: return "Invalid Global Work Size";
126 #ifdef BOOST_COMPUTE_CL_VERSION_1_2
127 case CL_COMPILE_PROGRAM_FAILURE: return "Compile Program Failure";
128 case CL_LINKER_NOT_AVAILABLE: return "Linker Not Available";
129 case CL_LINK_PROGRAM_FAILURE: return "Link Program Failure";
130 case CL_DEVICE_PARTITION_FAILED: return "Device Partition Failed";
131 case CL_KERNEL_ARG_INFO_NOT_AVAILABLE: return "Kernel Argument Info Not Available";
132 case CL_INVALID_PROPERTY: return "Invalid Property";
133 case CL_INVALID_IMAGE_DESCRIPTOR: return "Invalid Image Descriptor";
134 case CL_INVALID_COMPILER_OPTIONS: return "Invalid Compiler Options";
135 case CL_INVALID_LINKER_OPTIONS: return "Invalid Linker Options";
136 case CL_INVALID_DEVICE_PARTITION_COUNT: return "Invalid Device Partition Count";
137 #endif // BOOST_COMPUTE_CL_VERSION_1_2
138 #ifdef BOOST_COMPUTE_CL_VERSION_2_0
139 case CL_INVALID_PIPE_SIZE: return "Invalid Pipe Size";
140 case CL_INVALID_DEVICE_QUEUE: return "Invalid Device Queue";
141 #endif
142 default: {
143 std::stringstream s;
144 s << "Unknown OpenCL Error (" << error << ")";
145 return s.str();
146 }
147 }
148 }
149
150 private:
151 cl_int m_error;
152 std::string m_error_string;
153 };
154
155 } // end compute namespace
156 } // end boost namespace
157
158 #endif // BOOST_COMPUTE_EXCEPTION_OPENCL_ERROR_HPP