feat(zebin): Support for is_pipe ptr argument attribute

Pipe qualifier must be set (known) on kernel initialization in order
to properly chose kernel arg handler. A new attribute is_pipe has been
introduced; this commit adds support for it.

Signed-off-by: Kacper Nowak <kacper.nowak@intel.com>
This commit is contained in:
Kacper Nowak
2022-11-21 13:26:29 +00:00
committed by Compute-Runtime-Automation
parent efe1afb698
commit 50df7f430e
3 changed files with 51 additions and 0 deletions

View File

@@ -197,6 +197,7 @@ constexpr ConstStringRef samplerType("sampler_type");
constexpr ConstStringRef addrMode("sampler_desc_addrmode");
constexpr ConstStringRef filterMode("sampler_desc_filtermode");
constexpr ConstStringRef normalized("sampler_desc_normalized");
constexpr ConstStringRef isPipe("is_pipe");
namespace ArgType {
constexpr ConstStringRef localSize("local_size");
@@ -686,6 +687,7 @@ struct PayloadArgumentBaseT {
ImageType imageType = ImageTypeUnknown;
bool imageTransformable = false;
SamplerType samplerType = SamplerTypeUnknown;
bool isPipe = false;
};
} // namespace PayloadArgument

View File

@@ -585,6 +585,8 @@ DecodeError readZeInfoPayloadArguments(const NEO::Yaml::YamlParser &parser, cons
validPayload &= readZeInfoValueChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.imageTransformable, context, outErrReason);
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::samplerType == key) {
validPayload &= readZeInfoEnumChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.samplerType, context, outErrReason);
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::isPipe == key) {
validPayload &= readZeInfoValueChecked(parser, payloadArgumentMemberNd, payloadArgMetadata.isPipe, context, outErrReason);
} else {
outWarning.append("DeviceBinaryFormat::Zebin::" + NEO::Elf::SectionsNamesZebin::zeInfo.str() + " : Unknown entry \"" + key.str() + "\" for payload argument in context of " + context.str() + "\n");
}
@@ -868,6 +870,9 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
argTraits.argByValSize = sizeof(void *);
if (dst.payloadMappings.explicitArgs[src.argIndex].is<NEO::ArgDescriptor::ArgTPointer>()) {
dst.payloadMappings.explicitArgs[src.argIndex].as<ArgDescPointer>().accessedUsingStatelessAddressingMode = false;
if (src.isPipe) {
argTraits.typeQualifiers.pipeQual = true;
}
}
switch (src.addrmode) {
default: