feat(zebin): add support for sync buffer

Adds support in zebinary for sync buffer required for global barriers.

Signed-off-by: Krystian Chmielewski <krystian.chmielewski@intel.com>
This commit is contained in:
Krystian Chmielewski
2022-10-27 10:59:05 +00:00
committed by Compute-Runtime-Automation
parent d8a66cd14d
commit 70da7c4b65
4 changed files with 51 additions and 3 deletions

View File

@@ -212,7 +212,8 @@ constexpr ConstStringRef bufferOffset("buffer_offset");
constexpr ConstStringRef printfBuffer("printf_buffer");
constexpr ConstStringRef workDimensions("work_dimensions");
constexpr ConstStringRef implicitArgBuffer("implicit_arg_buffer");
constexpr ConstStringRef inlineSampler("arg_inline_sampler");
constexpr ConstStringRef syncBuffer("sync_buffer");
namespace Image {
constexpr ConstStringRef width("image_width");
constexpr ConstStringRef height("image_height");
@@ -565,6 +566,7 @@ enum ArgType : uint8_t {
ArgTypeVmeSubpixelMode,
ArgTypeVmeSadAdjustMode,
ArgTypeVmeSearchPathType,
ArgTypeSyncBuffer,
ArgTypeMax
};

View File

@@ -22,7 +22,7 @@ using namespace Tags::Kernel::PayloadArgument::ArgType::Sampler::Vme;
using ArgType = Types::Kernel::ArgType;
constexpr ConstStringRef name = "argument type";
constexpr LookupArray<ConstStringRef, ArgType, 34> lookup({{{packedLocalIds, ArgType::ArgTypePackedLocalIds},
constexpr LookupArray<ConstStringRef, ArgType, 35> lookup({{{packedLocalIds, ArgType::ArgTypePackedLocalIds},
{localId, ArgType::ArgTypeLocalId},
{localSize, ArgType::ArgTypeLocalSize},
{groupCount, ArgType::ArgTypeGroupCount},
@@ -55,7 +55,8 @@ constexpr LookupArray<ConstStringRef, ArgType, 34> lookup({{{packedLocalIds, Arg
{blockType, ArgType::ArgTypeVmeMbBlockType},
{subpixelMode, ArgType::ArgTypeVmeSubpixelMode},
{sadAdjustMode, ArgType::ArgTypeVmeSadAdjustMode},
{searchPathType, ArgType::ArgTypeVmeSearchPathType}}});
{searchPathType, ArgType::ArgTypeVmeSearchPathType},
{syncBuffer, ArgType::ArgTypeSyncBuffer}}});
static_assert(lookup.size() == ArgType::ArgTypeMax - 1, "Every enum field must be present");
} // namespace ArgType

View File

@@ -993,6 +993,13 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
break;
}
case NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeSyncBuffer: {
dst.kernelAttributes.flags.usesSyncBuffer = true;
dst.payloadMappings.implicitArgs.syncBufferAddress.stateless = src.offset;
dst.payloadMappings.implicitArgs.syncBufferAddress.pointerSize = src.size;
break;
}
case NEO::Elf::ZebinKernelMetadata::Types::Kernel::ArgTypeWorkDimensions: {
if (4 != src.size) {
outErrReason.append("DeviceBinaryFormat::Zebin : Invalid size for argument of type " + NEO::Elf::ZebinKernelMetadata::Tags::Kernel::PayloadArgument::ArgType::workDimensions.str() + " in context of : " + dst.kernelMetadata.kernelName + ". Expected 4. Got : " + std::to_string(src.size) + "\n");
@@ -1083,6 +1090,7 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
getVmeDescriptor()->searchPathType = src.offset;
break;
}
return DecodeError::Success;
}