summaryrefslogtreecommitdiff
path: root/sc/source/core/opencl/openclwrapper.cxx
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2013-09-17 14:43:59 -0400
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2013-09-19 17:03:23 +0200
commit58e62a7954dc04f1174f8143ed81828a476e8b62 (patch)
treeca686a0e77e166ea788489d6f68b1c6dcf47a6cf /sc/source/core/opencl/openclwrapper.cxx
parentdeed1ca901896744a9cf859d390a5a592ba37041 (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.cxx27
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;
+ }
+
}
}}