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) {
|
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) {
|
if (argVal == nullptr) {
|
||||||
residencyContainer[argIndex] = nullptr;
|
residencyContainer[argIndex] = nullptr;
|
||||||
return ZE_RESULT_SUCCESS;
|
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));
|
const auto image = Image::fromHandle(*static_cast<const ze_image_handle_t *>(argVal));
|
||||||
|
|
||||||
if (kernelImmData->getDescriptor().kernelAttributes.imageAddressingMode == NEO::KernelDescriptor::Bindless) {
|
if (kernelImmData->getDescriptor().kernelAttributes.imageAddressingMode == NEO::KernelDescriptor::Bindless) {
|
||||||
image->copySurfaceStateToSSH(patchBindlessSurfaceState(image->getAllocation(), arg.bindless), 0u, isMediaBlockImage);
|
image->copySurfaceStateToSSH(patchBindlessSurfaceState(image->getAllocation(), arg.bindless), 0u, isMediaBlockImage);
|
||||||
} else {
|
} else {
|
||||||
image->copySurfaceStateToSSH(surfaceStateHeapData.get(), arg.bindful, isMediaBlockImage);
|
image->copySurfaceStateToSSH(surfaceStateHeapData.get(), arg.bindful, isMediaBlockImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
residencyContainer[argIndex] = image->getAllocation();
|
residencyContainer[argIndex] = image->getAllocation();
|
||||||
|
|
||||||
auto imageInfo = image->getImageInfo();
|
auto imageInfo = image->getImageInfo();
|
||||||
|
|
||||||
auto clChannelType = getClChannelDataType(image->getImageDesc().format);
|
auto clChannelType = getClChannelDataType(image->getImageDesc().format);
|
||||||
auto clChannelOrder = getClChannelOrder(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);
|
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);
|
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>;
|
using ImportHostPointerSetKernelArg = Test<ImportHostPointerModuleFixture>;
|
||||||
HWTEST_F(ImportHostPointerSetKernelArg, givenHostPointerImportedWhenSettingKernelArgThenUseHostPointerAllocation) {
|
HWTEST_F(ImportHostPointerSetKernelArg, givenHostPointerImportedWhenSettingKernelArgThenUseHostPointerAllocation) {
|
||||||
createKernel();
|
createKernel();
|
||||||
|
|
Loading…
Reference in New Issue