summaryrefslogtreecommitdiff
path: root/sc/source/core/opencl/formulagroupcl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/opencl/formulagroupcl.cxx')
-rw-r--r--sc/source/core/opencl/formulagroupcl.cxx15
1 files changed, 12 insertions, 3 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx
index 36981a7c8a0d..618fcc9f4d11 100644
--- a/sc/source/core/opencl/formulagroupcl.cxx
+++ b/sc/source/core/opencl/formulagroupcl.cxx
@@ -1457,7 +1457,7 @@ public:
DynamicKernelArgument *Arg = mvSubArguments[0].get();
DynamicKernelSlidingArgument<VectorRef> *slidingArgPtr =
dynamic_cast< DynamicKernelSlidingArgument<VectorRef> *> (Arg);
- cl_mem mpClmem2;
+ mpClmem2 = NULL;
if (OpSumCodeGen->NeedReductionKernel())
{
@@ -1518,7 +1518,7 @@ public:
err = clFinish(kEnv.mpkCmdQueue);
if (CL_SUCCESS != err)
throw OpenCLError(err);
-
+ clReleaseKernel(redKernel);
// Pass mpClmem2 to the "real" kernel
err = clSetKernelArg(k, argno, sizeof(cl_mem), (void *)&mpClmem2);
if (CL_SUCCESS != err)
@@ -1615,7 +1615,16 @@ public:
for (unsigned i = 0; i < mvSubArguments.size(); i++)
mvSubArguments[i]->DumpInlineFun(decls,funs);
}
+ ~DynamicKernelSoPArguments()
+ {
+ if (mpClmem2)
+ {
+ clReleaseMemObject(mpClmem2);
+ mpClmem2 = NULL;
+ }
+ }
private:
+ cl_mem mpClmem2;
SubArgumentsType mvSubArguments;
boost::shared_ptr<SlidingFunctionBase> mpCodeGen;
};
@@ -1675,7 +1684,7 @@ DynamicKernelArgument *VectorRefFactory(const std::string &s,
DynamicKernelSoPArguments::DynamicKernelSoPArguments(
const std::string &s, const FormulaTreeNodeRef& ft, SlidingFunctionBase* pCodeGen) :
- DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen)
+ DynamicKernelArgument(s, ft), mpCodeGen(pCodeGen),mpClmem2(NULL)
{
size_t nChildren = ft->Children.size();