diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2013-09-17 14:43:59 -0400 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2013-09-19 17:03:23 +0200 |
commit | 58e62a7954dc04f1174f8143ed81828a476e8b62 (patch) | |
tree | ca686a0e77e166ea788489d6f68b1c6dcf47a6cf /sc/source/core/opencl/openclwrapper.cxx | |
parent | deed1ca901896744a9cf859d390a5a592ba37041 (diff) |
Compile kernels for real.
Change-Id: I7c5e6707e6f733b26d5bb6d6b0d48b0f338625bc
Diffstat (limited to 'sc/source/core/opencl/openclwrapper.cxx')
-rw-r--r-- | sc/source/core/opencl/openclwrapper.cxx | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index a0c1e7a49fb7..c46866955291 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -2851,8 +2851,33 @@ bool switchOpenclDevice(const OUString* pDevice, bool bAutoSelect) return !OpenclDevice::initOpenclRunEnv(0); } -void compileKernels() +void compileKernels(const OUString* pDeviceId) { + if (!pDeviceId) + return; + + if (pDeviceId->isEmpty()) + return; + + if (!switchOpenclDevice(pDeviceId, false)) + return; + + cl_program pProgram = OpenclDevice::gpuEnv.mpArryPrograms[0]; + if (!pProgram) + return; + + cl_int nStatus; + for (size_t i = 0, n = OpenclDevice::gpuEnv.maKernels.size(); i < n; ++i) + { + Kernel& r = OpenclDevice::gpuEnv.maKernels[i]; + if (r.mpKernel) + continue; + + r.mpKernel = clCreateKernel(pProgram, r.mpName, &nStatus); + if (nStatus != CL_SUCCESS) + r.mpKernel = NULL; + } + } }} |