|
|
@ -43,6 +43,7 @@ |
|
|
|
#include <list> |
|
|
|
#include <list> |
|
|
|
#include <map> |
|
|
|
#include <map> |
|
|
|
#include <deque> |
|
|
|
#include <deque> |
|
|
|
|
|
|
|
#include <set> |
|
|
|
#include <string> |
|
|
|
#include <string> |
|
|
|
#include <sstream> |
|
|
|
#include <sstream> |
|
|
|
#include <iostream> // std::cerr |
|
|
|
#include <iostream> // std::cerr |
|
|
@ -518,6 +519,7 @@ struct Device::Impl |
|
|
|
|
|
|
|
|
|
|
|
name_ = getStrProp(CL_DEVICE_NAME); |
|
|
|
name_ = getStrProp(CL_DEVICE_NAME); |
|
|
|
version_ = getStrProp(CL_DEVICE_VERSION); |
|
|
|
version_ = getStrProp(CL_DEVICE_VERSION); |
|
|
|
|
|
|
|
extensions_ = getStrProp(CL_DEVICE_EXTENSIONS); |
|
|
|
doubleFPConfig_ = getProp<cl_device_fp_config, int>(CL_DEVICE_DOUBLE_FP_CONFIG); |
|
|
|
doubleFPConfig_ = getProp<cl_device_fp_config, int>(CL_DEVICE_DOUBLE_FP_CONFIG); |
|
|
|
hostUnifiedMemory_ = getBoolProp(CL_DEVICE_HOST_UNIFIED_MEMORY); |
|
|
|
hostUnifiedMemory_ = getBoolProp(CL_DEVICE_HOST_UNIFIED_MEMORY); |
|
|
|
maxComputeUnits_ = getProp<cl_uint, int>(CL_DEVICE_MAX_COMPUTE_UNITS); |
|
|
|
maxComputeUnits_ = getProp<cl_uint, int>(CL_DEVICE_MAX_COMPUTE_UNITS); |
|
|
@ -528,6 +530,20 @@ struct Device::Impl |
|
|
|
String deviceVersion_ = getStrProp(CL_DEVICE_VERSION); |
|
|
|
String deviceVersion_ = getStrProp(CL_DEVICE_VERSION); |
|
|
|
parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_); |
|
|
|
parseDeviceVersion(deviceVersion_, deviceVersionMajor_, deviceVersionMinor_); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
size_t pos = 0; |
|
|
|
|
|
|
|
while (pos < extensions_.size()) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
size_t pos2 = extensions_.find(' ', pos); |
|
|
|
|
|
|
|
if (pos2 == String::npos) |
|
|
|
|
|
|
|
pos2 = extensions_.size(); |
|
|
|
|
|
|
|
if (pos2 > pos) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
std::string extensionName = extensions_.substr(pos, pos2 - pos); |
|
|
|
|
|
|
|
extensions_set_.insert(extensionName); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
pos = pos2 + 1; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
intelSubgroupsSupport_ = isExtensionSupported("cl_intel_subgroups"); |
|
|
|
intelSubgroupsSupport_ = isExtensionSupported("cl_intel_subgroups"); |
|
|
|
|
|
|
|
|
|
|
|
vendorName_ = getStrProp(CL_DEVICE_VENDOR); |
|
|
|
vendorName_ = getStrProp(CL_DEVICE_VENDOR); |
|
|
@ -569,23 +585,19 @@ struct Device::Impl |
|
|
|
sz < sizeof(buf) ? String(buf) : String(); |
|
|
|
sz < sizeof(buf) ? String(buf) : String(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool isExtensionSupported(const String& extensionName) const |
|
|
|
bool isExtensionSupported(const std::string& extensionName) const |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool ret = false; |
|
|
|
return extensions_set_.count(extensionName) > 0; |
|
|
|
size_t pos = getStrProp(CL_DEVICE_EXTENSIONS).find(extensionName); |
|
|
|
|
|
|
|
if (pos != String::npos) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ret = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return ret; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_REFCOUNTABLE(); |
|
|
|
IMPLEMENT_REFCOUNTABLE(); |
|
|
|
|
|
|
|
|
|
|
|
cl_device_id handle; |
|
|
|
cl_device_id handle; |
|
|
|
|
|
|
|
|
|
|
|
String name_; |
|
|
|
String name_; |
|
|
|
String version_; |
|
|
|
String version_; |
|
|
|
|
|
|
|
std::string extensions_; |
|
|
|
int doubleFPConfig_; |
|
|
|
int doubleFPConfig_; |
|
|
|
bool hostUnifiedMemory_; |
|
|
|
bool hostUnifiedMemory_; |
|
|
|
int maxComputeUnits_; |
|
|
|
int maxComputeUnits_; |
|
|
@ -597,6 +609,8 @@ struct Device::Impl |
|
|
|
String vendorName_; |
|
|
|
String vendorName_; |
|
|
|
int vendorID_; |
|
|
|
int vendorID_; |
|
|
|
bool intelSubgroupsSupport_; |
|
|
|
bool intelSubgroupsSupport_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::set<std::string> extensions_set_; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -651,7 +665,10 @@ String Device::name() const |
|
|
|
{ return p ? p->name_ : String(); } |
|
|
|
{ return p ? p->name_ : String(); } |
|
|
|
|
|
|
|
|
|
|
|
String Device::extensions() const |
|
|
|
String Device::extensions() const |
|
|
|
{ return p ? p->getStrProp(CL_DEVICE_EXTENSIONS) : String(); } |
|
|
|
{ return p ? String(p->extensions_) : String(); } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Device::isExtensionSupported(const String& extensionName) const |
|
|
|
|
|
|
|
{ return p ? p->isExtensionSupported(extensionName) : false; } |
|
|
|
|
|
|
|
|
|
|
|
String Device::version() const |
|
|
|
String Device::version() const |
|
|
|
{ return p ? p->version_ : String(); } |
|
|
|
{ return p ? p->version_ : String(); } |
|
|
@ -744,16 +761,7 @@ bool Device::imageSupport() const |
|
|
|
|
|
|
|
|
|
|
|
bool Device::imageFromBufferSupport() const |
|
|
|
bool Device::imageFromBufferSupport() const |
|
|
|
{ |
|
|
|
{ |
|
|
|
bool ret = false; |
|
|
|
return p ? p->isExtensionSupported("cl_khr_image2d_from_buffer") : false; |
|
|
|
if (p) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
size_t pos = p->getStrProp(CL_DEVICE_EXTENSIONS).find("cl_khr_image2d_from_buffer"); |
|
|
|
|
|
|
|
if (pos != String::npos) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
ret = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return ret; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
uint Device::imagePitchAlignment() const |
|
|
|
uint Device::imagePitchAlignment() const |
|
|
|