b24387f1eb28ea2a3d4fc1681d68201948b4e82c7838344a88937312f99744af850f8b2fba4190c4
 
 
1
#ifndef SPH_CLUTIL_H
 
 
2
#define SPH_CLUTIL_H
 
 
3
 
 
 
4
#include <CL/cl.h>
 
 
5
 
 
 
6
namespace Squishy { namespace CL {
 
 
7
    const char* GetCLErrorString(cl_int err) {
 
 
8
        switch (err) {
 
 
9
        case CL_SUCCESS:                            return "Success!";
 
 
10
        case CL_DEVICE_NOT_FOUND:                   return "Device not found";
 
 
11
        case CL_DEVICE_NOT_AVAILABLE:               return "Device not available";
 
 
12
        case CL_COMPILER_NOT_AVAILABLE:             return "Compiler not available";
 
 
13
        case CL_MEM_OBJECT_ALLOCATION_FAILURE:      return "Memory object allocation failure";
 
 
14
        case CL_OUT_OF_RESOURCES:                   return "Out of resources";
 
 
15
        case CL_OUT_OF_HOST_MEMORY:                 return "Out of host memory";
 
 
16
        case CL_PROFILING_INFO_NOT_AVAILABLE:       return "Profiling information not available";
 
 
17
        case CL_MEM_COPY_OVERLAP:                   return "Memory copy overlap";
 
 
18
        case CL_IMAGE_FORMAT_MISMATCH:              return "Image format mismatch";
 
 
19
        case CL_IMAGE_FORMAT_NOT_SUPPORTED:         return "Image format not supported";
 
 
20
        case CL_BUILD_PROGRAM_FAILURE:              return "Program build failure";
 
 
21
        case CL_MAP_FAILURE:                        return "Map failure";
 
 
22
        case CL_INVALID_VALUE:                      return "Invalid value";
 
 
23
        case CL_INVALID_DEVICE_TYPE:                return "Invalid device type";
 
 
24
        case CL_INVALID_PLATFORM:                   return "Invalid platform";
 
 
25
        case CL_INVALID_DEVICE:                     return "Invalid device";
 
 
26
        case CL_INVALID_CONTEXT:                    return "Invalid context";
 
 
27
        case CL_INVALID_QUEUE_PROPERTIES:           return "Invalid queue properties";
 
 
28
        case CL_INVALID_COMMAND_QUEUE:              return "Invalid command queue";
 
 
29
        case CL_INVALID_HOST_PTR:                   return "Invalid host pointer";
 
 
30
        case CL_INVALID_MEM_OBJECT:                 return "Invalid memory object";
 
 
31
        case CL_INVALID_IMAGE_FORMAT_DESCRIPTOR:    return "Invalid image format descriptor";
 
 
32
        case CL_INVALID_IMAGE_SIZE:                 return "Invalid image size";
 
 
33
        case CL_INVALID_SAMPLER:                    return "Invalid sampler";
 
 
34
        case CL_INVALID_BINARY:                     return "Invalid binary";
 
 
35
        case CL_INVALID_BUILD_OPTIONS:              return "Invalid build options";
 
 
36
        case CL_INVALID_PROGRAM:                    return "Invalid program";
 
 
37
        case CL_INVALID_PROGRAM_EXECUTABLE:         return "Invalid program executable";
 
 
38
        case CL_INVALID_KERNEL_NAME:                return "Invalid kernel name";
 
 
39
        case CL_INVALID_KERNEL_DEFINITION:          return "Invalid kernel definition";
 
 
40
        case CL_INVALID_KERNEL:                     return "Invalid kernel";
 
 
41
        case CL_INVALID_ARG_INDEX:                  return "Invalid argument index";
 
 
42
        case CL_INVALID_ARG_VALUE:                  return "Invalid argument value";
 
 
43
        case CL_INVALID_ARG_SIZE:                   return "Invalid argument size";
 
 
44
        case CL_INVALID_KERNEL_ARGS:                return "Invalid kernel arguments";
 
 
45
        case CL_INVALID_WORK_DIMENSION:             return "Invalid work dimension";
 
 
46
        case CL_INVALID_WORK_GROUP_SIZE:            return "Invalid work group size";
 
 
47
        case CL_INVALID_WORK_ITEM_SIZE:             return "Invalid work item size";
 
 
48
        case CL_INVALID_GLOBAL_OFFSET:              return "Invalid global offset";
 
 
49
        case CL_INVALID_EVENT_WAIT_LIST:            return "Invalid event wait list";
 
 
50
        case CL_INVALID_EVENT:                      return "Invalid event";
 
 
51
        case CL_INVALID_OPERATION:                  return "Invalid operation";
 
 
52
        case CL_INVALID_GL_OBJECT:                  return "Invalid OpenGL object";
 
 
53
        case CL_INVALID_BUFFER_SIZE:                return "Invalid buffer size";
 
 
54
        case CL_INVALID_MIP_LEVEL:                  return "Invalid mip-map level";
 
 
55
        default: return "Unknown error";
 
 
56
        }
 
 
57
    }
 
 
58
 
 
 
59
} }
 
 
60
 
 
 
61
#define CL_SUCCESS_OR_ELSE(err, whatElse) \
 
 
62
    if ((err) != CL_SUCCESS) \
 
 
63
    { \
 
 
64
        printf("CL ERROR: %s\n", Squishy::CL::GetCLErrorString(err)); \
 
 
65
        whatElse; \
 
 
66
    }
 
 
67
 
 
 
68
#endif