fix: store image arg size in kernel descriptor

- use arg size when patching bindless offset

Related-To: HSD-18042502539

Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
Mateusz Hoppe
2025-06-20 16:16:51 +00:00
committed by Compute-Runtime-Automation
parent e3fecb932a
commit b7580a3998
5 changed files with 5 additions and 2 deletions

View File

@@ -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<uint32_t>(bindlessSlotOffset));

View File

@@ -1320,6 +1320,7 @@ DecodeError populateKernelPayloadArgument(NEO::KernelDescriptor &dst, const Kern
dst.kernelAttributes.numArgsStateful++;
} else if (dst.payloadMappings.explicitArgs[src.argIndex].is<NEO::ArgDescriptor::argTImage>()) {
dst.payloadMappings.explicitArgs[src.argIndex].as<ArgDescImage>(false).bindless = src.offset;
dst.payloadMappings.explicitArgs[src.argIndex].as<ArgDescImage>(false).size = src.size;
dst.kernelAttributes.numArgsStateful++;
} else {
dst.payloadMappings.explicitArgs[src.argIndex].as<ArgDescSampler>(false).bindless = src.offset;

View File

@@ -105,6 +105,7 @@ struct ArgDescImage final {
CrossThreadDataOffset flatPitch = undefined<CrossThreadDataOffset>;
} metadataPayload;
NEOImageType imageType;
uint8_t size = undefined<uint8_t>;
};
struct ArgDescSampler final {

View File

@@ -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

View File

@@ -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;
}