mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-26 15:03:02 +08:00
feature: New forward-compatibility model for zeinfo
Up till now, NEO ignored uknown attributes in zeinfo which could lead to undefined behavior. With this change NEO will emit an error whenever an unknown attribute is encountered. Note : old behavior can be restored using new IgnoreZebinUnknownAttributes debug environment variable Resolves: NEO-11762 Signed-off-by: Chodor, Jaroslaw <jaroslaw.chodor@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
8b1bedd1f6
commit
f1815f941d
@@ -46,12 +46,23 @@ DecodeError validateZeInfoVersion(const Types::Version &receivedZeInfoVersion, s
|
||||
return DecodeError::unhandledBinary;
|
||||
}
|
||||
if (receivedZeInfoVersion.minor > zeInfoDecoderVersion.minor) {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Minor version : " + std::to_string(receivedZeInfoVersion.minor) + " is newer than available in decoder : " + std::to_string(zeInfoDecoderVersion.minor) + " - some features may be skipped\n");
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Minor version : " + std::to_string(receivedZeInfoVersion.minor) + " is newer than available in decoder : " + std::to_string(zeInfoDecoderVersion.minor) + "\n");
|
||||
}
|
||||
return DecodeError::success;
|
||||
}
|
||||
|
||||
void extractZeInfoSections(const Yaml::YamlParser &parser, ZeInfoSections &outZeInfoSections, std::string &outWarning) {
|
||||
void encounterUnknownZeInfoAttribute(const std::string &entryDescriptor, std::string &outErrReason, std::string &outWarning, DecodeError &errCode) {
|
||||
auto formattedMessage = "DeviceBinaryFormat::zebin::.ze_info : Unknown entry " + entryDescriptor + "\n";
|
||||
if (debugManager.flags.IgnoreZebinUnknownAttributes.get()) {
|
||||
outWarning.append(formattedMessage);
|
||||
} else {
|
||||
outErrReason.append(formattedMessage);
|
||||
errCode = DecodeError::unkownZeinfoAttribute;
|
||||
}
|
||||
}
|
||||
|
||||
DecodeError extractZeInfoSections(const Yaml::YamlParser &parser, ZeInfoSections &outZeInfoSections, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
for (const auto &globalScopeNd : parser.createChildrenRange(*parser.getRoot())) {
|
||||
auto key = parser.readKey(globalScopeNd);
|
||||
if (Tags::kernels == key) {
|
||||
@@ -63,12 +74,14 @@ void extractZeInfoSections(const Yaml::YamlParser &parser, ZeInfoSections &outZe
|
||||
} else if (Tags::functions == key) {
|
||||
outZeInfoSections.functions.push_back(&globalScopeNd);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + parser.readKey(globalScopeNd).str() + "\" in global scope of .ze_info\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + parser.readKey(globalScopeNd).str() + "\" in global scope of .ze_info", outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
void extractZeInfoKernelSections(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &kernelNd, ZeInfoKernelSections &outZeInfoKernelSections, ConstStringRef context, std::string &outWarning) {
|
||||
DecodeError extractZeInfoKernelSections(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &kernelNd, ZeInfoKernelSections &outZeInfoKernelSections, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
for (const auto &kernelMetadataNd : parser.createChildrenRange(kernelNd)) {
|
||||
auto key = parser.readKey(kernelMetadataNd);
|
||||
if (Tags::Kernel::name == key) {
|
||||
@@ -92,9 +105,10 @@ void extractZeInfoKernelSections(const NEO::Yaml::YamlParser &parser, const NEO:
|
||||
} else if (Tags::Kernel::inlineSamplers == key) {
|
||||
outZeInfoKernelSections.inlineSamplersNd.push_back(&kernelMetadataNd);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + parser.readKey(kernelMetadataNd).str() + "\" in context of : " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + parser.readKey(kernelMetadataNd).str() + "\" in context of : " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
bool validateZeInfoSectionsCount(const ZeInfoSections &zeInfoSections, std::string &outErrReason) {
|
||||
@@ -181,6 +195,7 @@ DecodeError readZeInfoGlobalHostAceessTable(const NEO::Yaml::YamlParser &parser,
|
||||
ZeInfoGlobalHostAccessTables &outDeviceNameToHostTable,
|
||||
ConstStringRef context,
|
||||
std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validTable = true;
|
||||
for (const auto &globalHostAccessNameNd : parser.createChildrenRange(node)) {
|
||||
outDeviceNameToHostTable.resize(outDeviceNameToHostTable.size() + 1);
|
||||
@@ -192,11 +207,11 @@ DecodeError readZeInfoGlobalHostAceessTable(const NEO::Yaml::YamlParser &parser,
|
||||
} else if (Tags::GlobalHostAccessTable::hostName == key) {
|
||||
validTable &= readZeInfoValueChecked(parser, globalHostAccessNameMemberNd, globalHostAccessMetadata.hostName, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for payload argument in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for payload argument in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
return validTable ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validTable ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
template <typename ElSize, size_t len>
|
||||
@@ -254,7 +269,7 @@ DecodeError populateZeInfoVersion(Types::Version &dst, ConstStringRef &versionSt
|
||||
DecodeError populateExternalFunctionsMetadata(NEO::ProgramInfo &dst, NEO::Yaml::YamlParser &yamlParser, const NEO::Yaml::Node &functionNd, std::string &outErrReason, std::string &outWarning) {
|
||||
ConstStringRef functionName;
|
||||
Types::Function::ExecutionEnv::ExecutionEnvBaseT execEnv = {};
|
||||
bool isValid = true;
|
||||
DecodeError err = DecodeError::success;
|
||||
|
||||
for (const auto &functionMetadataNd : yamlParser.createChildrenRange(functionNd)) {
|
||||
auto key = yamlParser.readKey(functionMetadataNd);
|
||||
@@ -262,15 +277,15 @@ DecodeError populateExternalFunctionsMetadata(NEO::ProgramInfo &dst, NEO::Yaml::
|
||||
functionName = yamlParser.readValueNoQuotes(functionMetadataNd);
|
||||
} else if (Tags::Function::executionEnv == key) {
|
||||
auto execEnvErr = readZeInfoExecutionEnvironment(yamlParser, functionMetadataNd, execEnv, "external functions", outErrReason, outWarning);
|
||||
if (execEnvErr != DecodeError::success) {
|
||||
isValid = false;
|
||||
if (DecodeError::success == err) {
|
||||
err = execEnvErr;
|
||||
}
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + yamlParser.readKey(functionMetadataNd).str() + "\" in context of : external functions\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + yamlParser.readKey(functionMetadataNd).str() + "\" in context of : external functions", outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
|
||||
if (isValid) {
|
||||
if (DecodeError::success == err) {
|
||||
NEO::ExternalFunctionInfo extFunInfo{};
|
||||
extFunInfo.functionName = functionName.str();
|
||||
extFunInfo.barrierCount = static_cast<uint8_t>(execEnv.barrierCount);
|
||||
@@ -278,10 +293,9 @@ DecodeError populateExternalFunctionsMetadata(NEO::ProgramInfo &dst, NEO::Yaml::
|
||||
extFunInfo.simdSize = static_cast<uint8_t>(execEnv.simdSize);
|
||||
extFunInfo.hasRTCalls = execEnv.hasRTCalls;
|
||||
dst.externalFunctions.push_back(extFunInfo);
|
||||
return DecodeError::success;
|
||||
} else {
|
||||
return DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
DecodeError readKernelMiscArgumentInfos(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &node, KernelMiscArgInfos &kernelMiscArgInfosVec, std::string &outErrReason, std::string &outWarning) {
|
||||
@@ -415,10 +429,13 @@ DecodeError decodeZeInfo(ProgramInfo &dst, ConstStringRef zeInfo, std::string &o
|
||||
}
|
||||
|
||||
ZeInfoSections zeInfoSections{};
|
||||
extractZeInfoSections(yamlParser, zeInfoSections, outWarning);
|
||||
auto extractZeInfoSectionsError = extractZeInfoSections(yamlParser, zeInfoSections, outErrReason, outWarning);
|
||||
if (false == validateZeInfoSectionsCount(zeInfoSections, outErrReason)) {
|
||||
return DecodeError::invalidBinary;
|
||||
}
|
||||
if (DecodeError::success != extractZeInfoSectionsError) {
|
||||
return extractZeInfoSectionsError;
|
||||
}
|
||||
|
||||
Types::Version zeInfoVersion{};
|
||||
auto zeInfoDecodeError = decodeZeInfoVersion(yamlParser, zeInfoSections, outErrReason, outWarning, zeInfoVersion);
|
||||
@@ -504,8 +521,12 @@ DecodeError decodeZeInfoKernels(ProgramInfo &dst, Yaml::YamlParser &parser, cons
|
||||
|
||||
DecodeError decodeZeInfoKernelEntry(NEO::KernelDescriptor &dst, NEO::Yaml::YamlParser &yamlParser, const NEO::Yaml::Node &kernelNd, uint32_t grfSize, uint32_t minScratchSpaceSize, std::string &outErrReason, std::string &outWarning, const Types::Version &srcZeInfoVersion) {
|
||||
ZeInfoKernelSections zeInfokernelSections;
|
||||
extractZeInfoKernelSections(yamlParser, kernelNd, zeInfokernelSections, ".ze_info", outWarning);
|
||||
auto extractError = validateZeInfoKernelSectionsCount(zeInfokernelSections, outErrReason, outWarning);
|
||||
auto extractError = extractZeInfoKernelSections(yamlParser, kernelNd, zeInfokernelSections, ".ze_info", outErrReason, outWarning);
|
||||
if (DecodeError::success != extractError) {
|
||||
return extractError;
|
||||
}
|
||||
|
||||
extractError = validateZeInfoKernelSectionsCount(zeInfokernelSections, outErrReason, outWarning);
|
||||
if (DecodeError::success != extractError) {
|
||||
return extractError;
|
||||
}
|
||||
@@ -592,6 +613,7 @@ DecodeError decodeZeInfoKernelExecutionEnvironment(KernelDescriptor &dst, Yaml::
|
||||
|
||||
DecodeError readZeInfoExecutionEnvironment(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelExecutionEnvBaseT &outExecEnv, ConstStringRef context,
|
||||
std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validExecEnv = true;
|
||||
for (const auto &execEnvMetadataNd : parser.createChildrenRange(node)) {
|
||||
auto key = parser.readKey(execEnvMetadataNd);
|
||||
@@ -652,7 +674,7 @@ DecodeError readZeInfoExecutionEnvironment(const Yaml::YamlParser &parser, const
|
||||
} else if (Tags::Kernel::ExecutionEnv::spillSize == key) {
|
||||
validExecEnv &= readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.spillSize, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -665,7 +687,7 @@ DecodeError readZeInfoExecutionEnvironment(const Yaml::YamlParser &parser, const
|
||||
return DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
return DecodeError::success;
|
||||
return err;
|
||||
}
|
||||
|
||||
void populateKernelExecutionEnvironment(KernelDescriptor &dst, const KernelExecutionEnvBaseT &execEnv, const Types::Version &srcZeInfoVersion) {
|
||||
@@ -730,6 +752,7 @@ DecodeError decodeZeInfoKernelUserAttributes(KernelDescriptor &dst, Yaml::YamlPa
|
||||
}
|
||||
|
||||
DecodeError readZeInfoAttributes(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelAttributesBaseT &outAttributes, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
namespace AttributeTypes = Types::Kernel::Attributes;
|
||||
bool validAttributes = true;
|
||||
for (const auto &attributesMetadataNd : parser.createChildrenRange(node)) {
|
||||
@@ -753,11 +776,10 @@ DecodeError readZeInfoAttributes(const Yaml::YamlParser &parser, const Yaml::Nod
|
||||
} else if (key.contains(Tags::Kernel::Attributes::hintSuffix.data())) {
|
||||
outAttributes.otherHints.push_back({key, parser.readValue(attributesMetadataNd)});
|
||||
} else {
|
||||
outErrReason.append("DeviceBinaryFormat::zebin::.ze_info : Unknown attribute entry \"" + key.str() + "\" in context of " + context.str() + "\n");
|
||||
validAttributes = false;
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
return validAttributes ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validAttributes ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
std::string attributeToString(const int32_t &attribute) {
|
||||
@@ -816,16 +838,17 @@ DecodeError decodeZeInfoKernelDebugEnvironment(KernelDescriptor &dst, Yaml::Yaml
|
||||
}
|
||||
|
||||
DecodeError readZeInfoDebugEnvironment(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelDebugEnvBaseT &outDebugEnv, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validDebugEnv = true;
|
||||
for (const auto &debugEnvNd : parser.createChildrenRange(node)) {
|
||||
auto key = parser.readKey(debugEnvNd);
|
||||
if (Tags::Kernel::DebugEnv::debugSurfaceBTI == key) {
|
||||
validDebugEnv &= readZeInfoValueChecked(parser, debugEnvNd, outDebugEnv.debugSurfaceBTI, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
return validDebugEnv ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validDebugEnv ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
void populateKernelDebugEnvironment(NEO::KernelDescriptor &dst, const KernelDebugEnvBaseT &debugEnv) {
|
||||
@@ -853,6 +876,7 @@ DecodeError decodeZeInfoKernelPerThreadPayloadArguments(KernelDescriptor &dst, Y
|
||||
}
|
||||
|
||||
DecodeError readZeInfoPerThreadPayloadArguments(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelPerThreadPayloadArguments &outPerThreadPayloadArguments, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validPerThreadPayload = true;
|
||||
for (const auto &perThreadPayloadArgumentNd : parser.createChildrenRange(node)) {
|
||||
outPerThreadPayloadArguments.resize(outPerThreadPayloadArguments.size() + 1);
|
||||
@@ -868,7 +892,7 @@ DecodeError readZeInfoPerThreadPayloadArguments(const Yaml::YamlParser &parser,
|
||||
} else if (Tags::Kernel::PerThreadPayloadArgument::offset == key) {
|
||||
validPerThreadPayload &= readZeInfoValueChecked(parser, perThreadPayloadArgumentMemberNd, perThreadPayloadArgMetadata.offset, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for per-thread payload argument in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for per-thread payload argument in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
if (0 == perThreadPayloadArgMetadata.size) {
|
||||
@@ -877,7 +901,7 @@ DecodeError readZeInfoPerThreadPayloadArguments(const Yaml::YamlParser &parser,
|
||||
}
|
||||
}
|
||||
|
||||
return validPerThreadPayload ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validPerThreadPayload ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
DecodeError populateKernelPerThreadPayloadArgument(KernelDescriptor &dst, const KernelPerThreadPayloadArgBaseT &src, const uint32_t grfSize, std::string &outErrReason, std::string &outWarning) {
|
||||
@@ -1017,6 +1041,7 @@ DecodeError decodeZeInfoKernelPayloadArguments(KernelDescriptor &dst, Yaml::Yaml
|
||||
}
|
||||
|
||||
DecodeError readZeInfoPayloadArguments(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelPayloadArguments &outPayloadArguments, int32_t &outMaxPayloadArgumentIndex, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validPayload = true;
|
||||
for (const auto &payloadArgumentNd : parser.createChildrenRange(node)) {
|
||||
outPayloadArguments.resize(outPayloadArguments.size() + 1);
|
||||
@@ -1057,11 +1082,11 @@ DecodeError readZeInfoPayloadArguments(const Yaml::YamlParser &parser, const Yam
|
||||
} else if (Tags::Kernel::PayloadArgument::btiValue == key) {
|
||||
validPayload &= readZeInfoValueChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.btiValue, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for payload argument in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for payload argument in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
return validPayload ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validPayload ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const KernelPayloadArgBaseT &src, std::string &outErrReason, std::string &outWarning) {
|
||||
@@ -1444,6 +1469,7 @@ DecodeError decodeZeInfoKernelInlineSamplers(KernelDescriptor &dst, Yaml::YamlPa
|
||||
}
|
||||
|
||||
DecodeError readZeInfoInlineSamplers(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelInlineSamplers &outInlineSamplers, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validInlineSamplers = true;
|
||||
for (const auto &inlineSamplerNd : parser.createChildrenRange(node)) {
|
||||
outInlineSamplers.resize(outInlineSamplers.size() + 1);
|
||||
@@ -1460,12 +1486,12 @@ DecodeError readZeInfoInlineSamplers(const Yaml::YamlParser &parser, const Yaml:
|
||||
} else if (Tags::normalized == key) {
|
||||
validInlineSamplers &= readZeInfoValueChecked(parser, inlineSamplerMemberNd, inlineSampler.normalized, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for inline sampler in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for inline sampler in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return validInlineSamplers ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validInlineSamplers ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
DecodeError populateKernelInlineSampler(KernelDescriptor &dst, const KernelInlineSamplerBaseT &src, std::string &outErrReason, std::string &outWarning) {
|
||||
@@ -1529,6 +1555,7 @@ DecodeError decodeZeInfoKernelPerThreadMemoryBuffers(KernelDescriptor &dst, Yaml
|
||||
}
|
||||
|
||||
DecodeError readZeInfoPerThreadMemoryBuffers(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelPerThreadMemoryBuffers &outPerThreadMemoryBuffers, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validBuffer = true;
|
||||
for (const auto &perThreadMemoryBufferNd : parser.createChildrenRange(node)) {
|
||||
outPerThreadMemoryBuffers.resize(outPerThreadMemoryBuffers.size() + 1);
|
||||
@@ -1546,11 +1573,11 @@ DecodeError readZeInfoPerThreadMemoryBuffers(const Yaml::YamlParser &parser, con
|
||||
} else if (Tags::Kernel::PerThreadMemoryBuffer::slot == key) {
|
||||
validBuffer &= readZeInfoValueChecked(parser, perThreadMemoryBufferMemberNd, perThreadMemoryBufferMetadata.slot, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for per-thread memory buffer in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for per-thread memory buffer in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
return validBuffer ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validBuffer ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
DecodeError populateKernelPerThreadMemoryBuffer(KernelDescriptor &dst, const KernelPerThreadMemoryBufferBaseT &src, const uint32_t minScratchSpaceSize, std::string &outErrReason, std::string &outWarning, const Types::Version &srcZeInfoVersion) {
|
||||
@@ -1618,6 +1645,7 @@ DecodeError decodeZeInfoKernelExperimentalProperties(KernelDescriptor &dst, Yaml
|
||||
}
|
||||
|
||||
DecodeError readZeInfoExperimentalProperties(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelExperimentalPropertiesBaseT &outExperimentalProperties, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validExperimentalProperty = true;
|
||||
for (const auto &experimentalPropertyNd : parser.createChildrenRange(node)) {
|
||||
for (const auto &experimentalPropertyMemberNd : parser.createChildrenRange(experimentalPropertyNd)) {
|
||||
@@ -1632,13 +1660,12 @@ DecodeError readZeInfoExperimentalProperties(const Yaml::YamlParser &parser, con
|
||||
validExperimentalProperty &= readZeInfoValueChecked(parser, experimentalPropertyMemberNd,
|
||||
outExperimentalProperties.hasNonKernelArgAtomic, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" in context of " + context.str() + "\n");
|
||||
validExperimentalProperty = false;
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return validExperimentalProperty ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validExperimentalProperty ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
void populateKernelExperimentalProperties(KernelDescriptor &dst, const KernelExperimentalPropertiesBaseT &experimentalProperties) {
|
||||
@@ -1665,6 +1692,7 @@ DecodeError decodeZeInfoKernelBindingTableEntries(KernelDescriptor &dst, Yaml::Y
|
||||
}
|
||||
|
||||
DecodeError readZeInfoBindingTableIndices(const Yaml::YamlParser &parser, const Yaml::Node &node, KernelBindingTableEntries &outBindingTableIndices, ConstStringRef context, std::string &outErrReason, std::string &outWarning) {
|
||||
DecodeError err = DecodeError::success;
|
||||
bool validBindingTableEntries = true;
|
||||
for (const auto &bindingTableIndexNd : parser.createChildrenRange(node)) {
|
||||
outBindingTableIndices.resize(outBindingTableIndices.size() + 1);
|
||||
@@ -1676,12 +1704,12 @@ DecodeError readZeInfoBindingTableIndices(const Yaml::YamlParser &parser, const
|
||||
} else if (Tags::Kernel::BindingTableIndex::btiValue == key) {
|
||||
validBindingTableEntries &= readZeInfoValueChecked(parser, bindingTableIndexMemberNd, bindingTableIndexMetadata.btiValue, context, outErrReason);
|
||||
} else {
|
||||
outWarning.append("DeviceBinaryFormat::zebin::.ze_info : Unknown entry \"" + key.str() + "\" for binding table index in context of " + context.str() + "\n");
|
||||
encounterUnknownZeInfoAttribute("\"" + key.str() + "\" for binding table index in context of " + context.str(), outErrReason, outWarning, err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return validBindingTableEntries ? DecodeError::success : DecodeError::invalidBinary;
|
||||
return validBindingTableEntries ? err : DecodeError::invalidBinary;
|
||||
}
|
||||
|
||||
DecodeError populateKernelBindingTableIndicies(KernelDescriptor &dst, const KernelBindingTableEntries &btEntries, std::string &outErrReason) {
|
||||
|
||||
Reference in New Issue
Block a user