Add extension property reporting for zeImageViewCreateExt

`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 <wenbin.lu@intel.com>
This commit is contained in:
Lu, Wenbin
2023-03-17 20:57:59 +00:00
committed by Compute-Runtime-Automation
parent 5610eae710
commit 299985f15e
4 changed files with 74 additions and 2 deletions

View File

@@ -113,7 +113,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;

View File

@@ -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<const ze_image_view_planar_ext_desc_t *>(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<const ze_relaxed_allocation_limits_exp_desc_t *>(extendedDesc);

View File

@@ -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));

View File

@@ -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<WhiteBox<::L0::ImageCoreFamily<gfxCoreFamily>>>();
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