summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-12-08 23:40:44 +0100
committerStephan Bergmann <sbergman@redhat.com>2013-12-08 23:40:44 +0100
commit378d71201bc1fedf9f602ceaef8c68ab51a29dd6 (patch)
treef9899ee650a56f37272829b4e249fc0a23335cfa /sc
parent9a8c70bc94f3d62e9a0dd5efd896681bec3f3160 (diff)
Improve failure log
Change-Id: Icb0f0ec2e4660122d524cf7a7025d1b7f225b4cd
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/opencl/formulagroupcl.cxx46
1 files changed, 46 insertions, 0 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 140bfd5e0cff..665ab4640f8c 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -2694,7 +2694,53 @@ void DynamicKernel::CreateKernel(void)
err = clBuildProgram(mpProgram, 1,
OpenclDevice::gpuEnv.mpArryDevsID, "", NULL, NULL);
if (err != CL_SUCCESS)
+ {
+#if OSL_DEBUG_LEVEL > 0
+ if (err == CL_BUILD_PROGRAM_FAILURE)
+ {
+ cl_build_status stat;
+ cl_int e = clGetProgramBuildInfo(
+ mpProgram, OpenclDevice::gpuEnv.mpArryDevsID[0],
+ CL_PROGRAM_BUILD_STATUS, sizeof (cl_build_status),
+ &stat, 0);
+ SAL_WARN_IF(
+ e != CL_SUCCESS, "sc.opencl",
+ "after CL_BUILD_PROGRAM_FAILURE,"
+ " clGetProgramBuildInfo(CL_PROGRAM_BUILD_STATUS)"
+ " fails with " << e);
+ if (e == CL_SUCCESS)
+ {
+ size_t n;
+ e = clGetProgramBuildInfo(
+ mpProgram, OpenclDevice::gpuEnv.mpArryDevsID[0],
+ CL_PROGRAM_BUILD_LOG, 0, 0, &n);
+ SAL_WARN_IF(
+ e != CL_SUCCESS || n == 0, "sc.opencl",
+ "after CL_BUILD_PROGRAM_FAILURE,"
+ " clGetProgramBuildInfo(CL_PROGRAM_BUILD_LOG)"
+ " fails with " << e << ", n=" << n);
+ if (e == CL_SUCCESS && n != 0)
+ {
+ std::vector<char> log(n);
+ e = clGetProgramBuildInfo(
+ mpProgram, OpenclDevice::gpuEnv.mpArryDevsID[0],
+ CL_PROGRAM_BUILD_LOG, n, &log[0], 0);
+ SAL_WARN_IF(
+ e != CL_SUCCESS || n == 0, "sc.opencl",
+ "after CL_BUILD_PROGRAM_FAILURE,"
+ " clGetProgramBuildInfo("
+ "CL_PROGRAM_BUILD_LOG) fails with " << e);
+ if (e == CL_SUCCESS)
+ SAL_WARN(
+ "sc.opencl",
+ "CL_BUILD_PROGRAM_FAILURE, status " << stat
+ << ", log \"" << &log[0] << "\"");
+ }
+ }
+ }
+#endif
throw OpenCLError(err);
+ }
// Generate binary out of compiled kernel.
OpenclDevice::generatBinFromKernelSource(mpProgram,
(mKernelSignature+GetMD5()).c_str());