diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index 06e57cc7fb..94d39bb309 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -352,6 +352,12 @@ ze_result_t DeviceImp::getCommandQueueGroupProperties(uint32_t *pCount, ze_result_t DeviceImp::createImage(const ze_image_desc_t *desc, ze_image_handle_t *phImage) { auto productFamily = neoDevice->getHardwareInfo().platform.eProductFamily; Image *pImage = nullptr; + + if (neoDevice->getDeviceInfo().imageSupport == false) { + *phImage = nullptr; + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + auto result = Image::create(productFamily, this, desc, &pImage); if (result == ZE_RESULT_SUCCESS) { *phImage = pImage->toHandle(); diff --git a/level_zero/core/test/unit_tests/sources/device/test_device.cpp b/level_zero/core/test/unit_tests/sources/device/test_device.cpp index 8329ba75e3..0ce31825c8 100644 --- a/level_zero/core/test/unit_tests/sources/device/test_device.cpp +++ b/level_zero/core/test/unit_tests/sources/device/test_device.cpp @@ -3478,6 +3478,24 @@ TEST(zeDevice, givenNoImagesSupportedWhenGettingImagePropertiesThenZeroValuesAre EXPECT_EQ(0u, properties.maxWriteImageArgs); } +TEST(zeDevice, givenNoImagesSupportedWhenCreatingImageErrorReturns) { + ze_result_t errorValue; + + DriverHandleImp driverHandle{}; + NEO::MockDevice *neoDevice = (NEO::MockDevice::createWithNewExecutionEnvironment(NEO::defaultHwInfo.get(), 0)); + auto device = std::unique_ptr(Device::create(&driverHandle, neoDevice, false, &errorValue)); + + ze_image_handle_t image = {}; + ze_image_desc_t desc = {}; + desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; + + neoDevice->deviceInfo.imageSupport = false; + + auto result = device->createImage(&desc, &image); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); + EXPECT_EQ(nullptr, image); +} + class MockCacheReservation : public CacheReservation { public: ~MockCacheReservation() override = default;