From 4eb16122c0489604bf800be8721c12b582a2a915 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Wed, 5 Nov 2014 18:41:39 +0300 Subject: [PATCH] ocl: change processing of OpenCL failures disable "unwanted" messages --- modules/core/src/ocl.cpp | 16 +++++++++++----- modules/ts/src/ocl_test.cpp | 3 +++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 9f8489e131..5e18e035ec 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -1453,7 +1453,7 @@ bool useOpenCL() { try { - data->useOpenCL = (int)haveOpenCL() && Device::getDefault().ptr() != NULL; + data->useOpenCL = (int)haveOpenCL() && Device::getDefault().ptr() && Device::getDefault().available(); } catch (...) { @@ -2130,7 +2130,8 @@ const Device& Device::getDefault() { const Context& ctx = Context::getDefault(); int idx = coreTlsData.get()->device; - return ctx.device(idx); + const Device& device = ctx.device(idx); + return device; } ////////////////////////////////////// Context /////////////////////////////////////////////////// @@ -2210,7 +2211,10 @@ static cl_device_id selectOpenCLDevice() std::vector deviceTypes; const char* configuration = getenv("OPENCV_OPENCL_DEVICE"); - if (configuration && !parseOpenCLDeviceConfiguration(std::string(configuration), platform, deviceTypes, deviceName)) + if (configuration && + (strcmp(configuration, "disabled") == 0 || + !parseOpenCLDeviceConfiguration(std::string(configuration), platform, deviceTypes, deviceName) + )) return NULL; bool isID = false; @@ -2339,14 +2343,16 @@ static cl_device_id selectOpenCLDevice() } not_found: - std::cerr << "ERROR: Required OpenCL device not found, check configuration: " << (configuration == NULL ? "" : configuration) << std::endl + if (!configuration) + return NULL; // suppress messages on stderr + + std::cerr << "ERROR: Requested OpenCL device not found, check configuration: " << (configuration == NULL ? "" : configuration) << std::endl << " Platform: " << (platform.length() == 0 ? "any" : platform) << std::endl << " Device types: "; for (size_t t = 0; t < deviceTypes.size(); t++) std::cerr << deviceTypes[t] << " "; std::cerr << std::endl << " Device name: " << (deviceName.length() == 0 ? "any" : deviceName) << std::endl; - CV_Error(CL_INVALID_DEVICE, "Requested OpenCL device is not found"); return NULL; } #endif diff --git a/modules/ts/src/ocl_test.cpp b/modules/ts/src/ocl_test.cpp index d429d4bc8c..270dec9145 100644 --- a/modules/ts/src/ocl_test.cpp +++ b/modules/ts/src/ocl_test.cpp @@ -128,6 +128,9 @@ void dumpOpenCLDevice() } const Device& device = Device::getDefault(); + if (!device.available()) + CV_ErrorNoReturn(CV_OpenCLInitError, "OpenCL device is not available"); + DUMP_MESSAGE_STDOUT("Current OpenCL device: "); #if 0