From c1dad2178ca4ad3b7154e4026be9c31ef4fb8365 Mon Sep 17 00:00:00 2001 From: Alexander Karsakov Date: Wed, 5 Mar 2014 11:25:37 +0400 Subject: [PATCH] Added Device:: isAMD,isIntel,isNvidia methods. --- modules/core/include/opencv2/core/ocl.hpp | 12 +++++++++ modules/core/src/ocl.cpp | 30 ++++++++++++++++++++++- modules/objdetect/src/cascadedetect.cpp | 8 ++---- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/modules/core/include/opencv2/core/ocl.hpp b/modules/core/include/opencv2/core/ocl.hpp index c6b0cf2d0f..686a4f34fc 100644 --- a/modules/core/include/opencv2/core/ocl.hpp +++ b/modules/core/include/opencv2/core/ocl.hpp @@ -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; diff --git a/modules/core/src/ocl.cpp b/modules/core/src/ocl.cpp index 9c92b83812..6c2bd78489 100644 --- a/modules/core/src/ocl.cpp +++ b/modules/core/src/ocl.cpp @@ -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 @@ -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_DEVICE_MAX_CLOCK_FREQUENCY) : 0; } diff --git a/modules/objdetect/src/cascadedetect.cpp b/modules/objdetect/src/cascadedetect.cpp index bb187cd617..3f0e6e38ce 100644 --- a/modules/objdetect/src/cascadedetect.cpp +++ b/modules/objdetect/src/cascadedetect.cpp @@ -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;