Add zeImageGetMemoryPropertiesExp implementation

Signed-off-by: Kamil Diedrich <kamil.diedrich@intel.com>
This commit is contained in:
Kamil Diedrich
2021-06-24 11:33:40 +00:00
committed by Compute-Runtime-Automation
parent 72d124e275
commit 6aa40191e2
5 changed files with 71 additions and 0 deletions

View File

@@ -584,3 +584,19 @@ zeGetKernelExpProcAddrTable(
driver_ddiTable.core_ddiTable.KernelExp = *pDdiTable;
return result;
}
ZE_APIEXPORT ze_result_t ZE_APICALL
zeGetImageExpProcAddrTable(
ze_api_version_t version,
ze_image_exp_dditable_t *pDdiTable) {
if (nullptr == pDdiTable)
return ZE_RESULT_ERROR_INVALID_ARGUMENT;
if (ZE_MAJOR_VERSION(driver_ddiTable.version) != ZE_MAJOR_VERSION(version) ||
ZE_MINOR_VERSION(driver_ddiTable.version) > ZE_MINOR_VERSION(version))
return ZE_RESULT_ERROR_UNSUPPORTED_VERSION;
ze_result_t result = ZE_RESULT_SUCCESS;
pDdiTable->pfnGetMemoryPropertiesExp = zeImageGetMemoryPropertiesExp;
driver_ddiTable.core_ddiTable.ImageExp = *pDdiTable;
return result;
}

View File

@@ -7,6 +7,7 @@
#include "level_zero/api/extensions/public/ze_exp_ext.h"
#include "level_zero/core/source/image/image.h"
#include "level_zero/core/source/kernel/kernel.h"
#if defined(__cplusplus)
@@ -22,6 +23,13 @@ zeKernelSetGlobalOffsetExp(
return L0::Kernel::fromHandle(hKernel)->setGlobalOffsetExp(offsetX, offsetY, offsetZ);
}
ZE_APIEXPORT ze_result_t ZE_APICALL
zeImageGetMemoryPropertiesExp(
ze_image_handle_t hImage,
ze_image_memory_properties_exp_t *pMemoryProperties) {
return L0::Image::fromHandle(hImage)->getMemoryProperties(pMemoryProperties);
}
#if defined(__cplusplus)
} // extern "C"
#endif

View File

@@ -38,6 +38,7 @@ struct Image : _ze_image_handle_t {
virtual void copyRedescribedSurfaceStateToSSH(void *surfaceStateHeap, const uint32_t surfaceStateOffset) = 0;
virtual NEO::ImageInfo getImageInfo() = 0;
virtual ze_image_desc_t getImageDesc() = 0;
virtual ze_result_t getMemoryProperties(ze_image_memory_properties_exp_t *pMemoryProperties) = 0;
static Image *fromHandle(ze_image_handle_t handle) { return static_cast<Image *>(handle); }

View File

@@ -25,6 +25,15 @@ struct ImageImp : public Image {
ze_image_desc_t getImageDesc() override {
return imageFormatDesc;
}
ze_result_t getMemoryProperties(ze_image_memory_properties_exp_t *pMemoryProperties) override {
pMemoryProperties->rowPitch = imgInfo.rowPitch;
pMemoryProperties->slicePitch = imgInfo.slicePitch;
pMemoryProperties->size = imgInfo.surfaceFormat->ImageElementSizeInBytes;
return ZE_RESULT_SUCCESS;
}
static NEO::ImageType convertType(const ze_image_type_t type) {
switch (type) {
case ZE_IMAGE_TYPE_2D:

View File

@@ -619,5 +619,42 @@ TEST(ImageFormatDescHelperTest, givenSupportedSwizzlesThenProperClEnumIsReturned
EXPECT_EQ(getClChannelOrder(format), static_cast<cl_channel_order>(CL_BGRA));
}
using ImageGetMemoryProperties = Test<DeviceFixture>;
HWTEST2_F(ImageGetMemoryProperties, givenImageMemoryPropertiesExpStructureWhenGetMemroyPropertiesThenProperDataAreSet, ImageSupport) {
ze_image_desc_t zeDesc = {};
zeDesc.arraylevels = 1u;
zeDesc.depth = 1u;
zeDesc.height = 1u;
zeDesc.width = 1u;
zeDesc.miplevels = 1u;
zeDesc.type = ZE_IMAGE_TYPE_2DARRAY;
zeDesc.flags = ZE_IMAGE_FLAG_BIAS_UNCACHED;
zeDesc.format = {ZE_IMAGE_FORMAT_LAYOUT_32,
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};
Image *image_ptr;
auto result = Image::create(productFamily, device, &zeDesc, &image_ptr);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
std::unique_ptr<L0::Image> image(image_ptr);
ASSERT_NE(image, nullptr);
ze_image_memory_properties_exp_t imageMemoryPropertiesExp = {};
image->getMemoryProperties(&imageMemoryPropertiesExp);
auto imageInfo = image->getImageInfo();
EXPECT_EQ(imageInfo.surfaceFormat->ImageElementSizeInBytes, imageMemoryPropertiesExp.size);
EXPECT_EQ(imageInfo.slicePitch, imageMemoryPropertiesExp.slicePitch);
EXPECT_EQ(imageInfo.rowPitch, imageMemoryPropertiesExp.rowPitch);
}
} // namespace ult
} // namespace L0