added gpu type selection in OPENCV_OPENCL_DEVICE parser
authorKonstantin Matskevich <konstantin.matskevich@itseez.com>
Fri, 21 Mar 2014 12:56:12 +0000 (16:56 +0400)
committerKonstantin Matskevich <konstantin.matskevich@itseez.com>
Fri, 21 Mar 2014 13:01:37 +0000 (17:01 +0400)
modules/core/src/ocl.cpp

index c6e0c40..736fd5f 100644 (file)
@@ -2193,7 +2193,7 @@ static cl_device_id selectOpenCLDevice()
     for (size_t t = 0; t < deviceTypes.size(); t++)
     {
         int deviceType = 0;
-        if (deviceTypes[t] == "GPU")
+        if (deviceTypes[t] == "GPU" || deviceTypes[t] == "dGPU" || deviceTypes[t] == "iGPU")
             deviceType = Device::TYPE_GPU;
         else if (deviceTypes[t] == "CPU")
             deviceType = Device::TYPE_CPU;
@@ -2229,7 +2229,14 @@ static cl_device_id selectOpenCLDevice()
         {
             std::string name;
             CV_OclDbgAssert(getStringInfo(clGetDeviceInfo, devices[i], CL_DEVICE_NAME, name) == CL_SUCCESS);
-            if (isID || name.find(deviceName) != std::string::npos)
+            cl_bool useGPU = true;
+            if(deviceTypes[t] == "dGPU" || deviceTypes[t] == "iGPU")
+            {
+                cl_bool isIGPU = CL_FALSE;
+                clGetDeviceInfo(devices[i], CL_DEVICE_HOST_UNIFIED_MEMORY, sizeof(isIGPU), &isIGPU, NULL);
+                useGPU = deviceTypes[t] == "dGPU" ? !isIGPU : isIGPU;
+            }
+            if ( (isID || name.find(deviceName) != std::string::npos) && useGPU)
             {
                 // TODO check for OpenCL 1.1
                 return devices[i];