Update OpenCL C features reporting to the compiler

Pass features also with -cl-ext option.

Change-Id: I1a1c68b655a2108be51c7d57be771591ee0b14e7
Signed-off-by: Filip Hazubski <filip.hazubski@intel.com>
This commit is contained in:
Filip Hazubski
2020-09-26 15:34:32 +02:00
committed by sys_ocldev
parent 746cf7fd33
commit 60430d79ee
19 changed files with 293 additions and 84 deletions

View File

@@ -73,7 +73,7 @@ std::string getExtensionsList(const HardwareInfo &hwInfo) {
return allExtensionsList;
}
void getOpenclCFeaturesList(const HardwareInfo &hwInfo, StackVec<cl_name_version, 15> &openclCFeatures) {
void getOpenclCFeaturesList(const HardwareInfo &hwInfo, OpenClCFeaturesContainer &openclCFeatures) {
cl_name_version openClCFeature;
openClCFeature.version = CL_MAKE_VERSION(3, 0, 0);
@@ -139,29 +139,31 @@ void getOpenclCFeaturesList(const HardwareInfo &hwInfo, StackVec<cl_name_version
}
}
std::string removeLastSpace(std::string &processedString) {
if (processedString.size() > 0) {
if (*processedString.rbegin() == ' ') {
processedString.pop_back();
}
}
return processedString;
}
std::string convertEnabledExtensionsToCompilerInternalOptions(const char *enabledExtensions,
OpenClCFeaturesContainer &openclCFeatures) {
std::string convertEnabledExtensionsToCompilerInternalOptions(const char *enabledExtensions) {
std::string extensionsList = enabledExtensions;
extensionsList.reserve(1000);
removeLastSpace(extensionsList);
std::string::size_type pos = 0;
while ((pos = extensionsList.find(" ", pos)) != std::string::npos) {
extensionsList.replace(pos, 1, ",+");
extensionsList.reserve(1500);
extensionsList = " -cl-ext=-all,";
std::istringstream extensionsStringStream(enabledExtensions);
std::string extension;
while (extensionsStringStream >> extension) {
extensionsList.append("+");
extensionsList.append(extension);
extensionsList.append(",");
}
extensionsList = " -cl-ext=-all,+" + extensionsList + ",+cl_khr_3d_image_writes ";
extensionsList.append("+cl_khr_3d_image_writes,");
for (auto &feature : openclCFeatures) {
extensionsList.append("+");
extensionsList.append(feature.name);
extensionsList.append(",");
}
extensionsList[extensionsList.size() - 1] = ' ';
return extensionsList;
}
std::string convertEnabledOclCFeaturesToCompilerInternalOptions(StackVec<cl_name_version, 15> &openclCFeatures) {
std::string convertEnabledOclCFeaturesToCompilerInternalOptions(OpenClCFeaturesContainer &openclCFeatures) {
UNRECOVERABLE_IF(openclCFeatures.empty());
std::string featuresList;
featuresList.reserve(500);

View File

@@ -10,7 +10,7 @@
#include "shared/source/helpers/hw_info.h"
#include "shared/source/utilities/stackvec.h"
#include "CL/cl.h"
#include "opencl/source/cl_device/cl_device_info.h"
#include <string>
@@ -21,9 +21,9 @@ constexpr const char *const sharingFormatQuery = "cl_intel_sharing_format_query
extern const char *deviceExtensionsList;
std::string getExtensionsList(const HardwareInfo &hwInfo);
void getOpenclCFeaturesList(const HardwareInfo &hwInfo, StackVec<cl_name_version, 15> &openclCFeatures);
std::string removeLastSpace(std::string &s);
std::string convertEnabledExtensionsToCompilerInternalOptions(const char *deviceExtensions);
std::string convertEnabledOclCFeaturesToCompilerInternalOptions(StackVec<cl_name_version, 15> &openclCFeatures);
void getOpenclCFeaturesList(const HardwareInfo &hwInfo, OpenClCFeaturesContainer &openclCFeatures);
std::string convertEnabledExtensionsToCompilerInternalOptions(const char *deviceExtensions,
OpenClCFeaturesContainer &openclCFeatures);
std::string convertEnabledOclCFeaturesToCompilerInternalOptions(OpenClCFeaturesContainer &openclCFeatures);
} // namespace NEO