feature: Add interface for Ext area regarding payload args in zebin spec

Related-To: NEO-14899, IGC-11358

Signed-off-by: Arek G <arkadiusz.grubba@intel.com>
This commit is contained in:
Arek G
2025-06-04 10:09:27 +00:00
committed by Compute-Runtime-Automation
parent 50303d7c60
commit 695ef4877a
8 changed files with 74 additions and 3 deletions

View File

@@ -663,7 +663,19 @@ inline constexpr OffsetT offset = -1;
inline constexpr BtiValueT btiValue = -1;
} // namespace Defaults
struct PayloadArgumentBaseT {
struct PayloadArgumentExtT;
PayloadArgumentExtT *allocatePayloadArgumentExt();
void freePayloadArgumentExt(PayloadArgumentExtT *);
struct PayloadArgumentBaseT final {
PayloadArgumentBaseT() {
pPayArgExt = allocatePayloadArgumentExt();
}
~PayloadArgumentBaseT() {
freePayloadArgumentExt(pPayArgExt);
}
PayloadArgumentExtT *pPayArgExt = nullptr;
ArgTypeT argType = argTypeUnknown;
OffsetT offset = Defaults::offset;
SourceOffseT sourceOffset = Defaults::sourceOffset;

View File

@@ -1107,7 +1107,8 @@ DecodeError readZeInfoPayloadArguments(const Yaml::YamlParser &parser, const Yam
for (const auto &payloadArgumentMemberNd : parser.createChildrenRange(payloadArgumentNd)) {
auto key = parser.readKey(payloadArgumentMemberNd);
if (Tags::Kernel::PayloadArgument::argType == key) {
validPayload &= readZeInfoEnumChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.argType, context, outErrReason);
validPayload &= readZeInfoArgTypeNameCheckedExt(parser, payloadArgumentMemberNd, payloadArgMetadata) ||
readZeInfoEnumChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.argType, context, outErrReason);
} else if (Tags::Kernel::PayloadArgument::argIndex == key) {
validPayload &= parser.readValueChecked(payloadArgumentMemberNd, payloadArgMetadata.argIndex);
outMaxPayloadArgumentIndex = std::max<int32_t>(outMaxPayloadArgumentIndex, payloadArgMetadata.argIndex);
@@ -1207,6 +1208,9 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern
switch (src.argType) {
default:
if (DecodeError::success == populateKernelPayloadArgumentExt(dst, src, outErrReason)) {
return DecodeError::success;
}
outErrReason.append("DeviceBinaryFormat::zebin : Invalid arg type in cross thread data section in context of : " + kernelName + ".\n");
return DecodeError::invalidBinary; // unsupported

View File

@@ -22,6 +22,7 @@ namespace Zebin::ZeInfo {
inline constexpr NEO::Zebin::ZeInfo::Types::Version zeInfoDecoderVersion{1, 54};
using KernelExecutionEnvBaseT = Types::Kernel::ExecutionEnv::ExecutionEnvBaseT;
using KernelPayloadArgBaseT = Types::Kernel::PayloadArgument::PayloadArgumentBaseT;
template <typename T>
bool readZeInfoValueChecked(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &node, T &outValue, ConstStringRef context, std::string &outErrReason);

View File

@@ -17,6 +17,10 @@ void readZeInfoValueCheckedExtra(const NEO::Yaml::YamlParser &parser, const NEO:
encounterUnknownZeInfoAttribute(entry.str(), outErrReason, outWarning, error);
}
bool readZeInfoArgTypeNameCheckedExt(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &payloadArgumentMemberNd, KernelPayloadArgBaseT &outKernelPayArg) {
return false;
}
namespace Types::Kernel::ExecutionEnv {
ExecutionEnvExt *allocateExecEnvExt() {
return nullptr;
@@ -28,4 +32,16 @@ void freeExecEnvExt(ExecutionEnvExt *envExt) {
void populateKernelExecutionEnvironmentExt(KernelDescriptor &dst, const KernelExecutionEnvBaseT &execEnv, const Types::Version &srcZeInfoVersion) {
}
namespace Types::Kernel::PayloadArgument {
PayloadArgumentExtT *allocatePayloadArgumentExt() {
return nullptr;
}
void freePayloadArgumentExt(PayloadArgumentExtT *pPayArgExt) {
}
} // namespace Types::Kernel::PayloadArgument
DecodeError populateKernelPayloadArgumentExt(NEO::KernelDescriptor &dst, const KernelPayloadArgBaseT &src, std::string &outErrReason) {
return DecodeError::unhandledBinary;
}
} // namespace NEO::Zebin::ZeInfo

View File

@@ -13,4 +13,8 @@ namespace NEO::Zebin::ZeInfo {
void populateKernelExecutionEnvironmentExt(KernelDescriptor &dst, const KernelExecutionEnvBaseT &execEnv, const Types::Version &srcZeInfoVersion);
DecodeError populateKernelPayloadArgumentExt(NEO::KernelDescriptor &dst, const KernelPayloadArgBaseT &src, std::string &outErrReason);
bool readZeInfoArgTypeNameCheckedExt(const NEO::Yaml::YamlParser &parser, const NEO::Yaml::Node &payloadArgumentMemberNd, KernelPayloadArgBaseT &outKernelPayArg);
} // namespace NEO::Zebin::ZeInfo