diff --git a/shared/source/device_binary_format/zebin/zeinfo.h b/shared/source/device_binary_format/zebin/zeinfo.h index d5dc34a1c6..026da40cb4 100644 --- a/shared/source/device_binary_format/zebin/zeinfo.h +++ b/shared/source/device_binary_format/zebin/zeinfo.h @@ -128,6 +128,7 @@ inline constexpr ConstStringRef scratchPointer("scratch_pointer"); inline constexpr ConstStringRef regionGroupSize("region_group_size"); inline constexpr ConstStringRef regionGroupDimension("region_group_dimension"); inline constexpr ConstStringRef regionGroupWgCount("region_group_wg_count"); +inline constexpr ConstStringRef regionGroupBarrierBuffer("region_group_barrier_buffer"); namespace Image { inline constexpr ConstStringRef width("image_width"); @@ -506,6 +507,7 @@ enum ArgType : uint8_t { argTypeRegionGroupSize, argTypeRegionGroupDimension, argTypeRegionGroupWgCount, + argTypeRegionGroupBarrierBuffer, argTypeMax }; diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp index 6668b66b05..5d793c4013 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp @@ -1394,6 +1394,9 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern case Types::Kernel::argTypeRegionGroupWgCount: return populateWithOffsetChecked(dst.payloadMappings.dispatchTraits.regionGroupWgCount, sizeof(int32_t), Tags::Kernel::PayloadArgument::ArgType::regionGroupWgCount); + + case Types::Kernel::argTypeRegionGroupBarrierBuffer: + return populateWithOffsetChecked(dst.payloadMappings.dispatchTraits.regionGroupBarrierBuffer, sizeof(int64_t), Tags::Kernel::PayloadArgument::ArgType::regionGroupBarrierBuffer); } UNREACHABLE(); diff --git a/shared/source/device_binary_format/zebin/zeinfo_enum_lookup.h b/shared/source/device_binary_format/zebin/zeinfo_enum_lookup.h index f6393126e4..91eaf07172 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_enum_lookup.h +++ b/shared/source/device_binary_format/zebin/zeinfo_enum_lookup.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022-2023 Intel Corporation + * Copyright (C) 2022-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -22,7 +22,7 @@ using namespace Tags::Kernel::PayloadArgument::ArgType::Sampler::Vme; using ArgType = Types::Kernel::ArgType; inline constexpr ConstStringRef name = "argument type"; -inline constexpr LookupArray lookup({{ +inline constexpr LookupArray lookup({{ {packedLocalIds, ArgType::argTypePackedLocalIds}, {localId, ArgType::argTypeLocalId}, {localSize, ArgType::argTypeLocalSize}, @@ -67,6 +67,7 @@ inline constexpr LookupArray lookup({{ {regionGroupSize, ArgType::argTypeRegionGroupSize}, {regionGroupDimension, ArgType::argTypeRegionGroupDimension}, {regionGroupWgCount, ArgType::argTypeRegionGroupWgCount}, + {regionGroupBarrierBuffer, ArgType::argTypeRegionGroupBarrierBuffer}, }}); static_assert(lookup.size() == ArgType::argTypeMax - 1, "Every enum field must be present"); } // namespace ArgType diff --git a/shared/source/kernel/kernel_descriptor.h b/shared/source/kernel/kernel_descriptor.h index 24b6469d97..0d9ffeda8d 100644 --- a/shared/source/kernel/kernel_descriptor.h +++ b/shared/source/kernel/kernel_descriptor.h @@ -158,6 +158,7 @@ struct KernelDescriptor { CrossThreadDataOffset regionGroupSize[3] = {undefined, undefined, undefined}; CrossThreadDataOffset regionGroupDimension = undefined; CrossThreadDataOffset regionGroupWgCount = undefined; + CrossThreadDataOffset regionGroupBarrierBuffer = undefined; } dispatchTraits; struct { diff --git a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp index 9df470f1b0..2bf198626d 100644 --- a/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp +++ b/shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp @@ -5104,6 +5104,23 @@ TEST_F(decodeZeInfoKernelEntryTest, givenRegionArgTypesWhenArgSizeIsCorrectThenR EXPECT_TRUE(warnings.empty()) << warnings; EXPECT_EQ(16, kernelDescriptor->payloadMappings.dispatchTraits.regionGroupWgCount); + + ConstStringRef zeInfoRegionGroupBarrier = R"===( + kernels: + - name : some_kernel + execution_env: + simd_size: 32 + payload_arguments: + - arg_type : region_group_barrier_buffer + offset : 16 + size : 8 +)==="; + err = decodeZeInfoKernelEntry(zeInfoRegionGroupBarrier); + EXPECT_EQ(NEO::DecodeError::success, err); + EXPECT_TRUE(errors.empty()) << errors; + EXPECT_TRUE(warnings.empty()) << warnings; + + EXPECT_EQ(16, kernelDescriptor->payloadMappings.dispatchTraits.regionGroupBarrierBuffer); } TEST_F(decodeZeInfoKernelEntryTest, GivenArgTypeGlobalSizeWhenArgSizeValidThenPopulatesKernelDescriptor) {