{
try
{
- data->useOpenCL = (int)haveOpenCL() && Device::getDefault().ptr() != NULL;
+ data->useOpenCL = (int)haveOpenCL() && Device::getDefault().ptr() && Device::getDefault().available();
}
catch (...)
{
{
const Context& ctx = Context::getDefault();
int idx = coreTlsData.get()->device;
- return ctx.device(idx);
+ const Device& device = ctx.device(idx);
+ return device;
}
////////////////////////////////////// Context ///////////////////////////////////////////////////
std::vector<std::string> 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;
}
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