| | 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 |