summaryrefslogtreecommitdiff
path: root/opencl/source
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2016-10-18 23:53:44 +0200
committerTomaž Vajngerl <quikee@gmail.com>2016-10-24 08:35:15 +0000
commit21e8ed8b5f032f63012a7ee84bce64fac218154f (patch)
tree7de6ad976673c2ed28bf801c383436e9cd6e8007 /opencl/source
parent38b895cddcff51b6cfb47c6b3bbb2044a6d7a6dd (diff)
tdf#103395 opencl: don't initialize OpenCL when disabled
If SAL_DISABLE_OPENCL is set we don't want to do any kind of OpenCL initialization. Put an extra guard in fillOpenCLInfo (and similar methods in opencl package) to prevent that. Put the check if OpenCL can be used into one place which checks SAL_DISABLE_OPENCL and UseOpenCL in configuration. Change-Id: Icc216d4299d3a7942843117ab9b9411de8075b11 Reviewed-on: https://gerrit.libreoffice.org/30025 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'opencl/source')
-rw-r--r--opencl/source/openclwrapper.cxx21
1 files changed, 18 insertions, 3 deletions
diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx
index c876133e1605..141ce8fbc463 100644
--- a/opencl/source/openclwrapper.cxx
+++ b/opencl/source/openclwrapper.cxx
@@ -32,6 +32,8 @@
#include <cmath>
+#include <officecfg/Office/Common.hxx>
+
#ifdef _WIN32
#include <prewin.h>
#include <postwin.h>
@@ -64,7 +66,8 @@ namespace opencl {
GPUEnv gpuEnv;
sal_uInt64 kernelFailures = 0;
-namespace {
+namespace
+{
bool bIsInited = false;
@@ -704,7 +707,9 @@ bool createPlatformInfo(cl_platform_id nPlatformId, OpenCLPlatformInfo& rPlatfor
const std::vector<OpenCLPlatformInfo>& fillOpenCLInfo()
{
static std::vector<OpenCLPlatformInfo> aPlatforms;
- if(!aPlatforms.empty())
+
+ // return early if we already initialized or can't use OpenCL
+ if (!aPlatforms.empty() || !canUseOpenCL())
return aPlatforms;
int status = clewInit(OPENCL_DLL_NAME);
@@ -785,9 +790,16 @@ void findDeviceInfoFromDeviceId(cl_device_id aDeviceId, size_t& rDeviceId, size_
}
+bool canUseOpenCL()
+{
+ if (getenv("SAL_DISABLE_OPENCL") || !officecfg::Office::Common::Misc::UseOpenCL::get())
+ return false;
+ return true;
+}
+
bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEvaluation, OUString& rOutSelectedDeviceVersionIDString)
{
- if(fillOpenCLInfo().empty() || getenv("SAL_DISABLE_OPENCL"))
+ if (!canUseOpenCL() || fillOpenCLInfo().empty())
return false;
cl_device_id pDeviceId = nullptr;
@@ -863,6 +875,9 @@ bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEv
void getOpenCLDeviceInfo(size_t& rDeviceId, size_t& rPlatformId)
{
+ if (!canUseOpenCL())
+ return;
+
int status = clewInit(OPENCL_DLL_NAME);
if (status < 0)
return;