diff --git a/shared/source/device_binary_format/zebin_decoder.cpp b/shared/source/device_binary_format/zebin_decoder.cpp index 28b24ed9ea..8d793ee4fc 100644 --- a/shared/source/device_binary_format/zebin_decoder.cpp +++ b/shared/source/device_binary_format/zebin_decoder.cpp @@ -687,6 +687,9 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type dst.kernelAttributes.numLocalIdChannels = static_cast(tupleSize); break; } + dst.kernelAttributes.localId[0] = tupleSize > 0; + dst.kernelAttributes.localId[1] = tupleSize > 1; + dst.kernelAttributes.localId[2] = tupleSize > 2; dst.kernelAttributes.perThreadDataSize = dst.kernelAttributes.simdSize; dst.kernelAttributes.perThreadDataSize *= sizeof(LocalIdT); dst.kernelAttributes.perThreadDataSize = alignUp(dst.kernelAttributes.perThreadDataSize, grfSize); @@ -711,6 +714,9 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type dst.kernelAttributes.numLocalIdChannels = static_cast(tupleSize); break; } + dst.kernelAttributes.localId[0] = tupleSize > 0; + dst.kernelAttributes.localId[1] = tupleSize > 1; + dst.kernelAttributes.localId[2] = tupleSize > 2; dst.kernelAttributes.simdSize = 1; dst.kernelAttributes.perThreadDataSize = dst.kernelAttributes.simdSize; dst.kernelAttributes.perThreadDataSize *= dst.kernelAttributes.numLocalIdChannels; 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 7e158ae0d9..77ab0e0986 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 @@ -3808,7 +3808,7 @@ kernels: EXPECT_TRUE(warnings.empty()) << warnings; } -TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidThenCalculateNumChannelAccordingly) { +TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidThenCalculateNumChannelAndSetEmitLocalIdAccordingly) { uint32_t simdSizes[] = {8, 16, 32}; uint32_t numChannelsOpts[] = {1, 2, 3}; @@ -3849,6 +3849,11 @@ TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidTh ASSERT_EQ(1U, programInfo.kernelInfos.size()); EXPECT_EQ(numChannels, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.numLocalIdChannels) << warnings << "simd : " << simdSize << ", num channels : " << numChannels; EXPECT_EQ(simdSize, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.simdSize) << warnings << "simd : " << simdSize << ", num channels : " << numChannels; + + const auto &emitLocalId = programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.localId; + EXPECT_EQ(static_cast(numChannels > 0), emitLocalId[0]); + EXPECT_EQ(static_cast(numChannels > 1), emitLocalId[1]); + EXPECT_EQ(static_cast(numChannels > 2), emitLocalId[2]); } } } @@ -3919,7 +3924,7 @@ kernels: EXPECT_TRUE(warnings.empty()) << warnings; } -TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsValidThenCalculateNumChannelAccordingly) { +TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsValidThenCalculateNumChannelAndSetEmitLocalIdAccordingly) { uint32_t simdSizes[] = {1}; uint32_t numChannelsOpts[] = {1, 2, 3}; @@ -3960,6 +3965,11 @@ TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsV ASSERT_EQ(1U, programInfo.kernelInfos.size()); EXPECT_EQ(numChannels, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.numLocalIdChannels) << warnings << "simd : " << simdSize << ", num channels : " << numChannels; EXPECT_EQ(simdSize, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.simdSize) << warnings << "simd : " << simdSize << ", num channels : " << numChannels; + + const auto &emitLocalId = programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.localId; + EXPECT_EQ(static_cast(numChannels > 0), emitLocalId[0]); + EXPECT_EQ(static_cast(numChannels > 1), emitLocalId[1]); + EXPECT_EQ(static_cast(numChannels > 2), emitLocalId[2]); } } } @@ -5099,4 +5109,4 @@ TEST_F(IntelGTNotesFixture, WhenValidatingTargetDeviceGivenValidTargetDeviceAndI ASSERT_TRUE(outErrReason.empty()); EXPECT_FALSE(validateTargetDevice(elf, targetDevice)); -} +} \ No newline at end of file