Added Device:: isAMD,isIntel,isNvidia methods.
authorAlexander Karsakov <alexander.karsakov@itseez.com>
Wed, 5 Mar 2014 07:25:37 +0000 (11:25 +0400)
committerAlexander Karsakov <alexander.karsakov@itseez.com>
Wed, 5 Mar 2014 10:43:11 +0000 (14:43 +0400)
modules/core/include/opencv2/core/ocl.hpp
modules/core/src/ocl.cpp
modules/objdetect/src/cascadedetect.cpp

index c6b0cf2..686a4f3 100644 (file)
@@ -161,6 +161,18 @@ public:
     size_t imageMaxBufferSize() const;
     size_t imageMaxArraySize() const;
 
+    enum
+    {
+        UNKNOWN_VENDOR=0,
+        AMD=1,
+        INTEL=2,
+        NVIDIA=3
+    };
+
+    bool isAMD() const;
+    bool isIntel() const;
+    bool isNvidia() const;
+
     int maxClockFrequency() const;
     int maxComputeUnits() const;
     int maxConstantArgs() const;
index 9c92b83..6c2bd78 100644 (file)
@@ -1712,6 +1712,17 @@ struct Device::Impl
 
         String deviceVersion_ = getStrProp(CL_DEVICE_VERSION);
         parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_);
+
+        vendorName = getStrProp(CL_DEVICE_VENDOR);
+        if (vendorName == "Advanced Micro Devices, Inc." ||
+            vendorName == "AMD")
+            vendor_ = AMD;
+        else if (vendorName == "Intel(R) Corporation")
+            vendor_ = INTEL;
+        else if (vendorName == "NVIDIA Corporation")
+            vendor_ = NVIDIA;
+        else
+            vendor_ = UNKNOWN_VENDOR;
     }
 
     template<typename _TpCL, typename _TpOut>
@@ -1754,6 +1765,8 @@ struct Device::Impl
     int deviceVersionMajor_;
     int deviceVersionMinor_;
     String driverVersion_;
+    String vendorName;
+    int vendor_;
 };
 
 
@@ -1814,7 +1827,7 @@ String Device::version() const
 { return p ? p->version_ : String(); }
 
 String Device::vendor() const
-{ return p ? p->getStrProp(CL_DEVICE_VENDOR) : String(); }
+{ return p ? p->vendorName : String(); }
 
 String Device::OpenCL_C_Version() const
 { return p ? p->getStrProp(CL_DEVICE_OPENCL_C_VERSION) : String(); }
@@ -1925,6 +1938,21 @@ size_t Device::imageMaxArraySize() const
 { CV_REQUIRE_OPENCL_1_2_ERROR; }
 #endif
 
+bool Device::isAMD() const
+{
+  return p->vendor_ == AMD;
+}
+
+bool Device::isIntel() const
+{
+  return p->vendor_ == INTEL;
+}
+
+bool Device::isNvidia() const
+{
+  return p->vendor_ == NVIDIA;
+}
+
 int Device::maxClockFrequency() const
 { return p ? p->getProp<cl_uint, int>(CL_DEVICE_MAX_CLOCK_FREQUENCY) : 0; }
 
index bb187cd..3f0e6e3 100644 (file)
@@ -583,9 +583,7 @@ bool HaarEvaluator::read(const FileNode& node, Size _origWinSize)
     localSize = lbufSize = Size(0, 0);
     if (ocl::haveOpenCL())
     {
-        String vname = ocl::Device::getDefault().vendor();
-        if (vname == "Advanced Micro Devices, Inc." ||
-            vname == "AMD")
+        if (ocl::Device::getDefault().isAMD())
         {
             localSize = Size(8, 8);
             lbufSize = Size(origWinSize.width + localSize.width,
@@ -769,9 +767,7 @@ bool LBPEvaluator::read( const FileNode& node, Size _origWinSize )
     if (ocl::haveOpenCL())
     {
         const ocl::Device& device = ocl::Device::getDefault();
-        String vname = device.vendor();
-        if ((vname == "Advanced Micro Devices, Inc." ||
-            vname == "AMD") && !device.hostUnifiedMemory())
+        if (device.isAMD() && !device.hostUnifiedMemory())
             localSize = Size(8, 8);
     }
     return true;