summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/opencl/openclwrapper.hxx6
-rw-r--r--opencl/source/openclwrapper.cxx58
-rw-r--r--sc/source/core/opencl/opbase.cxx62
-rw-r--r--sc/source/core/opencl/opbase.hxx3
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 );