summaryrefslogtreecommitdiff
path: root/opencl/source/openclwrapper.cxx
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2016-07-11 15:12:38 +0100
committerMichael Meeks <michael.meeks@collabora.com>2016-07-12 01:40:56 +0100
commitc5caed66544c11596ba190722873ed0591d7d251 (patch)
treeab68c403990225994219609e7782c5b181b24c0a /opencl/source/openclwrapper.cxx
parenta125527a0d1a81a3f1089cebbb91dbc5e7890b68 (diff)
desktop: validate OpenCL drivers before use.private/kendy/testcl
OpenCL validation needs to happen before drivers are used in anger. This should isolate any crashes, and/or mis-behavior to We use app version, CL driver version and file time-stamp to trigger re-testing the device. If anything fails: hard disable OpenCL. We use an opencl validation sheet (cl-test.ods) and install it. It is a minimal CL set - it requires a very short formula group length, and combines several CL functions into few formulae to test more. The sheet structure, in particular the manual squaring / SQRT - is necessary to stick within the default CL subset, and ensure that formulae are CL enabled from the root of the dependency tree up. Change-Id: I18682dbdf9a8ba9c16d52bad4447e9acce97f0a3
Diffstat (limited to 'opencl/source/openclwrapper.cxx')
-rw-r--r--opencl/source/openclwrapper.cxx8
1 files changed, 6 insertions, 2 deletions
diff --git a/opencl/source/openclwrapper.cxx b/opencl/source/openclwrapper.cxx
index db6c7e51c09a..2aecdde9338f 100644
--- a/opencl/source/openclwrapper.cxx
+++ b/opencl/source/openclwrapper.cxx
@@ -268,6 +268,8 @@ bool initOpenCLAttr( OpenCLEnv * env )
return false;
}
+}
+
void releaseOpenCLEnv( GPUEnv *gpuInfo )
{
OpenCLZone zone;
@@ -298,6 +300,8 @@ void releaseOpenCLEnv( GPUEnv *gpuInfo )
return;
}
+namespace {
+
bool buildProgram(const char* buildOption, GPUEnv* gpuInfo, int idx)
{
cl_int clStatus;
@@ -701,7 +705,7 @@ void findDeviceInfoFromDeviceId(cl_device_id aDeviceId, size_t& rDeviceId, size_
bool switchOpenCLDevice(const OUString* pDevice, bool bAutoSelect, bool bForceEvaluation, OUString& rOutSelectedDeviceVersionIDString)
{
- if(fillOpenCLInfo().empty())
+ if(fillOpenCLInfo().empty() || getenv("SAL_DISABLE_OPENCL"))
return false;
cl_device_id pDeviceId = nullptr;
@@ -884,7 +888,7 @@ const char* errorString(cl_int nError)
bool GPUEnv::isOpenCLEnabled()
{
- return gpuEnv.mpDevID;
+ return gpuEnv.mpDevID && gpuEnv.mpContext;
}
}