mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
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:

committed by
Compute-Runtime-Automation

parent
e66fce10b5
commit
bf4d4e71c3
@ -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;
|
||||
|
@ -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 = {};
|
||||
|
||||
|
Reference in New Issue
Block a user