From f087a4cf704710abf7802d360800bb81f1daceb4 Mon Sep 17 00:00:00 2001 From: "Lu, Wenbin" Date: Thu, 9 Mar 2023 19:30:01 +0000 Subject: [PATCH] Add extension property reporting for zeImageViewCreateExt This is a follow-up of #18444 `ZE_extension_image_view` and `ZE_extension_image_view_planar` should be reported by NEO, and `ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC` needs to be recognized Related-to: LOCI-3769 Signed-off-by: Lu, Wenbin --- .../core/source/driver/driver_handle_imp.h | 4 +- .../core/source/helpers/properties_parser.h | 7 ++- .../test/black_box_tests/zello_image_view.cpp | 10 ++++ .../unit_tests/sources/image/test_image.cpp | 57 ++++++++++++++++++- 4 files changed, 75 insertions(+), 3 deletions(-) diff --git a/level_zero/core/source/driver/driver_handle_imp.h b/level_zero/core/source/driver/driver_handle_imp.h index 7b60b2f78e..c4825e8bc4 100644 --- a/level_zero/core/source/driver/driver_handle_imp.h +++ b/level_zero/core/source/driver/driver_handle_imp.h @@ -112,7 +112,9 @@ struct DriverHandleImp : public DriverHandle { {ZE_CONTEXT_POWER_SAVING_HINT_EXP_NAME, ZE_POWER_SAVING_HINT_EXP_VERSION_CURRENT}, {ZE_DEVICE_LUID_EXT_NAME, ZE_DEVICE_LUID_EXT_VERSION_CURRENT}, {ZE_DEVICE_IP_VERSION_EXT_NAME, ZE_DEVICE_IP_VERSION_VERSION_CURRENT}, - {ZE_CACHE_RESERVATION_EXT_NAME, ZE_CACHE_RESERVATION_EXT_VERSION_CURRENT}}; + {ZE_CACHE_RESERVATION_EXT_NAME, ZE_CACHE_RESERVATION_EXT_VERSION_CURRENT}, + {ZE_IMAGE_VIEW_EXT_NAME, ZE_IMAGE_VIEW_EXP_VERSION_CURRENT}, + {ZE_IMAGE_VIEW_PLANAR_EXT_NAME, ZE_IMAGE_VIEW_PLANAR_EXP_VERSION_CURRENT}}; uint64_t uuidTimestamp = 0u; diff --git a/level_zero/core/source/helpers/properties_parser.h b/level_zero/core/source/helpers/properties_parser.h index 7dc123edd2..0f0df327e9 100644 --- a/level_zero/core/source/helpers/properties_parser.h +++ b/level_zero/core/source/helpers/properties_parser.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2022 Intel Corporation + * Copyright (C) 2021-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -107,6 +107,11 @@ inline ze_result_t prepareL0StructuresLookupTable(StructuresLookupTable &lookupT lookupTable.areImageProperties = true; lookupTable.imageProperties.isPlanarExtension = true; lookupTable.imageProperties.planeIndex = imageViewDesc->planeIndex; + } else if (extendedDesc->stype == ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC) { + const ze_image_view_planar_ext_desc_t *imageViewDesc = reinterpret_cast(extendedDesc); + lookupTable.areImageProperties = true; + lookupTable.imageProperties.isPlanarExtension = true; + lookupTable.imageProperties.planeIndex = imageViewDesc->planeIndex; } else if (extendedDesc->stype == ZE_STRUCTURE_TYPE_RELAXED_ALLOCATION_LIMITS_EXP_DESC) { const ze_relaxed_allocation_limits_exp_desc_t *relaxedLimitsDesc = reinterpret_cast(extendedDesc); diff --git a/level_zero/core/test/black_box_tests/zello_image_view.cpp b/level_zero/core/test/black_box_tests/zello_image_view.cpp index 9de25089de..f920f2fff1 100644 --- a/level_zero/core/test/black_box_tests/zello_image_view.cpp +++ b/level_zero/core/test/black_box_tests/zello_image_view.cpp @@ -109,6 +109,8 @@ void testAppendImageViewNV12Copy(ze_context_handle_t &context, ze_device_handle_ SUCCESS_OR_TERMINATE( zeImageViewCreateExp(context, device, &imageViewDescPlaneY, srcImg, &planeYImageView)); + + planeYdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; SUCCESS_OR_TERMINATE( zeImageViewCreateExt(context, device, &imageViewDescPlaneY, srcImg, &planeYImageView)); @@ -133,6 +135,8 @@ void testAppendImageViewNV12Copy(ze_context_handle_t &context, ze_device_handle_ SUCCESS_OR_TERMINATE( zeImageViewCreateExp(context, device, &imageViewDescPlaneUV, srcImg, &planeUVImageView)); + + planeUVdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; SUCCESS_OR_TERMINATE( zeImageViewCreateExt(context, device, &imageViewDescPlaneUV, srcImg, &planeUVImageView)); @@ -358,6 +362,8 @@ void testAppendImageViewRGBPCopy(ze_context_handle_t &context, ze_device_handle_ SUCCESS_OR_TERMINATE( zeImageViewCreateExp(context, device, &imageViewDescPlaneY, srcImg, &planeYImageView)); + + planeYdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; SUCCESS_OR_TERMINATE( zeImageViewCreateExt(context, device, &imageViewDescPlaneY, srcImg, &planeYImageView)); @@ -382,6 +388,8 @@ void testAppendImageViewRGBPCopy(ze_context_handle_t &context, ze_device_handle_ SUCCESS_OR_TERMINATE( zeImageViewCreateExp(context, device, &imageViewDescPlaneU, srcImg, &planeUImageView)); + + planeUdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; SUCCESS_OR_TERMINATE( zeImageViewCreateExt(context, device, &imageViewDescPlaneU, srcImg, &planeUImageView)); @@ -406,6 +414,8 @@ void testAppendImageViewRGBPCopy(ze_context_handle_t &context, ze_device_handle_ SUCCESS_OR_TERMINATE( zeImageViewCreateExp(context, device, &imageViewDescPlaneV, srcImg, &planeVImageView)); + + planeVdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; SUCCESS_OR_TERMINATE( zeImageViewCreateExt(context, device, &imageViewDescPlaneV, srcImg, &planeVImageView)); diff --git a/level_zero/core/test/unit_tests/sources/image/test_image.cpp b/level_zero/core/test/unit_tests/sources/image/test_image.cpp index 8b53435c8d..499fd1ca38 100644 --- a/level_zero/core/test/unit_tests/sources/image/test_image.cpp +++ b/level_zero/core/test/unit_tests/sources/image/test_image.cpp @@ -1293,7 +1293,7 @@ HWTEST2_F(ImageCreate, WhenCopyingToSshThenSurfacePropertiesAreRetained, IsAtMos delete imageB; } -HWTEST2_F(ImageCreate, WhenImageViewCreateThenSuccessIsReturned, IsAtLeastSkl) { +HWTEST2_F(ImageCreate, WhenImageViewCreateExpThenSuccessIsReturned, IsAtLeastSkl) { using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; const size_t width = 32; const size_t height = 32; @@ -1348,5 +1348,60 @@ HWTEST2_F(ImageCreate, WhenImageViewCreateThenSuccessIsReturned, IsAtLeastSkl) { zeImageDestroy(planeY); } +HWTEST2_F(ImageCreate, WhenImageViewCreateExtThenSuccessIsReturned, IsAtLeastSkl) { + using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; + const size_t width = 32; + const size_t height = 32; + const size_t depth = 1; + + ze_image_desc_t srcImgDesc = {ZE_STRUCTURE_TYPE_IMAGE_DESC, + nullptr, + (ZE_IMAGE_FLAG_KERNEL_WRITE | ZE_IMAGE_FLAG_BIAS_UNCACHED), + ZE_IMAGE_TYPE_2D, + {ZE_IMAGE_FORMAT_LAYOUT_NV12, ZE_IMAGE_FORMAT_TYPE_UINT, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G, + ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_A}, + width, + height, + depth, + 0, + 0}; + + auto imageHW = std::make_unique>>(); + auto ret = imageHW->initialize(device, &srcImgDesc); + ASSERT_EQ(ZE_RESULT_SUCCESS, ret); + + ze_image_view_planar_ext_desc_t planeYdesc = {}; + planeYdesc.stype = ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC; + planeYdesc.planeIndex = 0u; // Y plane + + ze_image_desc_t imageViewDescPlaneY = {ZE_STRUCTURE_TYPE_IMAGE_DESC, + &planeYdesc, + (ZE_IMAGE_FLAG_KERNEL_WRITE | ZE_IMAGE_FLAG_BIAS_UNCACHED), + ZE_IMAGE_TYPE_2D, + {ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_UINT, + ZE_IMAGE_FORMAT_SWIZZLE_A, ZE_IMAGE_FORMAT_SWIZZLE_B, + ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_R}, + width, + height, + depth, + 0, + 0}; + ze_image_handle_t planeY; + + ret = imageHW->createView(device, &imageViewDescPlaneY, &planeY); + ASSERT_EQ(ZE_RESULT_SUCCESS, ret); + + ASSERT_EQ(ZE_RESULT_SUCCESS, ret); + + auto nv12Allocation = imageHW->getAllocation(); + + auto planeYAllocation = Image::fromHandle(planeY)->getAllocation(); + + EXPECT_EQ(nv12Allocation->getGpuBaseAddress(), planeYAllocation->getGpuBaseAddress()); + + zeImageDestroy(planeY); +} + } // namespace ult } // namespace L0