Kaydet (Commit) 43617f14 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Move OpenCLError::strerror() from sc to opencl, and rename to errorString()

There is nothing Calc-specific in this function, and surely it will be good to
output OpenCL errors symbolically also in the opencl module.

Change-Id: Ibe7d0d036f24dd87e06b8290224e1033dda0f3d1
üst 7d707644
...@@ -79,6 +79,12 @@ OPENCL_DLLPUBLIC void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId ...@@ -79,6 +79,12 @@ OPENCL_DLLPUBLIC void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId
*/ */
OPENCL_DLLPUBLIC void setOpenCLCmdQueuePosition( int nPos ); 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 #endif
......
...@@ -854,6 +854,64 @@ void setOpenCLCmdQueuePosition( int nPos ) ...@@ -854,6 +854,64 @@ void setOpenCLCmdQueuePosition( int nPos )
gpuEnv.mnCmdQueuePos = 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: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/ */
#include <opencl/openclwrapper.hxx>
#include "opbase.hxx" #include "opbase.hxx"
using namespace formula; using namespace formula;
...@@ -20,65 +22,7 @@ UnhandledToken::UnhandledToken( ...@@ -20,65 +22,7 @@ UnhandledToken::UnhandledToken(
OpenCLError::OpenCLError( cl_int err, const std::string& fn, int ln ) : OpenCLError::OpenCLError( cl_int err, const std::string& fn, int ln ) :
mError(err), mFile(fn), mLineNumber(ln) mError(err), mFile(fn), mLineNumber(ln)
{ {
SAL_INFO("sc.opencl", "OpenCLError:" << mError << ": " << strerror(mError)); SAL_INFO("sc.opencl", "OpenCL error: " << ::opencl::errorString(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
} }
Unhandled::Unhandled( const std::string& fn, int ln ) : Unhandled::Unhandled( const std::string& fn, int ln ) :
......
...@@ -41,9 +41,6 @@ public: ...@@ -41,9 +41,6 @@ public:
/// Failed in marshaling /// Failed in marshaling
class OpenCLError class OpenCLError
{ {
private:
const char* strerror( cl_int i ) const;
public: public:
OpenCLError( cl_int err, const std::string& fn, int ln ); OpenCLError( cl_int err, const std::string& fn, int ln );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment