Added Device:: isAMD,isIntel,isNvidia methods.

pull/2441/head
Alexander Karsakov 11 years ago
parent 7ecbf45751
commit c1dad2178c
  1. 12
      modules/core/include/opencv2/core/ocl.hpp
  2. 30
      modules/core/src/ocl.cpp
  3. 8
      modules/objdetect/src/cascadedetect.cpp

@ -161,6 +161,18 @@ public:
size_t imageMaxBufferSize() const; size_t imageMaxBufferSize() const;
size_t imageMaxArraySize() 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 maxClockFrequency() const;
int maxComputeUnits() const; int maxComputeUnits() const;
int maxConstantArgs() const; int maxConstantArgs() const;

@ -1712,6 +1712,17 @@ struct Device::Impl
String deviceVersion_ = getStrProp(CL_DEVICE_VERSION); String deviceVersion_ = getStrProp(CL_DEVICE_VERSION);
parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_); 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> template<typename _TpCL, typename _TpOut>
@ -1754,6 +1765,8 @@ struct Device::Impl
int deviceVersionMajor_; int deviceVersionMajor_;
int deviceVersionMinor_; int deviceVersionMinor_;
String driverVersion_; String driverVersion_;
String vendorName;
int vendor_;
}; };
@ -1814,7 +1827,7 @@ String Device::version() const
{ return p ? p->version_ : String(); } { return p ? p->version_ : String(); }
String Device::vendor() const String Device::vendor() const
{ return p ? p->getStrProp(CL_DEVICE_VENDOR) : String(); } { return p ? p->vendorName : String(); }
String Device::OpenCL_C_Version() const String Device::OpenCL_C_Version() const
{ return p ? p->getStrProp(CL_DEVICE_OPENCL_C_VERSION) : String(); } { 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; } { CV_REQUIRE_OPENCL_1_2_ERROR; }
#endif #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 int Device::maxClockFrequency() const
{ return p ? p->getProp<cl_uint, int>(CL_DEVICE_MAX_CLOCK_FREQUENCY) : 0; } { return p ? p->getProp<cl_uint, int>(CL_DEVICE_MAX_CLOCK_FREQUENCY) : 0; }

@ -583,9 +583,7 @@ bool HaarEvaluator::read(const FileNode& node, Size _origWinSize)
localSize = lbufSize = Size(0, 0); localSize = lbufSize = Size(0, 0);
if (ocl::haveOpenCL()) if (ocl::haveOpenCL())
{ {
String vname = ocl::Device::getDefault().vendor(); if (ocl::Device::getDefault().isAMD())
if (vname == "Advanced Micro Devices, Inc." ||
vname == "AMD")
{ {
localSize = Size(8, 8); localSize = Size(8, 8);
lbufSize = Size(origWinSize.width + localSize.width, lbufSize = Size(origWinSize.width + localSize.width,
@ -769,9 +767,7 @@ bool LBPEvaluator::read( const FileNode& node, Size _origWinSize )
if (ocl::haveOpenCL()) if (ocl::haveOpenCL())
{ {
const ocl::Device& device = ocl::Device::getDefault(); const ocl::Device& device = ocl::Device::getDefault();
String vname = device.vendor(); if (device.isAMD() && !device.hostUnifiedMemory())
if ((vname == "Advanced Micro Devices, Inc." ||
vname == "AMD") && !device.hostUnifiedMemory())
localSize = Size(8, 8); localSize = Size(8, 8);
} }
return true; return true;

Loading…
Cancel
Save