diff options
Diffstat (limited to 'sc/source/core/opencl')
-rw-r--r-- | sc/source/core/opencl/formulagroupcl.cxx | 15 | ||||
-rw-r--r-- | sc/source/core/opencl/opbase.hxx | 2 |
2 files changed, 15 insertions, 2 deletions
diff --git a/sc/source/core/opencl/formulagroupcl.cxx b/sc/source/core/opencl/formulagroupcl.cxx index 8a0d22529007..ab43f2f3092a 100644 --- a/sc/source/core/opencl/formulagroupcl.cxx +++ b/sc/source/core/opencl/formulagroupcl.cxx @@ -2598,6 +2598,13 @@ public: for (const auto & rSubArgument : mvSubArguments) rSubArgument->DumpInlineFun(decls, funs); } + virtual bool IsEmpty() const override + { + for (const auto & rSubArgument : mvSubArguments) + if( !rSubArgument->IsEmpty()) + return false; + return true; + } virtual ~DynamicKernelSoPArguments() override { if (mpClmem2) @@ -3887,8 +3894,12 @@ void DynamicKernel::CodeGen() mSyms.DumpSlidingWindowFunctions(decl); mKernelSignature = DK->DumpOpName(); decl << "__kernel void DynamicKernel" << mKernelSignature; - decl << "(__global double *result, "; - DK->GenSlidingWindowDecl(decl); + decl << "(__global double *result"; + if( !DK->IsEmpty()) + { + decl << ", "; + DK->GenSlidingWindowDecl(decl); + } decl << ") {\n\tint gid0 = get_global_id(0);\n\tresult[gid0] = " << DK->GenSlidingWindowDeclRef() << ";\n}\n"; mFullProgramSrc = decl.str(); diff --git a/sc/source/core/opencl/opbase.hxx b/sc/source/core/opencl/opbase.hxx index 112589a6a5f6..1e36e7c1a29f 100644 --- a/sc/source/core/opencl/opbase.hxx +++ b/sc/source/core/opencl/opbase.hxx @@ -140,6 +140,8 @@ public: virtual void DumpInlineFun( std::set<std::string>&, std::set<std::string>& ) const; const std::string& GetName() const; virtual bool NeedParallelReduction() const; + /// If there's actually no argument, i.e. it expands to no code. + virtual bool IsEmpty() const { return false; } protected: const ScCalcConfig& mCalcConfig; |