parallel/CLTools.h
00001 /* CLTools.h
00002  */
00003 
00004 #ifndef MULTIQUAD_CLTOOLS_H
00005 #define MULTIQUAD_CLTOOLS_H
00006 #include <OpenCL/OpenCL.h>
00007 #include <exception>
00008 
00009 static const char* CL_H_defines[] = 
00010 {
00011     "CL_SUCCESS",                                  // 0
00012     "CL_DEVICE_NOT_FOUND",                         // -1
00013     "CL_DEVICE_NOT_AVAILABLE",                     // -2
00014     "CL_COMPILER_NOT_AVAILABLE",                   // -3
00015     "CL_MEM_OBJECT_ALLOCATION_FAILURE",            // -4
00016     "CL_OUT_OF_RESOURCES",                         // -5
00017     "CL_OUT_OF_HOST_MEMORY",                       // -6
00018     "CL_PROFILING_INFO_NOT_AVAILABLE",             // -7
00019     "CL_MEM_COPY_OVERLAP",                         // -8
00020     "CL_IMAGE_FORMAT_MISMATCH",                    // -9
00021     "CL_IMAGE_FORMAT_NOT_SUPPORTED",               // -10
00022     "CL_BUILD_PROGRAM_FAILURE",                    // -11
00023     "CL_MAP_FAILURE",                              // -12
00024     "CL_MISALIGNED_SUB_BUFFER_OFFSET",             // -13
00025     "CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST", // -14
00026     "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
00027     "CL_INVALID_VALUE",                            // -30
00028     "CL_INVALID_DEVICE_TYPE",                      // -31
00029     "CL_INVALID_PLATFORM",                         // -32
00030     "CL_INVALID_DEVICE",                           // -33
00031     "CL_INVALID_CONTEXT",                          // -34
00032     "CL_INVALID_QUEUE_PROPERTIES",                 // -35
00033     "CL_INVALID_COMMAND_QUEUE",                    // -36
00034     "CL_INVALID_HOST_PTR",                         // -37
00035     "CL_INVALID_MEM_OBJECT",                       // -38
00036     "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR",          // -39
00037     "CL_INVALID_IMAGE_SIZE",                       // -40
00038     "CL_INVALID_SAMPLER",                          // -41
00039     "CL_INVALID_BINARY",                           // -42
00040     "CL_INVALID_BUILD_OPTIONS",                    // -43
00041     "CL_INVALID_PROGRAM",                          // -44
00042     "CL_INVALID_PROGRAM_EXECUTABLE",               // -45
00043     "CL_INVALID_KERNEL_NAME",                      // -46
00044     "CL_INVALID_KERNEL_DEFINITION",                // -47
00045     "CL_INVALID_KERNEL",                           // -48
00046     "CL_INVALID_ARG_INDEX",                        // -49
00047     "CL_INVALID_ARG_VALUE",                        // -50
00048     "CL_INVALID_ARG_SIZE",                         // -51
00049     "CL_INVALID_KERNEL_ARGS",                      // -52
00050     "CL_INVALID_WORK_DIMENSION",                   // -53
00051     "CL_INVALID_WORK_GROUP_SIZE",                  // -54
00052     "CL_INVALID_WORK_ITEM_SIZE",                   // -55
00053     "CL_INVALID_GLOBAL_OFFSET",                    // -56
00054     "CL_INVALID_EVENT_WAIT_LIST",                  // -57
00055     "CL_INVALID_EVENT",                            // -58
00056     "CL_INVALID_OPERATION",                        // -59
00057     "CL_INVALID_GL_OBJECT",                        // -60
00058     "CL_INVALID_BUFFER_SIZE",                      // -61
00059     "CL_INVALID_MIP_LEVEL",                        // -62
00060     "CL_INVALID_GLOBAL_WORK_SIZE",                 // -63
00061     "CL_INVALID_PROPERTY",                         // -64
00062 };
00063 
00064 static const char* CL_err_string(int errno)
00065 {
00066     const int index = -errno;
00067     return ((index >=0 && index < 65) ? CL_H_defines[index] : "Unknown CL_error code"); 
00068 }
00069 
00072 struct CLExcept : public std::exception
00073 {
00074     const char* errstr_;
00075     const char* what() const throw() {return errstr_;}
00076     CLExcept(const char* errstr) : errstr_(errstr) {}
00078     CLExcept(int err) : errstr_(CL_err_string(err)) {}
00079 };
00080 
00081 #endif // MULTIQUAD_CLTOOLS_H
 All Classes Functions Variables