Add channelOrder and channelDataType to crossThreadData in L0

Related-To: NEO-4649

Change-Id: If07127424fc03ac410665cd1eb0c0da966b46584
Signed-off-by: Konstanty Misiak <konstanty.misiak@intel.com>
This commit is contained in:
Konstanty Misiak
2020-07-02 14:15:17 +02:00
committed by sys_ocldev
parent 3afeb00d3a
commit 1067596196
6 changed files with 334 additions and 5 deletions

View File

@@ -50,6 +50,8 @@ set(L0_RUNTIME_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/kernel/kernel_imp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/kernel/kernel_imp.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image_format_desc_helper.cpp
${CMAKE_CURRENT_SOURCE_DIR}/image/image_format_desc_helper.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image_formats.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image_hw.h
${CMAKE_CURRENT_SOURCE_DIR}/image/image_hw.inl

View File

@@ -0,0 +1,116 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/source/image/image_format_desc_helper.h"
#include "shared/source/utilities/compiler_support.h"
namespace L0 {
cl_channel_type getClChannelDataType(const ze_image_format_desc_t &imgDescription) {
switch (imgDescription.layout) {
case ZE_IMAGE_FORMAT_LAYOUT_8:
case ZE_IMAGE_FORMAT_LAYOUT_8_8:
case ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UINT)
return CL_UNSIGNED_INT8;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_SINT)
return CL_SIGNED_INT8;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UNORM_INT8;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_SNORM)
return CL_SNORM_INT8;
break;
case ZE_IMAGE_FORMAT_LAYOUT_16:
case ZE_IMAGE_FORMAT_LAYOUT_16_16:
case ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UINT)
return CL_UNSIGNED_INT16;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_SINT)
return CL_SIGNED_INT16;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UNORM_INT16;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_SNORM)
return CL_SNORM_INT16;
return CL_HALF_FLOAT;
CPP_ATTRIBUTE_FALLTHROUGH;
case ZE_IMAGE_FORMAT_LAYOUT_32:
case ZE_IMAGE_FORMAT_LAYOUT_32_32:
case ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UINT)
return CL_UNSIGNED_INT32;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_SINT)
return CL_SIGNED_INT32;
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_FLOAT)
return CL_FLOAT;
break;
case ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UNORM_INT_101010_2;
break;
case ZE_IMAGE_FORMAT_LAYOUT_5_6_5:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UNORM_SHORT_565;
break;
case ZE_IMAGE_FORMAT_LAYOUT_5_5_5_1:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UNORM_SHORT_555;
break;
case ZE_IMAGE_FORMAT_LAYOUT_NV12:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_NV12_INTEL;
break;
case ZE_IMAGE_FORMAT_LAYOUT_YUYV:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_YUYV_INTEL;
break;
case ZE_IMAGE_FORMAT_LAYOUT_VYUY:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_VYUY_INTEL;
break;
case ZE_IMAGE_FORMAT_LAYOUT_YVYU:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_YVYU_INTEL;
break;
case ZE_IMAGE_FORMAT_LAYOUT_UYVY:
if (imgDescription.type == ZE_IMAGE_FORMAT_TYPE_UNORM)
return CL_UYVY_INTEL;
break;
default:
break;
}
return CL_INVALID_VALUE;
}
cl_channel_order getClChannelOrder(const ze_image_format_desc_t &imgDescription) {
swizzles imgSwizzles{imgDescription.x, imgDescription.y, imgDescription.z, imgDescription.w};
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_1})
return CL_R;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_A})
return CL_A;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_1})
return CL_RG;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_0, ZE_IMAGE_FORMAT_SWIZZLE_A})
return CL_RA;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_1})
return CL_RGB;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_A})
return CL_RGBA;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_A})
return CL_BGRA;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_A, ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_B})
return CL_ARGB;
if (imgSwizzles == swizzles{ZE_IMAGE_FORMAT_SWIZZLE_A, ZE_IMAGE_FORMAT_SWIZZLE_B, ZE_IMAGE_FORMAT_SWIZZLE_G, ZE_IMAGE_FORMAT_SWIZZLE_R})
return CL_ABGR;
return CL_INVALID_VALUE;
}
} // namespace L0

View File

@@ -0,0 +1,37 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "level_zero/core/source/image/image.h"
namespace L0 {
struct swizzles {
ze_image_format_swizzle_t x;
ze_image_format_swizzle_t y;
ze_image_format_swizzle_t z;
ze_image_format_swizzle_t w;
bool operator==(const swizzles &rhs) {
if (x != rhs.x)
return false;
if (y != rhs.y)
return false;
if (z != rhs.z)
return false;
if (w != rhs.w)
return false;
return true;
}
};
cl_channel_type getClChannelDataType(const ze_image_format_desc_t &imgDescription);
cl_channel_order getClChannelOrder(const ze_image_format_desc_t &imgDescription);
} // namespace L0

View File

@@ -22,6 +22,7 @@
#include "level_zero/core/source/device/device.h"
#include "level_zero/core/source/image/image.h"
#include "level_zero/core/source/image/image_format_desc_helper.h"
#include "level_zero/core/source/module/module.h"
#include "level_zero/core/source/module/module_imp.h"
#include "level_zero/core/source/printf_handler/printf_handler.h"
@@ -513,11 +514,15 @@ ze_result_t KernelImp::setArgImage(uint32_t argIndex, size_t argSize, const void
auto imageInfo = image->getImageInfo();
auto clChannelType = getClChannelDataType(image->getImageDesc().format);
auto clChannelOrder = getClChannelOrder(image->getImageDesc().format);
NEO::patchNonPointer<size_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.imgWidth, imageInfo.imgDesc.imageWidth);
NEO::patchNonPointer<size_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.imgHeight, imageInfo.imgDesc.imageHeight);
NEO::patchNonPointer<size_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.imgDepth, imageInfo.imgDesc.imageDepth);
NEO::patchNonPointer<uint32_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.numSamples, imageInfo.imgDesc.numSamples);
NEO::patchNonPointer<size_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.arraySize, imageInfo.imgDesc.imageArraySize);
NEO::patchNonPointer<cl_channel_type>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.channelDataType, clChannelType);
NEO::patchNonPointer<cl_channel_order>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.channelOrder, clChannelOrder);
NEO::patchNonPointer<uint32_t>(ArrayRef<uint8_t>(crossThreadData.get(), crossThreadDataSize), arg.metadataPayload.numMipLevels, imageInfo.imgDesc.numMipLevels);
auto pixelSize = imageInfo.surfaceFormat->ImageElementSizeInBytes;