diff options
-rw-r--r-- | include/opencl/openclwrapper.hxx | 6 | ||||
-rw-r--r-- | opencl/source/openclwrapper.cxx | 58 | ||||
-rw-r--r-- | sc/source/core/opencl/opbase.cxx | 62 | ||||
-rw-r--r-- | sc/source/core/opencl/opbase.hxx | 3 |
4 files changed, 67 insertions, 62 deletions
diff --git a/include/opencl/openclwrapper.hxx b/include/opencl/openclwrapper.hxx index 9fde5d63ccc3..75ecbc85a606 100644 --- a/include/opencl/openclwrapper.hxx +++ b/include/opencl/openclwrapper.hxx @@ -79,6 +79,12 @@ OPENCL_DLLPUBLIC void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId */ OPENCL_DLLPUBLIC void setOpenCLCmdQueuePosition( int nPos ); +/** + * Return a textual representation of an OpenCL error code. + * (Currently the symbolic name sans the CL_ prefix.) + */ +OPENCL_DLLPUBLIC const char* errorString(cl_int nError); + } #endif diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx index db53a0436349..658e2756158e 100644 --- a/opencl/source/openclwrapper.cxx +++ b/opencl/source/openclwrapper.cxx @@ -854,6 +854,64 @@ void setOpenCLCmdQueuePosition( int nPos ) gpuEnv.mnCmdQueuePos = nPos; } +const char* errorString(cl_int nError) +{ +#define CASE(val) case CL_##val: return #val + switch (nError) + { + CASE(SUCCESS); + CASE(DEVICE_NOT_FOUND); + CASE(DEVICE_NOT_AVAILABLE); + CASE(COMPILER_NOT_AVAILABLE); + CASE(MEM_OBJECT_ALLOCATION_FAILURE); + CASE(OUT_OF_RESOURCES); + CASE(OUT_OF_HOST_MEMORY); + CASE(PROFILING_INFO_NOT_AVAILABLE); + CASE(MEM_COPY_OVERLAP); + CASE(IMAGE_FORMAT_MISMATCH); + CASE(IMAGE_FORMAT_NOT_SUPPORTED); + CASE(BUILD_PROGRAM_FAILURE); + CASE(MAP_FAILURE); + CASE(INVALID_VALUE); + CASE(INVALID_DEVICE_TYPE); + CASE(INVALID_PLATFORM); + CASE(INVALID_DEVICE); + CASE(INVALID_CONTEXT); + CASE(INVALID_QUEUE_PROPERTIES); + CASE(INVALID_COMMAND_QUEUE); + CASE(INVALID_HOST_PTR); + CASE(INVALID_MEM_OBJECT); + CASE(INVALID_IMAGE_FORMAT_DESCRIPTOR); + CASE(INVALID_IMAGE_SIZE); + CASE(INVALID_SAMPLER); + CASE(INVALID_BINARY); + CASE(INVALID_BUILD_OPTIONS); + CASE(INVALID_PROGRAM); + CASE(INVALID_PROGRAM_EXECUTABLE); + CASE(INVALID_KERNEL_NAME); + CASE(INVALID_KERNEL_DEFINITION); + CASE(INVALID_KERNEL); + CASE(INVALID_ARG_INDEX); + CASE(INVALID_ARG_VALUE); + CASE(INVALID_ARG_SIZE); + CASE(INVALID_KERNEL_ARGS); + CASE(INVALID_WORK_DIMENSION); + CASE(INVALID_WORK_GROUP_SIZE); + CASE(INVALID_WORK_ITEM_SIZE); + CASE(INVALID_GLOBAL_OFFSET); + CASE(INVALID_EVENT_WAIT_LIST); + CASE(INVALID_EVENT); + CASE(INVALID_OPERATION); + CASE(INVALID_GL_OBJECT); + CASE(INVALID_BUFFER_SIZE); + CASE(INVALID_MIP_LEVEL); + CASE(INVALID_GLOBAL_WORK_SIZE); + default: + return "Unknown OpenCL error code"; + } +#undef CASE +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/opencl/opbase.cxx b/sc/source/core/opencl/opbase.cxx index bf3f8d8db487..1c24c12691f7 100644 --- a/sc/source/core/opencl/opbase.cxx +++ b/sc/source/core/opencl/opbase.cxx @@ -7,6 +7,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include <opencl/openclwrapper.hxx> + #include "opbase.hxx" using namespace formula; @@ -20,65 +22,7 @@ UnhandledToken::UnhandledToken( OpenCLError::OpenCLError( cl_int err, const std::string& fn, int ln ) : mError(err), mFile(fn), mLineNumber(ln) { - SAL_INFO("sc.opencl", "OpenCLError:" << mError << ": " << strerror(mError)); -} - -const char* OpenCLError::strerror( cl_int i ) const -{ -#define CASE(val) case val: return #val - switch (i) - { - CASE(CL_SUCCESS); - CASE(CL_DEVICE_NOT_FOUND); - CASE(CL_DEVICE_NOT_AVAILABLE); - CASE(CL_COMPILER_NOT_AVAILABLE); - CASE(CL_MEM_OBJECT_ALLOCATION_FAILURE); - CASE(CL_OUT_OF_RESOURCES); - CASE(CL_OUT_OF_HOST_MEMORY); - CASE(CL_PROFILING_INFO_NOT_AVAILABLE); - CASE(CL_MEM_COPY_OVERLAP); - CASE(CL_IMAGE_FORMAT_MISMATCH); - CASE(CL_IMAGE_FORMAT_NOT_SUPPORTED); - CASE(CL_BUILD_PROGRAM_FAILURE); - CASE(CL_MAP_FAILURE); - CASE(CL_INVALID_VALUE); - CASE(CL_INVALID_DEVICE_TYPE); - CASE(CL_INVALID_PLATFORM); - CASE(CL_INVALID_DEVICE); - CASE(CL_INVALID_CONTEXT); - CASE(CL_INVALID_QUEUE_PROPERTIES); - CASE(CL_INVALID_COMMAND_QUEUE); - CASE(CL_INVALID_HOST_PTR); - CASE(CL_INVALID_MEM_OBJECT); - CASE(CL_INVALID_IMAGE_FORMAT_DESCRIPTOR); - CASE(CL_INVALID_IMAGE_SIZE); - CASE(CL_INVALID_SAMPLER); - CASE(CL_INVALID_BINARY); - CASE(CL_INVALID_BUILD_OPTIONS); - CASE(CL_INVALID_PROGRAM); - CASE(CL_INVALID_PROGRAM_EXECUTABLE); - CASE(CL_INVALID_KERNEL_NAME); - CASE(CL_INVALID_KERNEL_DEFINITION); - CASE(CL_INVALID_KERNEL); - CASE(CL_INVALID_ARG_INDEX); - CASE(CL_INVALID_ARG_VALUE); - CASE(CL_INVALID_ARG_SIZE); - CASE(CL_INVALID_KERNEL_ARGS); - CASE(CL_INVALID_WORK_DIMENSION); - CASE(CL_INVALID_WORK_GROUP_SIZE); - CASE(CL_INVALID_WORK_ITEM_SIZE); - CASE(CL_INVALID_GLOBAL_OFFSET); - CASE(CL_INVALID_EVENT_WAIT_LIST); - CASE(CL_INVALID_EVENT); - CASE(CL_INVALID_OPERATION); - CASE(CL_INVALID_GL_OBJECT); - CASE(CL_INVALID_BUFFER_SIZE); - CASE(CL_INVALID_MIP_LEVEL); - CASE(CL_INVALID_GLOBAL_WORK_SIZE); - default: - return "Unknown OpenCL error code"; - } -#undef CASE + SAL_INFO("sc.opencl", "OpenCL error: " << ::opencl::errorString(mError)); } Unhandled::Unhandled( const std::string& fn, int ln ) : diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx index 866d7dda142b..b4c4493869fb 100644 --- a/sc/source/core/opencl/opbase.hxx +++ b/sc/source/core/opencl/opbase.hxx @@ -41,9 +41,6 @@ public: /// Failed in marshaling class OpenCLError { -private: - const char* strerror( cl_int i ) const; - public: OpenCLError( cl_int err, const std::string& fn, int ln ); |