diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2016-10-18 23:53:44 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2016-10-24 08:35:15 +0000 |
commit | 21e8ed8b5f032f63012a7ee84bce64fac218154f (patch) | |
tree | 7de6ad976673c2ed28bf801c383436e9cd6e8007 | |
parent | 38b895cddcff51b6cfb47c6b3bbb2044a6d7a6dd (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>
-rw-r--r-- | desktop/source/app/opencl.cxx | 4 | ||||
-rw-r--r-- | include/opencl/openclwrapper.hxx | 5 | ||||
-rw-r--r-- | opencl/source/openclwrapper.cxx | 21 |
3 files changed, 23 insertions, 7 deletions
diff --git a/desktop/source/app/opencl.cxx b/desktop/source/app/opencl.cxx index 6d22e920535c..f436971b5d61 100644 --- a/desktop/source/app/opencl.cxx +++ b/desktop/source/app/opencl.cxx @@ -119,9 +119,7 @@ bool testOpenCLCompute(const Reference< XDesktop2 > &xDesktop, const OUString &r void Desktop::CheckOpenCLCompute(const Reference< XDesktop2 > &xDesktop) { - if (getenv("SAL_DISABLE_OPENCL") || - Application::IsSafeModeEnabled() || - !officecfg::Office::Common::Misc::UseOpenCL::get()) + if (!opencl::canUseOpenCL() || Application::IsSafeModeEnabled()) return; SAL_INFO("opencl", "Initiating test of OpenCL device"); diff --git a/include/opencl/openclwrapper.hxx b/include/opencl/openclwrapper.hxx index 233412fdb4eb..5f71b2a205f3 100644 --- a/include/opencl/openclwrapper.hxx +++ b/include/opencl/openclwrapper.hxx @@ -26,7 +26,8 @@ #include <cstdio> -namespace opencl { +namespace opencl +{ struct KernelEnv { @@ -56,6 +57,8 @@ struct OPENCL_DLLPUBLIC GPUEnv extern OPENCL_DLLPUBLIC GPUEnv gpuEnv; extern OPENCL_DLLPUBLIC sal_uInt64 kernelFailures; +OPENCL_DLLPUBLIC bool canUseOpenCL(); + OPENCL_DLLPUBLIC bool generatBinFromKernelSource( cl_program program, const char * clFileName ); OPENCL_DLLPUBLIC bool buildProgramFromBinary(const char* buildOption, GPUEnv* gpuEnv, const char* filename, int idx); OPENCL_DLLPUBLIC void setKernelEnv( KernelEnv *envInfo ); 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; |