Skip to content

Commit 2258836

Browse files
Return proper ze_device_image_properties_t when images are not supported
Signed-off-by: Maciej Dziuban <[email protected]>
1 parent 97505ae commit 2258836

File tree

2 files changed

+77
-8
lines changed

2 files changed

+77
-8
lines changed

level_zero/core/source/device/device_imp.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -516,14 +516,25 @@ ze_result_t DeviceImp::imageGetProperties(const ze_image_desc_t *desc,
516516
ze_result_t DeviceImp::getDeviceImageProperties(ze_device_image_properties_t *pDeviceImageProperties) {
517517
const auto &deviceInfo = this->neoDevice->getDeviceInfo();
518518

519-
pDeviceImageProperties->maxImageDims1D = static_cast<uint32_t>(deviceInfo.image2DMaxWidth);
520-
pDeviceImageProperties->maxImageDims2D = static_cast<uint32_t>(deviceInfo.image2DMaxHeight);
521-
pDeviceImageProperties->maxImageDims3D = static_cast<uint32_t>(deviceInfo.image3DMaxDepth);
522-
pDeviceImageProperties->maxImageBufferSize = this->neoDevice->getDeviceInfo().imageMaxBufferSize;
523-
pDeviceImageProperties->maxImageArraySlices = static_cast<uint32_t>(deviceInfo.imageMaxArraySize);
524-
pDeviceImageProperties->maxSamplers = this->neoDevice->getDeviceInfo().maxSamplers;
525-
pDeviceImageProperties->maxReadImageArgs = this->neoDevice->getDeviceInfo().maxReadImageArgs;
526-
pDeviceImageProperties->maxWriteImageArgs = this->neoDevice->getDeviceInfo().maxWriteImageArgs;
519+
if (deviceInfo.imageSupport) {
520+
pDeviceImageProperties->maxImageDims1D = static_cast<uint32_t>(deviceInfo.image2DMaxWidth);
521+
pDeviceImageProperties->maxImageDims2D = static_cast<uint32_t>(deviceInfo.image2DMaxHeight);
522+
pDeviceImageProperties->maxImageDims3D = static_cast<uint32_t>(deviceInfo.image3DMaxDepth);
523+
pDeviceImageProperties->maxImageBufferSize = deviceInfo.imageMaxBufferSize;
524+
pDeviceImageProperties->maxImageArraySlices = static_cast<uint32_t>(deviceInfo.imageMaxArraySize);
525+
pDeviceImageProperties->maxSamplers = deviceInfo.maxSamplers;
526+
pDeviceImageProperties->maxReadImageArgs = deviceInfo.maxReadImageArgs;
527+
pDeviceImageProperties->maxWriteImageArgs = deviceInfo.maxWriteImageArgs;
528+
} else {
529+
pDeviceImageProperties->maxImageDims1D = 0u;
530+
pDeviceImageProperties->maxImageDims2D = 0u;
531+
pDeviceImageProperties->maxImageDims3D = 0u;
532+
pDeviceImageProperties->maxImageBufferSize = 0u;
533+
pDeviceImageProperties->maxImageArraySlices = 0u;
534+
pDeviceImageProperties->maxSamplers = 0u;
535+
pDeviceImageProperties->maxReadImageArgs = 0u;
536+
pDeviceImageProperties->maxWriteImageArgs = 0u;
537+
}
527538

528539
return ZE_RESULT_SUCCESS;
529540
}

level_zero/core/test/unit_tests/sources/device/test_device.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,5 +1038,63 @@ TEST(zeDevice, givenValidImagePropertiesStructWhenGettingImagePropertiesThenSucc
10381038
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
10391039
}
10401040

1041+
TEST(zeDevice, givenImagesSupportedWhenGettingImagePropertiesThenValidValuesAreReturned) {
1042+
DriverHandleImp driverHandle{};
1043+
NEO::MockDevice *neoDevice = (NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get(), 0));
1044+
auto device = std::unique_ptr<L0::Device>(Device::create(&driverHandle, neoDevice, 1, false));
1045+
DeviceInfo &deviceInfo = neoDevice->deviceInfo;
1046+
1047+
deviceInfo.imageSupport = true;
1048+
deviceInfo.image2DMaxWidth = 1;
1049+
deviceInfo.image2DMaxHeight = 2;
1050+
deviceInfo.image3DMaxDepth = 3;
1051+
deviceInfo.imageMaxBufferSize = 4;
1052+
deviceInfo.imageMaxArraySize = 5;
1053+
deviceInfo.maxSamplers = 6;
1054+
deviceInfo.maxReadImageArgs = 7;
1055+
deviceInfo.maxWriteImageArgs = 8;
1056+
1057+
ze_device_image_properties_t properties{};
1058+
ze_result_t result = zeDeviceGetImageProperties(device->toHandle(), &properties);
1059+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
1060+
EXPECT_EQ(deviceInfo.image2DMaxWidth, static_cast<uint64_t>(properties.maxImageDims1D));
1061+
EXPECT_EQ(deviceInfo.image2DMaxHeight, static_cast<uint64_t>(properties.maxImageDims2D));
1062+
EXPECT_EQ(deviceInfo.image3DMaxDepth, static_cast<uint64_t>(properties.maxImageDims3D));
1063+
EXPECT_EQ(deviceInfo.imageMaxBufferSize, properties.maxImageBufferSize);
1064+
EXPECT_EQ(deviceInfo.imageMaxArraySize, static_cast<uint64_t>(properties.maxImageArraySlices));
1065+
EXPECT_EQ(deviceInfo.maxSamplers, properties.maxSamplers);
1066+
EXPECT_EQ(deviceInfo.maxReadImageArgs, properties.maxReadImageArgs);
1067+
EXPECT_EQ(deviceInfo.maxWriteImageArgs, properties.maxWriteImageArgs);
1068+
}
1069+
1070+
TEST(zeDevice, givenNoImagesSupportedWhenGettingImagePropertiesThenZeroValuesAreReturned) {
1071+
DriverHandleImp driverHandle{};
1072+
NEO::MockDevice *neoDevice = (NEO::MockDevice::createWithNewExecutionEnvironment<NEO::MockDevice>(NEO::defaultHwInfo.get(), 0));
1073+
auto device = std::unique_ptr<L0::Device>(Device::create(&driverHandle, neoDevice, 1, false));
1074+
DeviceInfo &deviceInfo = neoDevice->deviceInfo;
1075+
1076+
neoDevice->deviceInfo.imageSupport = false;
1077+
deviceInfo.image2DMaxWidth = 1;
1078+
deviceInfo.image2DMaxHeight = 2;
1079+
deviceInfo.image3DMaxDepth = 3;
1080+
deviceInfo.imageMaxBufferSize = 4;
1081+
deviceInfo.imageMaxArraySize = 5;
1082+
deviceInfo.maxSamplers = 6;
1083+
deviceInfo.maxReadImageArgs = 7;
1084+
deviceInfo.maxWriteImageArgs = 8;
1085+
1086+
ze_device_image_properties_t properties{};
1087+
ze_result_t result = zeDeviceGetImageProperties(device->toHandle(), &properties);
1088+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
1089+
EXPECT_EQ(0u, properties.maxImageDims1D);
1090+
EXPECT_EQ(0u, properties.maxImageDims2D);
1091+
EXPECT_EQ(0u, properties.maxImageDims3D);
1092+
EXPECT_EQ(0u, properties.maxImageBufferSize);
1093+
EXPECT_EQ(0u, properties.maxImageArraySlices);
1094+
EXPECT_EQ(0u, properties.maxSamplers);
1095+
EXPECT_EQ(0u, properties.maxReadImageArgs);
1096+
EXPECT_EQ(0u, properties.maxWriteImageArgs);
1097+
}
1098+
10411099
} // namespace ult
10421100
} // namespace L0

0 commit comments

Comments
 (0)