diff --git a/level_zero/core/source/kernel/kernel_imp.cpp b/level_zero/core/source/kernel/kernel_imp.cpp index 12baff1a5c..16c07a8063 100644 --- a/level_zero/core/source/kernel/kernel_imp.cpp +++ b/level_zero/core/source/kernel/kernel_imp.cpp @@ -827,7 +827,7 @@ ze_result_t KernelImp::setArgImage(uint32_t argIndex, size_t argSize, const void auto ssInHeap = image->getBindlessSlot(); auto patchLocation = ptrOffset(getCrossThreadData(), arg.bindless); auto bindlessSlotOffset = ssInHeap->surfaceStateOffset; - uint32_t patchSize = this->heaplessEnabled ? 8u : 4u; + uint32_t patchSize = NEO::isUndefined(arg.size) ? 0 : arg.size; uint64_t patchValue = this->heaplessEnabled ? bindlessSlotOffset : gfxCoreHelper.getBindlessSurfaceExtendedMessageDescriptorValue(static_cast(bindlessSlotOffset)); diff --git a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp index e443ee558a..8832daeffa 100644 --- a/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp +++ b/shared/source/device_binary_format/zebin/zeinfo_decoder.cpp @@ -1320,6 +1320,7 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern dst.kernelAttributes.numArgsStateful++; } else if (dst.payloadMappings.explicitArgs[src.argIndex].is()) { dst.payloadMappings.explicitArgs[src.argIndex].as(false).bindless = src.offset; + dst.payloadMappings.explicitArgs[src.argIndex].as(false).size = src.size; dst.kernelAttributes.numArgsStateful++; } else { dst.payloadMappings.explicitArgs[src.argIndex].as(false).bindless = src.offset; diff --git a/shared/source/kernel/kernel_arg_descriptor.h b/shared/source/kernel/kernel_arg_descriptor.h index 84ec05f63f..1529bf3cf7 100644 --- a/shared/source/kernel/kernel_arg_descriptor.h +++ b/shared/source/kernel/kernel_arg_descriptor.h @@ -105,6 +105,7 @@ struct ArgDescImage final { CrossThreadDataOffset flatPitch = undefined; } metadataPayload; NEOImageType imageType; + uint8_t size = undefined; }; struct ArgDescSampler final { diff --git a/shared/test/common/mocks/mock_modules_zebin.h b/shared/test/common/mocks/mock_modules_zebin.h index 62232b38e1..125d274125 100644 --- a/shared/test/common/mocks/mock_modules_zebin.h +++ b/shared/test/common/mocks/mock_modules_zebin.h @@ -177,7 +177,7 @@ kernels: sampler_index: 0 - arg_type: arg_bypointer offset: 0 - size: 0 + size: 4 arg_index: 3 addrmode: stateful addrspace: image 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 652462cbcf..9bd3762a7e 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 @@ -4843,6 +4843,7 @@ TEST_F(decodeZeInfoKernelEntryTest, GivenPointerArgWhenMemoryAddressingModeIsKno break; case AddressingMode::memoryAddressingModeBindless: EXPECT_EQ(24U, argAsImage.bindless); + EXPECT_EQ(8U, argAsImage.size); EXPECT_EQ(32U, argAsSampler.bindless); break; }