diff options
-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; |