feature: adds support for 3 channel Imageview creation

Related-To: NEO-12887

Signed-off-by: Kulkarni, Ashwin Kumar <ashwin.kumar.kulkarni@intel.com>
This commit is contained in:
Kulkarni, Ashwin Kumar
2025-01-13 11:06:48 +00:00
committed by Compute-Runtime-Automation
parent e66fce10b5
commit bf4d4e71c3
2 changed files with 134 additions and 4 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2024 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@ -27,6 +27,7 @@
namespace L0 {
ImageAllocatorFn imageFactory[IGFX_MAX_PRODUCT] = {};
bool getImageDescriptor(const ze_image_desc_t *origImgDesc, ze_image_desc_t *imgDesc);
ImageImp::~ImageImp() {
if ((isImageView() || imageFromBuffer) && this->device != nullptr) {
@ -86,8 +87,15 @@ ze_result_t ImageImp::createView(Device *device, const ze_image_desc_t *desc, ze
image->imgInfo = this->imgInfo;
image->imageFromBuffer = this->imageFromBuffer;
auto result = image->initialize(device, desc);
ze_image_desc_t imgDesc = {};
bool modified = getImageDescriptor(desc, &imgDesc);
auto result = ZE_RESULT_SUCCESS;
if (modified && this->isMimickedImage()) {
image->setMimickedImage(true);
result = image->initialize(device, &imgDesc);
} else {
result = image->initialize(device, desc);
}
if (result != ZE_RESULT_SUCCESS) {
image->destroy();
image = nullptr;

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2020-2024 Intel Corporation
* Copyright (C) 2020-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@ -346,6 +346,85 @@ HWTEST2_F(ImageView, givenPlanarImageWhenCreateImageViewThenProperPlaneIsCreated
zeImageDestroy(planeUV);
}
HWTEST2_F(ImageView, given3ChannelImageWhenCreateImageViewIsCalledThenProperViewIsCreated, MatchAny) {
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_8_8_8, ZE_IMAGE_FORMAT_TYPE_UNORM,
ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G,
ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_1},
width,
height,
depth,
0,
0};
Image *imagePtr;
auto result = Image::create(productFamily, device, &srcImgDesc, &imagePtr);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
ze_image_handle_t imgHandle = imagePtr->toHandle();
ze_image_handle_t viewHandle;
auto ret = L0::Image::fromHandle(imgHandle)->createView(device, &srcImgDesc, &viewHandle);
ASSERT_EQ(ZE_RESULT_SUCCESS, ret);
auto viewDesc = static_cast<L0::Image *>(viewHandle)->getImageInfo().imgDesc;
EXPECT_EQ(width, viewDesc.imageWidth);
EXPECT_EQ(height, viewDesc.imageHeight);
zeImageDestroy(viewHandle);
zeImageDestroy(imgHandle);
}
HWTEST2_F(ImageView, given3ChannelMickedImageWhenCreateImageViewIsCalledThenProperViewIsCreated, MatchAny) {
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_8_8_8, ZE_IMAGE_FORMAT_TYPE_UNORM,
ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G,
ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_1},
width,
height,
depth,
0,
0};
Image *imagePtr;
auto result = Image::create(productFamily, device, &srcImgDesc, &imagePtr);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
ze_image_handle_t imgHandle = imagePtr->toHandle();
ze_image_desc_t viewImgDesc = {ZE_STRUCTURE_TYPE_IMAGE_DESC,
nullptr,
(ZE_IMAGE_FLAG_KERNEL_WRITE | ZE_IMAGE_FLAG_BIAS_UNCACHED),
ZE_IMAGE_TYPE_2D,
{ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_UNORM,
ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X,
ZE_IMAGE_FORMAT_SWIZZLE_X, ZE_IMAGE_FORMAT_SWIZZLE_X},
width * 3,
height,
depth,
0,
0};
ze_image_handle_t viewHandle;
auto ret = L0::Image::fromHandle(imgHandle)->createView(device, &viewImgDesc, &viewHandle);
ASSERT_EQ(ZE_RESULT_SUCCESS, ret);
zeImageDestroy(viewHandle);
zeImageDestroy(imgHandle);
}
HWTEST2_F(ImageView, givenPlanarImageWhenCreateImageWithInvalidStructViewThenProperErrorIsReturned, MatchAny) {
const size_t width = 32;
const size_t height = 32;
@ -2455,6 +2534,49 @@ HWTEST2_F(ImageCreateExternalMemoryTest, givenNTHandleWhenCreatingInteropImageTh
ASSERT_NE(image, nullptr);
}
HWTEST2_F(ImageCreateExternalMemoryTest, givenNTHandleOfInteropImageWhenImageViewCreateIsCalledThenSuccessIsReturned, MatchAny) {
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_8_8_8, ZE_IMAGE_FORMAT_TYPE_UNORM,
ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G,
ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_1},
width,
height,
depth,
0,
0};
ze_external_memory_import_win32_handle_t importNTHandle = {};
importNTHandle.handle = &imageHandle;
importNTHandle.flags = ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32;
importNTHandle.stype = ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_WIN32;
srcImgDesc.pNext = &importNTHandle;
delete driverHandle->svmAllocsManager;
driverHandle->setMemoryManager(execEnv->memoryManager.get());
driverHandle->svmAllocsManager = new NEO::SVMAllocsManager(execEnv->memoryManager.get(), false);
Image *imagePtr;
auto result = Image::create(productFamily, device, &srcImgDesc, &imagePtr);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
std::unique_ptr<L0::Image> image(imagePtr);
ASSERT_NE(image, nullptr);
ze_image_handle_t imgHandle = imagePtr->toHandle();
ze_image_handle_t viewHandle;
srcImgDesc.pNext = nullptr;
auto ret = L0::Image::fromHandle(imgHandle)->createView(device, &srcImgDesc, &viewHandle);
ASSERT_EQ(ZE_RESULT_SUCCESS, ret);
zeImageDestroy(viewHandle);
}
HWTEST2_F(ImageCreate, givenFDWhenCreatingImageWith3Channel8bitUintThenSuccessIsReturned, MatchAny) {
ze_image_desc_t desc = {};