diff --git a/sycl/test-e2e/bindless_images/image_reqs_get_info.cpp b/sycl/test-e2e/bindless_images/image_reqs_get_info.cpp index 758abf49ef36b..a6d548cdc902a 100644 --- a/sycl/test-e2e/bindless_images/image_reqs_get_info.cpp +++ b/sycl/test-e2e/bindless_images/image_reqs_get_info.cpp @@ -1,7 +1,8 @@ // REQUIRES: aspect-ext_oneapi_bindless_images -// UNSUPPORTED: level_zero -// UNSUPPORTED-INTENDED: The feature is not implemented in the Level Zero stack. +// These features are only partly implemented in the Level Zero stack. +// Only max_image_linear_width and max_image_linear_height are supported in the +// Level Zero stack. // https://github.com/intel/llvm/issues/17663 // RUN: %{build} -o %t.out @@ -26,20 +27,40 @@ int main() { // These can be different depending on the device so we cannot test that the // values are correct // But we should at least see that the query itself works - auto pitchAlign = dev.get_info< - sycl::ext::oneapi::experimental::info::device::image_row_pitch_align>(); - auto maxPitch = dev.get_info(); - auto maxWidth = dev.get_info(); - auto maxheight = dev.get_info(); + + sycl::backend backend = dev.get_backend(); + + size_t pitchAlign = 0; + size_t maxPitch = 0; + size_t maxWidth = 0; + size_t maxheight = 0; + + // Level Zero does not currently support these queries. Only CUDA does. + if (backend == sycl::backend::ext_oneapi_cuda) { + pitchAlign = dev.get_info(); + maxPitch = dev.get_info(); + } + + if (backend == sycl::backend::ext_oneapi_cuda || + backend == sycl::backend::ext_oneapi_level_zero) { + maxWidth = dev.get_info(); + maxheight = dev.get_info(); + } #ifdef VERBOSE_PRINT - std::cout << "image_row_pitch_align: " << pitchAlign - << "\nmax_image_linear_row_pitch: " << maxPitch - << "\nmax_image_linear_width: " << maxWidth - << "\nmax_image_linear_height: " << maxheight << "\n"; + if (backend == sycl::backend::ext_oneapi_cuda) { + std::cout << "image_row_pitch_align: " << pitchAlign + << "\nmax_image_linear_row_pitch: " << maxPitch + << "\nmax_image_linear_width: " << maxWidth + << "\nmax_image_linear_height: " << maxheight << "\n"; + } else if (backend == sycl::backend::ext_oneapi_level_zero) { + std::cout << "\nmax_image_linear_width: " << maxWidth + << "\nmax_image_linear_height: " << maxheight << "\n"; + } #endif } catch (sycl::exception e) { diff --git a/unified-runtime/source/adapters/level_zero/device.cpp b/unified-runtime/source/adapters/level_zero/device.cpp index 32c3ea19b23aa..eb19063999159 100644 --- a/unified-runtime/source/adapters/level_zero/device.cpp +++ b/unified-runtime/source/adapters/level_zero/device.cpp @@ -1139,9 +1139,31 @@ ur_result_t urDeviceGetInfo( return ReturnValue(Device->Platform->ZeBindlessImagesExtensionSupported && Device->ZeDeviceImageProperties->maxImageDims2D > 0); } + case UR_DEVICE_INFO_MAX_IMAGE_LINEAR_WIDTH_EXP: { + ze_device_image_properties_t imageProps = {}; + imageProps.stype = ZE_STRUCTURE_TYPE_DEVICE_IMAGE_PROPERTIES; + ze_device_pitched_alloc_exp_properties_t imageAllocProps = {}; + imageAllocProps.stype = + ZE_STRUCTURE_TYPE_PITCHED_ALLOC_DEVICE_EXP_PROPERTIES; + imageProps.pNext = (void *)&imageAllocProps; + + ZE_CALL_NOCHECK(zeDeviceGetImageProperties, (ZeDevice, &imageProps)); + + return ReturnValue(imageAllocProps.maxImageLinearWidth); + } + case UR_DEVICE_INFO_MAX_IMAGE_LINEAR_HEIGHT_EXP: { + ze_device_image_properties_t imageProps = {}; + imageProps.stype = ZE_STRUCTURE_TYPE_DEVICE_IMAGE_PROPERTIES; + ze_device_pitched_alloc_exp_properties_t imageAllocProps = {}; + imageAllocProps.stype = + ZE_STRUCTURE_TYPE_PITCHED_ALLOC_DEVICE_EXP_PROPERTIES; + imageProps.pNext = (void *)&imageAllocProps; + + ZE_CALL_NOCHECK(zeDeviceGetImageProperties, (ZeDevice, &imageProps)); + + return ReturnValue(imageAllocProps.maxImageLinearHeight); + } case UR_DEVICE_INFO_IMAGE_PITCH_ALIGN_EXP: - case UR_DEVICE_INFO_MAX_IMAGE_LINEAR_WIDTH_EXP: - case UR_DEVICE_INFO_MAX_IMAGE_LINEAR_HEIGHT_EXP: case UR_DEVICE_INFO_MAX_IMAGE_LINEAR_PITCH_EXP: UR_LOG(ERR, "Unsupported ParamName in urGetDeviceInfo"); UR_LOG(ERR, "ParamName=%{}(0x{})", ParamName, logger::toHex(ParamName));