Handle implicit args buffer info in zebin

Related-To: NEO-5081, IGC-4710
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2022-02-23 18:48:58 +00:00
committed by Compute-Runtime-Automation
parent 0634aa3f1b
commit 3b7fbef826
3 changed files with 45 additions and 1 deletions

View File

@@ -217,6 +217,7 @@ static constexpr ConstStringRef argBypointer("arg_bypointer");
static constexpr ConstStringRef bufferOffset("buffer_offset");
static constexpr ConstStringRef printfBuffer("printf_buffer");
static constexpr ConstStringRef workDimensions("work_dimensions");
static constexpr ConstStringRef implicitArgBuffer("implicit_arg_buffer");
} // namespace ArgType
namespace MemoryAddressingMode {
static constexpr ConstStringRef stateless("stateless");
@@ -399,7 +400,8 @@ enum ArgType : uint8_t {
ArgTypeArgBypointer,
ArgTypeBufferOffset,
ArgTypePrintfBuffer,
ArgTypeWorkDimensions
ArgTypeWorkDimensions,
ArgTypeImplicitArgBuffer
};
namespace PerThreadPayloadArgument {

View File

@@ -373,6 +373,8 @@ bool readEnumChecked(const Yaml::Token *token, NEO::Elf::ZebinKernelMetadata::Ty
out = ArgTypeT::ArgTypePrintfBuffer;
} else if (tokenValue == PayloadArgument::ArgType::workDimensions) {
out = ArgTypeT::ArgTypeWorkDimensions;
} else if (tokenValue == PayloadArgument::ArgType::implicitArgBuffer) {
out = ArgTypeT::ArgTypeImplicitArgBuffer;
} else {
outErrReason.append("DeviceBinaryFormat::Zebin::" + NEO::Elf::SectionsNamesZebin::zeInfo.str() + " : Unhandled \"" + tokenValue.str() + "\" argument type in context of " + context.str() + "\n");
return false;
@@ -904,6 +906,11 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
dst.payloadMappings.dispatchTraits.workDim = src.offset;
break;
}
case NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeImplicitArgBuffer: {
dst.payloadMappings.implicitArgs.implcitArgsBuffer = src.offset;
dst.kernelAttributes.flags.requiresImplicitArgs = true;
break;
}
}
return DecodeError::Success;