Ignore media block 2d patch token when media block support is disabled
Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com> Related-To: NEO-5820
This commit is contained in:
parent
734e22857e
commit
14bc9fb0bf
|
@ -588,23 +588,26 @@ ze_result_t KernelImp::setArgBuffer(uint32_t argIndex, size_t argSize, const voi
|
|||
}
|
||||
|
||||
ze_result_t KernelImp::setArgImage(uint32_t argIndex, size_t argSize, const void *argVal) {
|
||||
const auto &arg = kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex].as<NEO::ArgDescImage>();
|
||||
auto isMediaBlockImage = kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex].getExtendedTypeInfo().isMediaBlockImage;
|
||||
if (argVal == nullptr) {
|
||||
residencyContainer[argIndex] = nullptr;
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
const auto &hwInfo = module->getDevice()->getNEODevice()->getHardwareInfo();
|
||||
auto isMediaBlockImage = (hwInfo.capabilityTable.supportsMediaBlock &&
|
||||
kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex].getExtendedTypeInfo().isMediaBlockImage);
|
||||
const auto &arg = kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex].as<NEO::ArgDescImage>();
|
||||
const auto image = Image::fromHandle(*static_cast<const ze_image_handle_t *>(argVal));
|
||||
|
||||
if (kernelImmData->getDescriptor().kernelAttributes.imageAddressingMode == NEO::KernelDescriptor::Bindless) {
|
||||
image->copySurfaceStateToSSH(patchBindlessSurfaceState(image->getAllocation(), arg.bindless), 0u, isMediaBlockImage);
|
||||
} else {
|
||||
image->copySurfaceStateToSSH(surfaceStateHeapData.get(), arg.bindful, isMediaBlockImage);
|
||||
}
|
||||
|
||||
residencyContainer[argIndex] = image->getAllocation();
|
||||
|
||||
auto imageInfo = image->getImageInfo();
|
||||
|
||||
auto clChannelType = getClChannelDataType(image->getImageDesc().format);
|
||||
auto clChannelOrder = getClChannelOrder(image->getImageDesc().format);
|
||||
NEO::patchNonPointer<size_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.imgWidth, imageInfo.imgDesc.imageWidth);
|
||||
|
|
|
@ -1602,6 +1602,51 @@ HWTEST2_F(SetKernelArg, givenImageAndBindfulKernelWhenSetArgImageThenCopySurface
|
|||
EXPECT_EQ(imageHW->passedSurfaceStateOffset, imageArg.bindful);
|
||||
}
|
||||
|
||||
template <GFXCORE_FAMILY gfxCoreFamily>
|
||||
struct MyMockImageMediaBlock : public WhiteBox<::L0::ImageCoreFamily<gfxCoreFamily>> {
|
||||
void copySurfaceStateToSSH(void *surfaceStateHeap, const uint32_t surfaceStateOffset, bool isMediaBlockArg) override {
|
||||
isMediaBlockPassedValue = isMediaBlockArg;
|
||||
}
|
||||
bool isMediaBlockPassedValue = false;
|
||||
};
|
||||
|
||||
HWTEST2_F(SetKernelArg, givenSupportsMediaBlockAndIsMediaBlockImageWhenSetArgImageIsCalledThenIsMediaBlockArgIsPassedCorrectly, ImageSupport) {
|
||||
auto hwInfo = device->getNEODevice()->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
createKernel();
|
||||
auto argIndex = 3u;
|
||||
auto &arg = const_cast<NEO::ArgDescriptor &>(kernel->kernelImmData->getDescriptor().payloadMappings.explicitArgs[argIndex]);
|
||||
auto imageHW = std::make_unique<MyMockImageMediaBlock<gfxCoreFamily>>();
|
||||
ze_image_desc_t desc = {};
|
||||
auto ret = imageHW->initialize(device, &desc);
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, ret);
|
||||
auto handle = imageHW->toHandle();
|
||||
|
||||
{
|
||||
hwInfo->capabilityTable.supportsMediaBlock = true;
|
||||
arg.getExtendedTypeInfo().isMediaBlockImage = true;
|
||||
kernel->setArgImage(argIndex, sizeof(imageHW.get()), &handle);
|
||||
EXPECT_TRUE(imageHW->isMediaBlockPassedValue);
|
||||
}
|
||||
{
|
||||
hwInfo->capabilityTable.supportsMediaBlock = false;
|
||||
arg.getExtendedTypeInfo().isMediaBlockImage = true;
|
||||
kernel->setArgImage(argIndex, sizeof(imageHW.get()), &handle);
|
||||
EXPECT_FALSE(imageHW->isMediaBlockPassedValue);
|
||||
}
|
||||
{
|
||||
hwInfo->capabilityTable.supportsMediaBlock = true;
|
||||
arg.getExtendedTypeInfo().isMediaBlockImage = false;
|
||||
kernel->setArgImage(argIndex, sizeof(imageHW.get()), &handle);
|
||||
EXPECT_FALSE(imageHW->isMediaBlockPassedValue);
|
||||
}
|
||||
{
|
||||
hwInfo->capabilityTable.supportsMediaBlock = false;
|
||||
arg.getExtendedTypeInfo().isMediaBlockImage = false;
|
||||
kernel->setArgImage(argIndex, sizeof(imageHW.get()), &handle);
|
||||
EXPECT_FALSE(imageHW->isMediaBlockPassedValue);
|
||||
}
|
||||
}
|
||||
|
||||
using ImportHostPointerSetKernelArg = Test<ImportHostPointerModuleFixture>;
|
||||
HWTEST_F(ImportHostPointerSetKernelArg, givenHostPointerImportedWhenSettingKernelArgThenUseHostPointerAllocation) {
|
||||
createKernel();
|
||||
|
|
Loading…
Reference in New Issue