diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-12-08 23:40:44 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-12-08 23:40:44 +0100 |
commit | 378d71201bc1fedf9f602ceaef8c68ab51a29dd6 (patch) | |
tree | f9899ee650a56f37272829b4e249fc0a23335cfa /sc | |
parent | 9a8c70bc94f3d62e9a0dd5efd896681bec3f3160 (diff) |
Improve failure log
Change-Id: Icb0f0ec2e4660122d524cf7a7025d1b7f225b4cd
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 46 |
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()); |