• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2013 Francisco Jerez
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining a
5 // copy of this software and associated documentation files (the "Software"),
6 // to deal in the Software without restriction, including without limitation
7 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 // and/or sell copies of the Software, and to permit persons to whom the
9 // Software is furnished to do so, subject to the following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included in
12 // all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 // OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 // ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 // OTHER DEALINGS IN THE SOFTWARE.
21 //
22 
23 #ifndef CLOVER_CORE_ERROR_HPP
24 #define CLOVER_CORE_ERROR_HPP
25 
26 #include "CL/cl.h"
27 
28 #include <stdexcept>
29 #include <string>
30 
31 namespace clover {
32    class command_queue;
33    class context;
34    class device;
35    class event;
36    class hard_event;
37    class soft_event;
38    class kernel;
39    class memory_obj;
40    class buffer;
41    class root_buffer;
42    class sub_buffer;
43    class image;
44    class image2d;
45    class image3d;
46    class platform;
47    class program;
48    class sampler;
49 
50    ///
51    /// Class that represents an error that can be converted to an
52    /// OpenCL status code.
53    ///
54    class error : public std::runtime_error {
55    public:
error(cl_int code,std::string what="")56       error(cl_int code, std::string what = "") :
57          std::runtime_error(what), code(code) {
58       }
59 
get() const60       cl_int get() const {
61          return code;
62       }
63 
64    protected:
65       cl_int code;
66    };
67 
68    class invalid_build_options_error : public error {
69    public:
invalid_build_options_error(const std::string & what="")70       invalid_build_options_error(const std::string &what = "") :
71          error(CL_INVALID_BUILD_OPTIONS, what) {}
72    };
73 
74    class build_error : public error {
75    public:
build_error(const std::string & what="")76       build_error(const std::string &what = "") :
77          error(CL_BUILD_PROGRAM_FAILURE, what) {}
78    };
79 
80    template<typename O>
81    class invalid_object_error;
82 
83    template<>
84    class invalid_object_error<command_queue> : public error {
85    public:
invalid_object_error(std::string what="")86       invalid_object_error(std::string what = "") :
87          error(CL_INVALID_COMMAND_QUEUE, what) {}
88    };
89 
90    template<>
91    class invalid_object_error<context> : public error {
92    public:
invalid_object_error(std::string what="")93       invalid_object_error(std::string what = "") :
94          error(CL_INVALID_CONTEXT, what) {}
95    };
96 
97    template<>
98    class invalid_object_error<device> : public error {
99    public:
invalid_object_error(std::string what="")100       invalid_object_error(std::string what = "") :
101          error(CL_INVALID_DEVICE, what) {}
102    };
103 
104    template<>
105    class invalid_object_error<event> : public error {
106    public:
invalid_object_error(std::string what="")107       invalid_object_error(std::string what = "") :
108          error(CL_INVALID_EVENT, what) {}
109    };
110 
111    template<>
112    class invalid_object_error<soft_event> : public error {
113    public:
invalid_object_error(std::string what="")114       invalid_object_error(std::string what = "") :
115          error(CL_INVALID_EVENT, what) {}
116    };
117 
118    template<>
119    class invalid_object_error<kernel> : public error {
120    public:
invalid_object_error(std::string what="")121       invalid_object_error(std::string what = "") :
122          error(CL_INVALID_KERNEL, what) {}
123    };
124 
125    template<>
126    class invalid_object_error<memory_obj> : public error {
127    public:
invalid_object_error(std::string what="")128       invalid_object_error(std::string what = "") :
129          error(CL_INVALID_MEM_OBJECT, what) {}
130    };
131 
132    template<>
133    class invalid_object_error<buffer> : public error {
134    public:
invalid_object_error(std::string what="")135       invalid_object_error(std::string what = "") :
136          error(CL_INVALID_MEM_OBJECT, what) {}
137    };
138 
139    template<>
140    class invalid_object_error<root_buffer> : public error {
141    public:
invalid_object_error(std::string what="")142       invalid_object_error(std::string what = "") :
143          error(CL_INVALID_MEM_OBJECT, what) {}
144    };
145 
146    template<>
147    class invalid_object_error<sub_buffer> : public error {
148    public:
invalid_object_error(std::string what="")149       invalid_object_error(std::string what = "") :
150          error(CL_INVALID_MEM_OBJECT, what) {}
151    };
152 
153    template<>
154    class invalid_object_error<image> : public error {
155    public:
invalid_object_error(std::string what="")156       invalid_object_error(std::string what = "") :
157          error(CL_INVALID_MEM_OBJECT, what) {}
158    };
159 
160    template<>
161    class invalid_object_error<image2d> : public error {
162    public:
invalid_object_error(std::string what="")163       invalid_object_error(std::string what = "") :
164          error(CL_INVALID_MEM_OBJECT, what) {}
165    };
166 
167    template<>
168    class invalid_object_error<image3d> : public error {
169    public:
invalid_object_error(std::string what="")170       invalid_object_error(std::string what = "") :
171          error(CL_INVALID_MEM_OBJECT, what) {}
172    };
173 
174    template<>
175    class invalid_object_error<platform> : public error {
176    public:
invalid_object_error(std::string what="")177       invalid_object_error(std::string what = "") :
178          error(CL_INVALID_PLATFORM, what) {}
179    };
180 
181    template<>
182    class invalid_object_error<program> : public error {
183    public:
invalid_object_error(std::string what="")184       invalid_object_error(std::string what = "") :
185          error(CL_INVALID_PROGRAM, what) {}
186    };
187 
188    template<>
189    class invalid_object_error<sampler> : public error {
190    public:
invalid_object_error(std::string what="")191       invalid_object_error(std::string what = "") :
192          error(CL_INVALID_SAMPLER, what) {}
193    };
194 
195    class invalid_wait_list_error : public error {
196    public:
invalid_wait_list_error(std::string what="")197       invalid_wait_list_error(std::string what = "") :
198          error(CL_INVALID_EVENT_WAIT_LIST, what) {}
199    };
200 }
201 
202 #endif
203