Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
clfException.cpp
1 /*
2  This file is part of the BIAS library (Basic ImageAlgorithmS).
3 
4  Copyright (C) 2003, 2004 (see file CONTACTS for details)
5  Multimediale Systeme der Informationsverarbeitung
6  Institut fuer Informatik
7  Christian-Albrechts-Universitaet Kiel
8 
9 
10  BIAS is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as published by
12  the Free Software Foundation; either version 2.1 of the License, or
13  (at your option) any later version.
14 
15  BIAS is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public License
21  along with BIAS; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23  */
24 
25 #include <OpenCLFramework/clfException.hh>
26 #include <Base/Common/BIASpragma.hh>
27 
28 #include <iosfwd>
29 #include <Base/Debug/Error.hh>
30 
31 namespace BIAS {
32 
33  clfException::clfException(cl::Error clerror, std::string file, int line) throw() {
34  fileName_ = file;
35  lineNumber_ = line;
36  errorCode_ = clerror.err();
37  message_ = clerror.what();
38 
39  switch(errorCode_) {
40  case CL_SUCCESS:
41  reason_ = "success.";
42  break;
43  case CL_DEVICE_NOT_FOUND:
44  reason_ = "CL_DEVICE_NOT_FOUND.";
45  break;
46  case CL_DEVICE_NOT_AVAILABLE:
47  reason_ = "CL_DEVICE_NOT_AVAILABLE.";
48  break;
49  case CL_COMPILER_NOT_AVAILABLE:
50  reason_ = "CL_COMPILER_NOT_AVAILABLE.";
51  break;
52  case CL_MEM_OBJECT_ALLOCATION_FAILURE:
53  reason_ = "CL_MEM_OBJECT_ALLOCATION_FAILURE.";
54  break;
55  case CL_OUT_OF_RESOURCES:
56  reason_ = "CL_OUT_OF_RESOURCES.";
57  break;
58  case CL_OUT_OF_HOST_MEMORY:
59  reason_ = "CL_OUT_OF_HOST_MEMORY.";
60  break;
61  case CL_PROFILING_INFO_NOT_AVAILABLE:
62  reason_ = "CL_PROFILING_INFO_NOT_AVAILABLE.";
63  break;
64  case CL_MEM_COPY_OVERLAP:
65  reason_ = "CL_MEM_COPY_OVERLAP.";
66  break;
67  case CL_IMAGE_FORMAT_MISMATCH:
68  reason_ = "CL_IMAGE_FORMAT_MISMATCH.";
69  break;
70  case CL_IMAGE_FORMAT_NOT_SUPPORTED:
71  reason_ = "CL_IMAGE_FORMAT_NOT_SUPPORTED.";
72  break;
73  case CL_BUILD_PROGRAM_FAILURE:
74  reason_ = "CL_BUILD_PROGRAM_FAILURE.";
75  break;
76  case CL_MAP_FAILURE:
77  reason_ = "CL_MAP_FAILURE.";
78  break;
79  case CL_MISALIGNED_SUB_BUFFER_OFFSET:
80  reason_ = "CL_MISALIGNED_SUB_BUFFER_OFFSET.";
81  break;
82  case CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST:
83  reason_ = "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST.";
84  break;
85  case CL_INVALID_VALUE:
86  reason_ = "CL_INVALID_VALUE.";
87  break;
88  case CL_INVALID_DEVICE_TYPE:
89  reason_ = "CL_INVALID_DEVICE_TYPE.";
90  break;
91  case CL_INVALID_PLATFORM:
92  reason_ = "CL_INVALID_PLATFORM.";
93  break;
94  case CL_INVALID_DEVICE:
95  reason_ = "CL_INVALID_DEVICE.";
96  break;
97  case CL_INVALID_CONTEXT:
98  reason_ = "CL_INVALID_CONTEXT.";
99  break;
100  case CL_INVALID_QUEUE_PROPERTIES:
101  reason_ = "CL_INVALID_QUEUE_PROPERTIES.";
102  break;
103  case CL_INVALID_COMMAND_QUEUE:
104  reason_ = "CL_INVALID_COMMAND_QUEUE.";
105  break;
106  case CL_INVALID_HOST_PTR:
107  reason_ = "CL_INVALID_HOST_PTR.";
108  break;
109  case CL_INVALID_MEM_OBJECT:
110  reason_ = "CL_INVALID_MEM_OBJECT.";
111  break;
112  case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:
113  reason_ = "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR.";
114  break;
115  case CL_INVALID_IMAGE_SIZE:
116  reason_ = "CL_INVALID_IMAGE_SIZE.";
117  break;
118  case CL_INVALID_SAMPLER:
119  reason_ = "CL_INVALID_SAMPLER.";
120  break;
121  case CL_INVALID_BINARY:
122  reason_ = "CL_INVALID_BINARY.";
123  break;
124  case CL_INVALID_BUILD_OPTIONS:
125  reason_ = "CL_INVALID_BUILD_OPTIONS.";
126  break;
127  case CL_INVALID_PROGRAM:
128  reason_ = "CL_INVALID_PROGRAM.";
129  break;
130  case CL_INVALID_PROGRAM_EXECUTABLE:
131  reason_ = "CL_INVALID_PROGRAM_EXECUTABLE.";
132  break;
133  case CL_INVALID_KERNEL_NAME:
134  reason_ = "CL_INVALID_KERNEL_NAME.";
135  break;
136  case CL_INVALID_KERNEL_DEFINITION:
137  reason_ = "CL_INVALID_KERNEL_DEFINITION.";
138  break;
139  case CL_INVALID_KERNEL:
140  reason_ = "CL_INVALID_KERNEL.";
141  break;
142  case CL_INVALID_ARG_INDEX:
143  reason_ = "CL_INVALID_ARG_INDEX.";
144  break;
145  case CL_INVALID_ARG_VALUE:
146  reason_ = "CL_INVALID_ARG_VALUE.";
147  break;
148  case CL_INVALID_ARG_SIZE:
149  reason_ = "CL_INVALID_ARG_SIZE.";
150  break;
151  case CL_INVALID_KERNEL_ARGS:
152  reason_ = "CL_INVALID_KERNEL_ARGS.";
153  break;
154  case CL_INVALID_WORK_DIMENSION:
155  reason_ = "CL_INVALID_WORK_DIMENSION.";
156  break;
157  case CL_INVALID_WORK_GROUP_SIZE:
158  reason_ = "CL_INVALID_WORK_GROUP_SIZE.";
159  break;
160  case CL_INVALID_WORK_ITEM_SIZE:
161  reason_ = "CL_INVALID_WORK_ITEM_SIZE.";
162  break;
163  case CL_INVALID_GLOBAL_OFFSET:
164  reason_ = "CL_INVALID_GLOBAL_OFFSET.";
165  break;
166  case CL_INVALID_EVENT_WAIT_LIST:
167  reason_ = "CL_INVALID_EVENT_WAIT_LIST.";
168  break;
169  case CL_INVALID_EVENT:
170  reason_ = "CL_INVALID_EVENT.";
171  break;
172  case CL_INVALID_OPERATION:
173  reason_ = "CL_INVALID_OPERATION.";
174  break;
175  case CL_INVALID_GL_OBJECT:
176  reason_ = "CL_INVALID_GL_OBJECT.";
177  break;
178  case CL_INVALID_BUFFER_SIZE:
179  reason_ = "CL_INVALID_BUFFER_SIZE.";
180  break;
181  case CL_INVALID_MIP_LEVEL:
182  reason_ = "CL_INVALID_DECS_LEVEL.";
183  break;
184  case CL_INVALID_GLOBAL_WORK_SIZE:
185  reason_ = "CL_INVALID_GLOBAL_WORK_SIZE.";
186  break;
187  case CL_INVALID_PROPERTY:
188  reason_ = "CL_INVALID_PROPERTY.";
189  break;
190  case -100:
191  reason_ = "OpenCLFramework internal error";
192  break;
193  default:
194  reason_ = "reason unknown.";
195  break;
196  }
197 
198  std::stringstream ss;
199  ss << "OpenCL Exception:\n" << fileName_ << " : " << lineNumber_ << "\n"
200  << message_ << " (" << errorCode_ << ")\n" << "Reason: " << reason_;
201  detailed_ = ss.str();
202  //if (errorCode_ != -39)
203  BIASERR(detailed_);
204  BIASABORT;
205  }
206 
207  const std::string& clfException::GetFileName() const throw() { return fileName_; }
208  int clfException::GetLineNumber() const throw() { return lineNumber_; }
209  int clfException::GetErrorCode() const throw() { return errorCode_; }
210  const std::string& clfException::GetMessageString() const throw() { return message_; }
211  const std::string& clfException::GetReasonString() const throw() { return reason_; }
212 
213  const std::string& clfException::GetDetailedString() const throw() { return detailed_; }
214 
215  const char* clfException::what() const throw() {
216  return detailed_.c_str();
217  }
218 }
const std::string & GetReasonString() const
clf translated error code (todo clean up text)
virtual const char * what() const
clfException(cl::Error clerror, std::string file, int line)
is called by THROW_CL_EXCEPTION macro
const std::string & GetFileName() const
file in which error occured
const std::string & GetDetailedString() const
detailed combination of all info available
int GetErrorCode() const
clf error code
const std::string & GetMessageString() const
clf error message (usually name of failing c function)
int GetLineNumber() const
line in which error occured