diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index 64d4fb8e61..cbf08c4bc2 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -336,7 +336,7 @@ function(generate_l0_lib LIB_NAME MOCKABLE) ) target_compile_definitions(${LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=virtual - PRIVATE + PUBLIC ${COMPUTE_RUNTIME_DEFINITIONS} ) else() @@ -346,7 +346,7 @@ function(generate_l0_lib LIB_NAME MOCKABLE) ) target_compile_definitions(${LIB_NAME} PUBLIC MOCKABLE_VIRTUAL= - PRIVATE + PUBLIC ${COMPUTE_RUNTIME_DEFINITIONS} ) endif() diff --git a/level_zero/cmake/l0_tests.cmake b/level_zero/cmake/l0_tests.cmake index 5478843739..e7d4d2d4a6 100644 --- a/level_zero/cmake/l0_tests.cmake +++ b/level_zero/cmake/l0_tests.cmake @@ -97,7 +97,6 @@ add_library(compute_runtime_mockable_extra ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_deferred_deleter.cpp ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks${BRANCH_SUFIX_DIR}/mock_gmm_client_context.cpp ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_gmm_client_context_base.cpp - ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_gmm_resource_info.cpp ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_memory_manager.cpp ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_program.cpp ${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/mocks/mock_sip.cpp diff --git a/level_zero/core/source/CMakeLists.txt b/level_zero/core/source/CMakeLists.txt index 666a460587..47c8b3d619 100644 --- a/level_zero/core/source/CMakeLists.txt +++ b/level_zero/core/source/CMakeLists.txt @@ -51,6 +51,7 @@ 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_formats.h ${CMAKE_CURRENT_SOURCE_DIR}/image/image_hw.h ${CMAKE_CURRENT_SOURCE_DIR}/image/image_hw.inl ${CMAKE_CURRENT_SOURCE_DIR}/image/image_imp.cpp diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index d9c40e8e07..6e5cefb306 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -232,7 +232,7 @@ ze_result_t CommandListCoreFamily::appendImageCopyFromMemory(ze_i ze_event_handle_t *phWaitEvents) { auto image = Image::fromHandle(hDstImage); - auto bytesPerPixel = image->getImageInfo().surfaceFormat->NumChannels * image->getImageInfo().surfaceFormat->PerChannelSizeInBytes; + auto bytesPerPixel = static_cast(image->getImageInfo().surfaceFormat->ImageElementSizeInBytes); ze_image_region_t tmpRegion; @@ -329,7 +329,7 @@ ze_result_t CommandListCoreFamily::appendImageCopyToMemory(void * ze_event_handle_t *phWaitEvents) { auto image = Image::fromHandle(hSrcImage); - auto bytesPerPixel = image->getImageInfo().surfaceFormat->NumChannels * image->getImageInfo().surfaceFormat->PerChannelSizeInBytes; + auto bytesPerPixel = static_cast(image->getImageInfo().surfaceFormat->ImageElementSizeInBytes); ze_image_region_t tmpRegion; if (pSrcRegion == nullptr) { diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index d092805e94..e65b6bad02 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -131,9 +131,6 @@ ze_result_t DeviceImp::createEventPool(const ze_event_pool_desc_t *desc, } ze_result_t DeviceImp::createImage(const ze_image_desc_t *desc, ze_image_handle_t *phImage) { - if (desc->format.layout >= ze_image_format_layout_t::ZE_IMAGE_FORMAT_LAYOUT_Y8) { - return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; - } auto productFamily = neoDevice->getHardwareInfo().platform.eProductFamily; *phImage = Image::create(productFamily, this, desc); diff --git a/level_zero/core/source/image/image_formats.h b/level_zero/core/source/image/image_formats.h new file mode 100644 index 0000000000..328739eeb4 --- /dev/null +++ b/level_zero/core/source/image/image_formats.h @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include "shared/source/helpers/surface_format_info.h" + +#include + +namespace L0 { +namespace ImageFormats { +constexpr uint32_t ZE_IMAGE_FORMAT_RENDER_LAYOUT_MAX = 30u; + +using FormatTypes = std::array; + +constexpr std::array surfaceFormatsForRedescribe = { + {{GMM_FORMAT_R8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_UINT, 0, 1, 1, 1}, + {GMM_FORMAT_R16_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_UINT, 0, 1, 2, 2}, + {GMM_FORMAT_R32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_UINT, 0, 1, 4, 4}, + {GMM_FORMAT_R32G32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_UINT, 0, 2, 4, 8}, + {GMM_FORMAT_R32G32B32A32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UINT, 0, 4, 4, 16}}}; + +constexpr FormatTypes layout8 = {{{GMM_FORMAT_R8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_UINT, 0, 1, 1, 1}, + {GMM_FORMAT_R8_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_SINT, 0, 1, 1, 1}, + {GMM_FORMAT_R8_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_UNORM, 0, 1, 1, 1}, + {GMM_FORMAT_R8_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_SNORM, 0, 1, 1, 1}, + {GMM_FORMAT_R8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8_UINT, 0, 1, 1, 1}}}; +constexpr FormatTypes layout88 = {{{GMM_FORMAT_R8G8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8_UINT, 0, 2, 1, 2}, + {GMM_FORMAT_R8G8_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8_SINT, 0, 2, 1, 2}, + {GMM_FORMAT_R8G8_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8_UNORM, 0, 2, 1, 2}, + {GMM_FORMAT_R8G8_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8_SNORM, 0, 2, 1, 2}, + {GMM_FORMAT_R8G8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8_UINT, 0, 2, 1, 2}}}; +constexpr FormatTypes layout8888 = {{{GMM_FORMAT_R8G8B8A8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UINT, 0, 4, 1, 4}, + {GMM_FORMAT_R8G8B8A8_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SINT, 0, 4, 1, 4}, + {GMM_FORMAT_R8G8B8A8_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_R8G8B8A8_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_SNORM, 0, 4, 1, 4}, + {GMM_FORMAT_R8G8B8A8_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UINT, 0, 4, 1, 4}}}; +constexpr FormatTypes layout16 = {{{GMM_FORMAT_R16_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_UINT, 0, 1, 2, 2}, + {GMM_FORMAT_R16_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_SINT, 0, 1, 2, 2}, + {GMM_FORMAT_R16_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_UNORM, 0, 1, 2, 2}, + {GMM_FORMAT_R16_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_SNORM, 0, 1, 2, 2}, + {GMM_FORMAT_R16_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16_FLOAT, 0, 1, 2, 2}}}; +constexpr FormatTypes layout1616 = {{{GMM_FORMAT_R16G16_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16_UINT, 0, 2, 2, 4}, + {GMM_FORMAT_R16G16_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16_SINT, 0, 2, 2, 4}, + {GMM_FORMAT_R16G16_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16_UNORM, 0, 2, 2, 4}, + {GMM_FORMAT_R16G16_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16_SNORM, 0, 2, 2, 4}, + {GMM_FORMAT_R16G16_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16_FLOAT, 0, 2, 2, 4}}}; +constexpr FormatTypes layout16161616 = {{{GMM_FORMAT_R16G16B16A16_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UINT, 0, 4, 2, 8}, + {GMM_FORMAT_R16G16B16A16_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SINT, 0, 4, 2, 8}, + {GMM_FORMAT_R16G16B16A16_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_UNORM, 0, 4, 2, 8}, + {GMM_FORMAT_R16G16B16A16_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_SNORM, 0, 4, 2, 8}, + {GMM_FORMAT_R16G16B16A16_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R16G16B16A16_FLOAT, 0, 4, 2, 8}}}; +constexpr FormatTypes layout32 = {{{GMM_FORMAT_R32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_UINT, 0, 1, 4, 4}, + {GMM_FORMAT_R32_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_SINT, 0, 1, 4, 4}, + {GMM_FORMAT_R32_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_UNORM, 0, 1, 4, 4}, + {GMM_FORMAT_R32_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_SNORM, 0, 1, 4, 4}, + {GMM_FORMAT_R32_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32_FLOAT, 0, 1, 4, 4}}}; +constexpr FormatTypes layout3232 = {{{GMM_FORMAT_R32G32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_UINT, 0, 2, 4, 8}, + {GMM_FORMAT_R32G32_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_SINT, 0, 2, 4, 8}, + {GMM_FORMAT_R32G32_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_UNORM, 0, 2, 4, 8}, + {GMM_FORMAT_R32G32_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_SNORM, 0, 2, 4, 8}, + {GMM_FORMAT_R32G32_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32_FLOAT, 0, 2, 4, 8}}}; +constexpr FormatTypes layout32323232 = {{{GMM_FORMAT_R32G32B32A32_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UINT, 0, 4, 4, 16}, + {GMM_FORMAT_R32G32B32A32_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SINT, 0, 4, 4, 16}, + {GMM_FORMAT_R32G32B32A32_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_UNORM, 0, 4, 4, 16}, + {GMM_FORMAT_R32G32B32A32_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_SNORM, 0, 4, 4, 16}, + {GMM_FORMAT_R32G32B32A32_FLOAT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R32G32B32A32_FLOAT, 0, 4, 4, 16}}}; +constexpr FormatTypes layout1010102 = {{{GMM_FORMAT_R10G10B10A2_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UINT, 0, 4, 1, 4}, + {GMM_FORMAT_R10G10B10A2_SINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_SINT, 0, 4, 1, 4}, + {GMM_FORMAT_R10G10B10A2_UNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_R10G10B10A2_SNORM_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_SNORM, 0, 4, 1, 4}, + {GMM_FORMAT_R10G10B10A2_UINT_TYPE, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UINT, 0, 4, 1, 4}}}; +constexpr FormatTypes layout111110 = {{{GMM_FORMAT_R11G11B10_FLOAT, NEO::GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT, 0, 3, 0, 4}, + {GMM_FORMAT_R11G11B10_FLOAT, NEO::GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT, 0, 3, 0, 4}, + {GMM_FORMAT_R11G11B10_FLOAT, NEO::GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT, 0, 3, 0, 4}, + {GMM_FORMAT_R11G11B10_FLOAT, NEO::GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT, 0, 3, 0, 4}, + {GMM_FORMAT_R11G11B10_FLOAT, NEO::GFX3DSTATE_SURFACEFORMAT_R11G11B10_FLOAT, 0, 3, 0, 4}}}; +constexpr FormatTypes layout565 = {{{GMM_FORMAT_B5G6R5_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM, 0, 3, 0, 2}, + {GMM_FORMAT_B5G6R5_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM, 0, 3, 0, 2}, + {GMM_FORMAT_B5G6R5_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM, 0, 3, 0, 2}, + {GMM_FORMAT_B5G6R5_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM, 0, 3, 0, 2}, + {GMM_FORMAT_B5G6R5_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G6R5_UNORM, 0, 3, 0, 2}}}; +constexpr FormatTypes layout5551 = {{{GMM_FORMAT_B5G5R5A1_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM, 0, 4, 0, 2}, + {GMM_FORMAT_B5G5R5A1_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM, 0, 4, 0, 2}, + {GMM_FORMAT_B5G5R5A1_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM, 0, 4, 0, 2}, + {GMM_FORMAT_B5G5R5A1_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM, 0, 4, 0, 2}, + {GMM_FORMAT_B5G5R5A1_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B5G5R5A1_UNORM, 0, 4, 0, 2}}}; +constexpr FormatTypes layout4444 = {{{GMM_FORMAT_B4G4R4A4_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM, 0, 4, 1, 2}, + {GMM_FORMAT_B4G4R4A4_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM, 0, 4, 1, 2}, + {GMM_FORMAT_B4G4R4A4_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM, 0, 4, 1, 2}, + {GMM_FORMAT_B4G4R4A4_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM, 0, 4, 1, 2}, + {GMM_FORMAT_B4G4R4A4_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_B4G4R4A4_UNORM, 0, 4, 1, 2}}}; +constexpr FormatTypes layoutY8 = {{{GMM_FORMAT_Y8_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_Y8_UNORM, 0, 1, 1, 1}, + {GMM_FORMAT_Y8_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_Y8_UNORM, 0, 1, 1, 1}, + {GMM_FORMAT_Y8_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_Y8_UNORM, 0, 1, 1, 1}, + {GMM_FORMAT_Y8_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_Y8_UNORM, 0, 1, 1, 1}, + {GMM_FORMAT_Y8_UNORM, NEO::GFX3DSTATE_SURFACEFORMAT_Y8_UNORM, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutNV12 = {{{GMM_FORMAT_NV12, NEO::GFX3DSTATE_SURFACEFORMAT_NV12, 0, 1, 1, 1}, + {GMM_FORMAT_NV12, NEO::GFX3DSTATE_SURFACEFORMAT_NV12, 0, 1, 1, 1}, + {GMM_FORMAT_NV12, NEO::GFX3DSTATE_SURFACEFORMAT_NV12, 0, 1, 1, 1}, + {GMM_FORMAT_NV12, NEO::GFX3DSTATE_SURFACEFORMAT_NV12, 0, 1, 1, 1}, + {GMM_FORMAT_NV12, NEO::GFX3DSTATE_SURFACEFORMAT_NV12, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutYUYV = {{{GMM_FORMAT_YCRCB_NORMAL, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_NORMAL, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_NORMAL, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_NORMAL, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_NORMAL, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL, 0, 2, 1, 2}}}; +constexpr FormatTypes layoutVYUY = {{{GMM_FORMAT_YCRCB_SWAPUVY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUVY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUVY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUVY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUVY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUVY, 0, 2, 1, 2}}}; +constexpr FormatTypes layoutYVYU = {{{GMM_FORMAT_YCRCB_SWAPUV, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUV, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUV, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUV, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPUV, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPUV, 0, 2, 1, 2}}}; +constexpr FormatTypes layoutUYVY = {{{GMM_FORMAT_YCRCB_SWAPY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY, 0, 2, 1, 2}, + {GMM_FORMAT_YCRCB_SWAPY, NEO::GFX3DSTATE_SURFACEFORMAT_YCRCB_SWAPY, 0, 2, 1, 2}}}; +constexpr FormatTypes layoutAYUV = {{{GMM_FORMAT_AYUV, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_AYUV, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_AYUV, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_AYUV, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_AYUV, NEO::GFX3DSTATE_SURFACEFORMAT_R8G8B8A8_UNORM, 0, 4, 1, 4}}}; +constexpr FormatTypes layoutYUAV = {{{GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutY410 = {{{GMM_FORMAT_Y410, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_Y410, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_Y410, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_Y410, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}, + {GMM_FORMAT_Y410, NEO::GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_UNORM, 0, 4, 1, 4}}}; +constexpr FormatTypes layoutY16 = {{{GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutP010 = {{{GMM_FORMAT_P010, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P010, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P010, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P010, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P010, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}}}; +constexpr FormatTypes layoutP012 = {{{GMM_FORMAT_P012, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P012, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P012, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P012, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P012, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}}}; +constexpr FormatTypes layoutP016 = {{{GMM_FORMAT_P016, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P016, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P016, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P016, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}, + {GMM_FORMAT_P016, NEO::GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16, 0, 2, 1, 1}}}; +constexpr FormatTypes layoutY216 = {{{GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutP216 = {{{GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}}}; +constexpr FormatTypes layoutP416 = {{{GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}, + {GMM_FORMAT_INVALID, NEO::NUM_GFX3DSTATE_SURFACEFORMATS, 0, 1, 1, 1}}}; + +constexpr std::array formats = {layout8, layout16, layout32, layout88, layout8888, layout1616, layout16161616, layout3232, layout32323232, layout1010102, layout111110, layout565, layout5551, layout4444, layoutY8, + layoutNV12, layoutYUYV, layoutVYUY, layoutYVYU, layoutUYVY, layoutAYUV, layoutYUAV, layoutP010, layoutY410, layoutP012, layoutY16, layoutP016, layoutY216, layoutP216, layoutP416}; +} // namespace ImageFormats +} // namespace L0 diff --git a/level_zero/core/source/image/image_formats_append.h b/level_zero/core/source/image/image_formats_append.h deleted file mode 100644 index 0721e99a01..0000000000 --- a/level_zero/core/source/image/image_formats_append.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2019-2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#pragma once - -#include "level_zero/core/source/image/image_imp.h" - -#define GEN10PLUS_IMAGE_FORMATS() \ - { \ - mediaSurfaceFormatTable \ - [ZE_IMAGE_FORMAT_LAYOUT_P016 - ZE_IMAGE_FORMAT_MEDIA_LAYOUT_OFFSET] = \ - RSS::SURFACE_FORMAT_PLANAR_420_16; \ - } - -#define GEN11PLUS_IMAGE_FORMATS() \ - { \ - GEN10PLUS_IMAGE_FORMATS() \ - } - -#define GEN12PLUS_IMAGE_FORMATS() \ - { \ - GEN11PLUS_IMAGE_FORMATS() \ - surfaceFormatTable \ - [ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2][ZE_IMAGE_FORMAT_TYPE_FLOAT] = \ - RSS::SURFACE_FORMAT_R10G10B10_FLOAT_A2_UNORM; \ - } diff --git a/level_zero/core/source/image/image_hw.h b/level_zero/core/source/image/image_hw.h index 45ec3cbc21..7f3566fd49 100644 --- a/level_zero/core/source/image/image_hw.h +++ b/level_zero/core/source/image/image_hw.h @@ -12,7 +12,6 @@ #include "shared/source/helpers/surface_format_info.h" #include "shared/source/indirect_heap/indirect_heap.h" -#include "level_zero/core/source/image/image_formats_append.h" #include "level_zero/core/source/image/image_imp.h" namespace L0 { @@ -21,121 +20,31 @@ template struct ImageCoreFamily : public ImageImp { using GfxFamily = typename NEO::GfxFamilyMapper::GfxFamily; using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE; - using RSS = typename GfxFamily::RENDER_SURFACE_STATE; - using RENDER_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT; - using SHADER_CHANNEL_SELECT = typename RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT; - - static const RENDER_FORMAT surfaceFormatUndefined = static_cast(-1); - static const GMM_RESOURCE_FORMAT gmmResourceFormatUndefined = static_cast(-1); - - NEO::SurfaceFormatInfo surfaceFormatsForRedescribe[5] = { - {GMM_FORMAT_R8_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8_UINT), 0, 1, 1, 1}, - {GMM_FORMAT_R16_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_UINT), 0, 1, 2, 2}, - {GMM_FORMAT_R32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_UINT), 0, 1, 4, 4}, - {GMM_FORMAT_R32G32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_UINT), 0, 2, 4, 8}, - {GMM_FORMAT_R32G32B32A32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_UINT), 0, 4, 4, 16}}; - - NEO::SurfaceFormatInfo surfaceFormatTable[ZE_IMAGE_FORMAT_RENDER_LAYOUT_MAX + 1] - [ZE_IMAGE_FORMAT_TYPE_MAX + 1] = { - // ZE_IMAGE_FORMAT_LAYOUT_8 - {{GMM_FORMAT_R8_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8_UINT), 0, 1, 1, 1}, - {GMM_FORMAT_R8_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8_SINT), 0, 1, 1, 1}, - {GMM_FORMAT_R8_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8_UNORM), 0, 1, 1, 1}, - {GMM_FORMAT_R8_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8_SNORM), 0, 1, 1, 1}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 1, 1, 1}}, - // ZE_IMAGE_FORMAT_LAYOUT_16 - {{GMM_FORMAT_R16_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_UINT), 0, 1, 2, 2}, - {GMM_FORMAT_R16_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_SINT), 0, 1, 2, 2}, - {GMM_FORMAT_R16_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_UNORM), 0, 1, 2, 2}, - {GMM_FORMAT_R16_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_SNORM), 0, 1, 2, 2}, - {GMM_FORMAT_R16_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16_FLOAT), 0, 1, 2, 2}}, - // ZE_IMAGE_FORMAT_LAYOUT_32 - {{GMM_FORMAT_R32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_UINT), 0, 1, 4, 4}, - {GMM_FORMAT_R32_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_SINT), 0, 1, 4, 4}, - {GMM_FORMAT_R32_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_UNORM), 0, 1, 4, 4}, - {GMM_FORMAT_R32_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_SNORM), 0, 1, 4, 4}, - {GMM_FORMAT_R32_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32_FLOAT), 0, 1, 4, 4}}, - // ZE_IMAGE_FORMAT_LAYOUT_8_8 - {{GMM_FORMAT_R8G8_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8_UINT), 0, 2, 1, 2}, - {GMM_FORMAT_R8G8_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8_SINT), 0, 2, 1, 2}, - {GMM_FORMAT_R8G8_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8_UNORM), 0, 2, 1, 2}, - {GMM_FORMAT_R8G8_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8_SNORM), 0, 2, 1, 2}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 2, 1, 2}}, - // ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8 - {{GMM_FORMAT_R8G8B8A8_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8B8A8_UINT), 0, 4, 1, 4}, - {GMM_FORMAT_R8G8B8A8_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8B8A8_SINT), 0, 4, 1, 4}, - {GMM_FORMAT_R8G8B8A8_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8B8A8_UNORM), 0, 4, 1, 4}, - {GMM_FORMAT_R8G8B8A8_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R8G8B8A8_SNORM), 0, 4, 1, 4}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 4, 1, 4}}, - // ZE_IMAGE_FORMAT_LAYOUT_16_16 - {{GMM_FORMAT_R16G16_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16_UINT), 0, 2, 2, 4}, - {GMM_FORMAT_R16G16_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16_SINT), 0, 2, 2, 4}, - {GMM_FORMAT_R16G16_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16_UNORM), 0, 2, 2, 4}, - {GMM_FORMAT_R16G16_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16_SNORM), 0, 2, 2, 4}, - {GMM_FORMAT_R16G16_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16_FLOAT), 0, 2, 2, 4}}, - // ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16 - {{GMM_FORMAT_R16G16B16A16_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16B16A16_UINT), 0, 4, 2, 8}, - {GMM_FORMAT_R16G16B16A16_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16B16A16_SINT), 0, 4, 2, 8}, - {GMM_FORMAT_R16G16B16A16_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16B16A16_UNORM), 0, 4, 2, 8}, - {GMM_FORMAT_R16G16B16A16_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16B16A16_SNORM), 0, 4, 2, 8}, - {GMM_FORMAT_R16G16B16A16_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R16G16B16A16_FLOAT), 0, 4, 2, 8}}, - // ZE_IMAGE_FORMAT_LAYOUT_32_32 - {{GMM_FORMAT_R32G32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_UINT), 0, 2, 4, 8}, - {GMM_FORMAT_R32G32_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_SINT), 0, 2, 4, 8}, - {GMM_FORMAT_R32G32_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_UNORM), 0, 2, 4, 8}, - {GMM_FORMAT_R32G32_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_SNORM), 0, 2, 4, 8}, - {GMM_FORMAT_R32G32_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32_FLOAT), 0, 2, 4, 8}}, - // ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32 - {{GMM_FORMAT_R32G32B32A32_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_UINT), 0, 4, 4, 16}, - {GMM_FORMAT_R32G32B32A32_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_SINT), 0, 4, 4, 16}, - {GMM_FORMAT_R32G32B32A32_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_UNORM), 0, 4, 4, 16}, - {GMM_FORMAT_R32G32B32A32_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_SNORM), 0, 4, 4, 16}, - {GMM_FORMAT_R32G32B32A32_FLOAT_TYPE, static_cast(RSS::SURFACE_FORMAT_R32G32B32A32_FLOAT), 0, 4, 4, 16}}, - // ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2 - {{GMM_FORMAT_R10G10B10A2_UINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R10G10B10A2_UINT), 0, 4, 1, 4}, - {GMM_FORMAT_R10G10B10A2_SINT_TYPE, static_cast(RSS::SURFACE_FORMAT_R10G10B10A2_SINT), 0, 4, 1, 4}, - {GMM_FORMAT_R10G10B10A2_UNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R10G10B10A2_UNORM), 0, 4, 1, 4}, - {GMM_FORMAT_R10G10B10A2_SNORM_TYPE, static_cast(RSS::SURFACE_FORMAT_R10G10B10A2_SNORM), 0, 4, 1, 4}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 1, 1, 1}}, - // ZE_IMAGE_FORMAT_LAYOUT_11_11_10 - {{gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {GMM_FORMAT_R11G11B10_FLOAT, static_cast(RSS::SURFACE_FORMAT_R11G11B10_FLOAT), 0, 3, 0, 4}}, - // ZE_IMAGE_FORMAT_LAYOUT_5_6_5 - {{gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {GMM_FORMAT_B5G6R5_UNORM, static_cast(RSS::SURFACE_FORMAT_B5G6R5_UNORM), 0, 3, 0, 2}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}}, - // ZE_IMAGE_FORMAT_LAYOUT_5_5_5_1 - {{gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {GMM_FORMAT_B5G5R5A1_UNORM, static_cast(RSS::SURFACE_FORMAT_B5G5R5A1_UNORM), 0, 4, 0, 2}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}}, - // ZE_IMAGE_FORMAT_LAYOUT_4_4_4_4 - {{gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}, - {GMM_FORMAT_B4G4R4A4_UNORM, static_cast(RSS::SURFACE_FORMAT_B4G4R4A4_UNORM), 0, 4, 1, 2}, - {gmmResourceFormatUndefined, static_cast(surfaceFormatUndefined), 0, 0, 0, 0}}}; - - const SHADER_CHANNEL_SELECT shaderChannelSelect[ZE_IMAGE_FORMAT_SWIZZLE_MAX + 1] = { - RSS::SHADER_CHANNEL_SELECT_RED, - RSS::SHADER_CHANNEL_SELECT_GREEN, - RSS::SHADER_CHANNEL_SELECT_BLUE, - RSS::SHADER_CHANNEL_SELECT_ALPHA, - RSS::SHADER_CHANNEL_SELECT_ZERO, - RSS::SHADER_CHANNEL_SELECT_ONE, - RSS::SHADER_CHANNEL_SELECT_ZERO, - }; bool initialize(Device *device, const ze_image_desc_t *desc) override; void copySurfaceStateToSSH(void *surfaceStateHeap, const uint32_t surfaceStateOffset) override; void copyRedescribedSurfaceStateToSSH(void *surfaceStateHeap, const uint32_t surfaceStateOffset) override; + bool isMediaFormat(const ze_image_format_layout_t layout) { + if (layout == ze_image_format_layout_t::ZE_IMAGE_FORMAT_LAYOUT_NV12 || + layout == ze_image_format_layout_t::ZE_IMAGE_FORMAT_LAYOUT_P010 || + layout == ze_image_format_layout_t::ZE_IMAGE_FORMAT_LAYOUT_P012 || + layout == ze_image_format_layout_t::ZE_IMAGE_FORMAT_LAYOUT_P016) { + return true; + } + return false; + } + + static constexpr uint32_t zeImageFormatSwizzleMax = ZE_IMAGE_FORMAT_SWIZZLE_X + 1u; + + const std::array shaderChannelSelect = { + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_RED, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_GREEN, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_BLUE, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ALPHA, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ONE, + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO}; protected: RENDER_SURFACE_STATE surfaceState; diff --git a/level_zero/core/source/image/image_hw.inl b/level_zero/core/source/image/image_hw.inl index 790245cc1e..fbfc4249f8 100644 --- a/level_zero/core/source/image/image_hw.inl +++ b/level_zero/core/source/image/image_hw.inl @@ -16,6 +16,7 @@ #include "shared/source/memory_manager/memory_manager.h" #include "shared/source/utilities/compiler_support.h" +#include "level_zero/core/source/image/image_formats.h" #include "level_zero/core/source/image/image_hw.h" namespace L0 { @@ -23,29 +24,12 @@ template bool ImageCoreFamily::initialize(Device *device, const ze_image_desc_t *desc) { using RENDER_SURFACE_STATE = typename GfxFamily::RENDER_SURFACE_STATE; - if (static_cast(desc->format.layout) > ZE_IMAGE_FORMAT_LAYOUT_MAX) { - return false; - } - - if (static_cast(desc->format.type) > ZE_IMAGE_FORMAT_TYPE_MAX) { - return false; - } - - if (static_cast(desc->format.x) > ZE_IMAGE_FORMAT_SWIZZLE_MAX || - static_cast(desc->format.y) > ZE_IMAGE_FORMAT_SWIZZLE_MAX || - static_cast(desc->format.z) > ZE_IMAGE_FORMAT_SWIZZLE_MAX || - static_cast(desc->format.w) > ZE_IMAGE_FORMAT_SWIZZLE_MAX) { - return false; - } - - if (static_cast(desc->format.type) > ZE_IMAGE_FORMAT_TYPE_MAX) { - return false; - } + bool isMediaFormatLayout = isMediaFormat(desc->format.layout); auto imageDescriptor = convertDescriptor(*desc); imgInfo.imgDesc = imageDescriptor; - imgInfo.surfaceFormat = &surfaceFormatTable[desc->format.layout][desc->format.type]; + imgInfo.surfaceFormat = &ImageFormats::formats[desc->format.layout][desc->format.type]; imageFormatDesc = *const_cast(desc); UNRECOVERABLE_IF(device == nullptr); @@ -78,37 +62,39 @@ bool ImageCoreFamily::initialize(Device *device, const ze_image_d UNRECOVERABLE_IF(allocation == nullptr); auto gmm = this->allocation->getDefaultGmm(); - NEO::SurfaceOffsets surfaceOffsets = {imgInfo.offset, imgInfo.xOffset, imgInfo.yOffset, imgInfo.yOffsetForUVPlane}; auto gmmHelper = static_cast(device->getNEODevice()->getRootDeviceEnvironment()).getGmmHelper(); if (gmm != nullptr) { gmm->updateImgInfoAndDesc(imgInfo, 0u); } + NEO::SurfaceOffsets surfaceOffsets = {imgInfo.offset, imgInfo.xOffset, imgInfo.yOffset, imgInfo.yOffsetForUVPlane}; { surfaceState = GfxFamily::cmdInitRenderSurfaceState; NEO::setImageSurfaceState(&surfaceState, imgInfo, gmm, *gmmHelper, __GMM_NO_CUBE_MAP, this->allocation->getGpuAddress(), surfaceOffsets, - desc->format.layout == ZE_IMAGE_FORMAT_LAYOUT_NV12); + isMediaFormatLayout); NEO::setImageSurfaceStateDimensions(&surfaceState, imgInfo, __GMM_NO_CUBE_MAP, surfaceType); surfaceState.setSurfaceMinLod(0u); surfaceState.setMipCountLod(0u); NEO::setMipTailStartLod(&surfaceState, gmm); - surfaceState.setShaderChannelSelectRed( - static_cast( - shaderChannelSelect[desc->format.x])); - surfaceState.setShaderChannelSelectGreen( - static_cast( - shaderChannelSelect[desc->format.y])); - surfaceState.setShaderChannelSelectBlue( - static_cast( - shaderChannelSelect[desc->format.z])); - surfaceState.setShaderChannelSelectAlpha( - static_cast( - shaderChannelSelect[desc->format.w])); + if (!isMediaFormatLayout) { + surfaceState.setShaderChannelSelectRed( + static_cast( + shaderChannelSelect[desc->format.x])); + surfaceState.setShaderChannelSelectGreen( + static_cast( + shaderChannelSelect[desc->format.y])); + surfaceState.setShaderChannelSelectBlue( + static_cast( + shaderChannelSelect[desc->format.z])); + surfaceState.setShaderChannelSelectAlpha( + static_cast( + shaderChannelSelect[desc->format.w])); + } surfaceState.setNumberOfMultisamples(RENDER_SURFACE_STATE::NUMBER_OF_MULTISAMPLES::NUMBER_OF_MULTISAMPLES_MULTISAMPLECOUNT_1); @@ -117,11 +103,11 @@ bool ImageCoreFamily::initialize(Device *device, const ze_image_d } } { - const uint32_t exponent = Math::log2(imgInfo.surfaceFormat->NumChannels * imgInfo.surfaceFormat->PerChannelSizeInBytes); + const uint32_t exponent = Math::log2(imgInfo.surfaceFormat->ImageElementSizeInBytes); DEBUG_BREAK_IF(exponent >= 5u); NEO::ImageInfo imgInfoRedescirebed; - imgInfoRedescirebed.surfaceFormat = &surfaceFormatsForRedescribe[exponent % 5]; + imgInfoRedescirebed.surfaceFormat = &ImageFormats::surfaceFormatsForRedescribe[exponent % 5]; imgInfoRedescirebed.imgDesc = imgInfo.imgDesc; imgInfoRedescirebed.qPitch = imgInfo.qPitch; redescribedSurfaceState = GfxFamily::cmdInitRenderSurfaceState; diff --git a/level_zero/core/source/image/image_imp.h b/level_zero/core/source/image/image_imp.h index 7bf3467ebc..35895d7ccf 100644 --- a/level_zero/core/source/image/image_imp.h +++ b/level_zero/core/source/image/image_imp.h @@ -13,13 +13,6 @@ namespace L0 { -constexpr uint32_t ZE_IMAGE_FORMAT_RENDER_LAYOUT_MAX = ZE_IMAGE_FORMAT_LAYOUT_4_4_4_4; -constexpr uint32_t ZE_IMAGE_FORMAT_MEDIA_LAYOUT_OFFSET = ZE_IMAGE_FORMAT_LAYOUT_Y8; -constexpr uint32_t ZE_IMAGE_FORMAT_MEDIA_LAYOUT_MAX = ZE_IMAGE_FORMAT_LAYOUT_P416; -constexpr uint32_t ZE_IMAGE_FORMAT_LAYOUT_MAX = ZE_IMAGE_FORMAT_MEDIA_LAYOUT_MAX; -constexpr uint32_t ZE_IMAGE_FORMAT_TYPE_MAX = ZE_IMAGE_FORMAT_TYPE_FLOAT; -constexpr uint32_t ZE_IMAGE_FORMAT_SWIZZLE_MAX = ZE_IMAGE_FORMAT_SWIZZLE_X; - struct ImageImp : public Image { ze_result_t destroy() override; diff --git a/level_zero/core/test/unit_tests/mocks/CMakeLists.txt b/level_zero/core/test/unit_tests/mocks/CMakeLists.txt index 7d7f0068c8..708a53b66e 100644 --- a/level_zero/core/test/unit_tests/mocks/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/mocks/CMakeLists.txt @@ -22,6 +22,7 @@ set(L0_MOCKS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/mock_driver_handle.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_event.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_event.h + ${CMAKE_CURRENT_SOURCE_DIR}/mock_gmm_resource_info_l0.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_kernel.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_memory_manager.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_memory_manager.cpp @@ -37,7 +38,7 @@ target_include_directories(${TARGET_NAME} PRIVATE ${NEO_SOURCE_DIR}/level_zero/core/test/unit_test ) -target_compile_definitions(${TARGET_NAME} PRIVATE $) +target_compile_definitions(${TARGET_NAME} PUBLIC $) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER ${TARGET_NAME_L0}) create_source_tree(${TARGET_NAME} ${L0_ROOT_DIR}) diff --git a/level_zero/core/test/unit_tests/mocks/mock_gmm_resource_info_l0.cpp b/level_zero/core/test/unit_tests/mocks/mock_gmm_resource_info_l0.cpp new file mode 100644 index 0000000000..a0f76e9688 --- /dev/null +++ b/level_zero/core/test/unit_tests/mocks/mock_gmm_resource_info_l0.cpp @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2020 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/helpers/aligned_memory.h" + +#include "opencl/test/unit_test/mocks/mock_gmm_resource_info.h" + +#include "level_zero/core/source/image/image_formats.h" + +using namespace ::testing; + +namespace NEO { +GmmResourceInfo *GmmResourceInfo::create(GmmClientContext *clientContext, GMM_RESCREATE_PARAMS *resourceCreateParams) { + if (resourceCreateParams->Type == GMM_RESOURCE_TYPE::RESOURCE_INVALID) { + return nullptr; + } + return new ::testing::NiceMock(resourceCreateParams); +} + +GmmResourceInfo *GmmResourceInfo::create(GmmClientContext *clientContext, GMM_RESOURCE_INFO *inputGmmResourceInfo) { + return new ::testing::NiceMock(inputGmmResourceInfo); +} + +MockGmmResourceInfo::MockGmmResourceInfo(GMM_RESCREATE_PARAMS *resourceCreateParams) { + mockResourceCreateParams = *resourceCreateParams; + setupDefaultActions(); +} + +MockGmmResourceInfo::MockGmmResourceInfo(GMM_RESOURCE_INFO *inputGmmResourceInfo) { + mockResourceCreateParams = reinterpret_cast(inputGmmResourceInfo)->mockResourceCreateParams; + setupDefaultActions(); +}; + +// Simulate GMM behaviour. We dont want to test 3rd party lib +void MockGmmResourceInfo::setupDefaultActions() { + setSurfaceFormat(); + computeRowPitch(); + + size = rowPitch; + size *= static_cast(mockResourceCreateParams.BaseHeight); + + qPitch = alignUp((uint32_t)size, 64); + + size *= mockResourceCreateParams.Depth ? static_cast(mockResourceCreateParams.Depth) : 1; + size *= mockResourceCreateParams.ArraySize ? static_cast(mockResourceCreateParams.ArraySize) : 1; + size = alignUp(size, MemoryConstants::pageSize); +} + +GMM_STATUS MockGmmResourceInfo::getOffset(GMM_REQ_OFFSET_INFO &reqOffsetInfo) { + arrayIndexPassedToGetOffset = reqOffsetInfo.ArrayIndex; + getOffsetCalled++; + + reqOffsetInfo.Lock.Offset = 16; + reqOffsetInfo.Lock.Pitch = 2; + reqOffsetInfo.Render.YOffset = 1; + if (mockResourceCreateParams.Format == GMM_RESOURCE_FORMAT::GMM_FORMAT_NV12) { + reqOffsetInfo.Render.XOffset = 32; + reqOffsetInfo.Render.Offset = 64; + } + if (reqOffsetInfo.Slice == 1) { + reqOffsetInfo.Render.YOffset = mockResourceCreateParams.BaseHeight; + } + if (reqOffsetInfo.MipLevel > 0) { + reqOffsetInfo.Lock.Offset = 32; + } + + return GMM_SUCCESS; +} + +void MockGmmResourceInfo::computeRowPitch() { + if (mockResourceCreateParams.OverridePitch) { + rowPitch = mockResourceCreateParams.OverridePitch; + } else { + rowPitch = static_cast(mockResourceCreateParams.BaseWidth64 * (surfaceFormatInfo->ImageElementSizeInBytes)); + rowPitch = alignUp(rowPitch, 64); + } +} + +void MockGmmResourceInfo::setSurfaceFormat() { + auto iterateL0Formats = [&](const std::array &formats) { + if (!surfaceFormatInfo) { + for (auto &formatArray : formats) { + for (auto &format : formatArray) { + if (mockResourceCreateParams.Format == format.GMMSurfaceFormat) { + surfaceFormatInfo = &format; + return; + } + } + } + } + }; + + iterateL0Formats(L0::ImageFormats::formats); + + if (mockResourceCreateParams.Format == GMM_FORMAT_GENERIC_8BIT) { + static const NEO::SurfaceFormatInfo surfaceFormatGMM8BIT = {GMM_FORMAT_GENERIC_8BIT, GFX3DSTATE_SURFACEFORMAT_R8_UNORM, 0, 1, 1, 1}; + surfaceFormatInfo = &surfaceFormatGMM8BIT; + } + + ASSERT_NE(nullptr, surfaceFormatInfo); +} + +uint32_t MockGmmResourceInfo::getBitsPerPixel() { + return static_cast(surfaceFormatInfo->ImageElementSizeInBytes * 8); +} + +void MockGmmResourceInfo::setUnifiedAuxTranslationCapable() { + mockResourceCreateParams.Flags.Gpu.CCS = 1; + mockResourceCreateParams.Flags.Gpu.UnifiedAuxSurface = 1; + mockResourceCreateParams.Flags.Info.RenderCompressed = 1; +} + +void MockGmmResourceInfo::setMultisampleControlSurface() { + mockResourceCreateParams.Flags.Gpu.MCS = 1; +} + +void MockGmmResourceInfo::setUnifiedAuxPitchTiles(uint32_t value) { + this->unifiedAuxPitch = value; +} +void MockGmmResourceInfo::setAuxQPitch(uint32_t value) { + this->auxQPitch = value; +} + +uint32_t MockGmmResourceInfo::getTileModeSurfaceState() { + if (mockResourceCreateParams.Flags.Info.Linear == 1) { + return 0; + } + + if (mockResourceCreateParams.Type == GMM_RESOURCE_TYPE::RESOURCE_2D || + mockResourceCreateParams.Type == GMM_RESOURCE_TYPE::RESOURCE_3D) { + return 3; + } else { + return 0; + } +} + +MockGmmResourceInfo::MockGmmResourceInfo() {} +MockGmmResourceInfo::~MockGmmResourceInfo() {} +} // namespace NEO diff --git a/level_zero/core/test/unit_tests/sources/image/test_image.cpp b/level_zero/core/test/unit_tests/sources/image/test_image.cpp index e18d4ad050..48d592db8f 100644 --- a/level_zero/core/test/unit_tests/sources/image/test_image.cpp +++ b/level_zero/core/test/unit_tests/sources/image/test_image.cpp @@ -5,13 +5,18 @@ * */ +#include "shared/source/gmm_helper/gmm.h" +#include "shared/source/gmm_helper/resource_info.h" +#include "shared/source/helpers/surface_format_info.h" #include "shared/test/unit_test/helpers/default_hw_info.h" #include "shared/test/unit_test/mocks/mock_device.h" #include "test.h" +#include "level_zero/core/source/image/image_formats.h" #include "level_zero/core/source/image/image_hw.h" #include "level_zero/core/test/unit_tests/fixtures/device_fixture.h" +#include "level_zero/core/test/unit_tests/mocks/mock_device.h" namespace L0 { namespace ult { @@ -64,7 +69,7 @@ TEST(ImageStaticFunctionDescriptorTest, givenZeImageDescWhenConvertDescriptorThe EXPECT_EQ(desc.numSamples, 0u); } -using ImageSupport = IsAtMostProduct; +using ImageSupport = IsWithinProducts; using ImageCreate = Test; HWTEST2_F(ImageCreate, givenValidImageDescriptionWhenImageCreateThenImageIsCreatedCorrectly, ImageSupport) { @@ -107,5 +112,183 @@ HWTEST2_F(ImageCreate, givenValidImageDescriptionWhenImageCreateThenImageIsCreat EXPECT_EQ(imageInfo.useLocalMemory, false); } +class TestImageFormats : public DeviceFixture, public testing::TestWithParam> { + void SetUp() override { + DeviceFixture::SetUp(); + } + + void TearDown() override { + DeviceFixture::TearDown(); + } +}; + +template +struct WhiteBox<::L0::ImageCoreFamily> : public ::L0::ImageCoreFamily { + using BaseClass = ::L0::ImageCoreFamily; + using BaseClass::redescribedSurfaceState; + using BaseClass::surfaceState; +}; + +HWTEST2_F(ImageCreate, givenDifferentSwizzleFormatWhenImageInitializeThenCorrectSwizzleInRSSIsSet, ImageSupport) { + using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE; + + ze_image_desc_t desc = {}; + + desc.type = ZE_IMAGE_TYPE_3D; + desc.format.layout = ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8; + desc.format.type = ZE_IMAGE_FORMAT_TYPE_UINT; + desc.width = 11; + desc.height = 13; + desc.depth = 17; + + desc.format.x = ZE_IMAGE_FORMAT_SWIZZLE_A; + desc.format.y = ZE_IMAGE_FORMAT_SWIZZLE_0; + desc.format.z = ZE_IMAGE_FORMAT_SWIZZLE_1; + desc.format.w = ZE_IMAGE_FORMAT_SWIZZLE_X; + + auto imageHW = std::make_unique>>(); + bool ret = imageHW->initialize(device, &desc); + ASSERT_TRUE(ret); + + auto surfaceState = &imageHW->surfaceState; + + ASSERT_EQ(surfaceState->getShaderChannelSelectRed(), + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ALPHA); + ASSERT_EQ(surfaceState->getShaderChannelSelectGreen(), + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO); + ASSERT_EQ(surfaceState->getShaderChannelSelectBlue(), + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ONE); + ASSERT_EQ(surfaceState->getShaderChannelSelectAlpha(), + RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ZERO); +} + +HWTEST2_P(TestImageFormats, givenValidLayoutAndTypeWhenCreateImageCoreFamilyThenValidImageIsCreated, ImageSupport) { + auto params = GetParam(); + + ze_image_desc_t zeDesc = {}; + zeDesc.arraylevels = 1u; + zeDesc.depth = 10u; + zeDesc.height = 10u; + zeDesc.width = 10u; + zeDesc.miplevels = 1u; + zeDesc.type = ZE_IMAGE_TYPE_2D; + zeDesc.version = ZE_IMAGE_DESC_VERSION_CURRENT; + zeDesc.flags = ZE_IMAGE_FLAG_PROGRAM_READ; + + zeDesc.format = {params.first, + params.second, + ZE_IMAGE_FORMAT_SWIZZLE_R, + ZE_IMAGE_FORMAT_SWIZZLE_G, + ZE_IMAGE_FORMAT_SWIZZLE_B, + ZE_IMAGE_FORMAT_SWIZZLE_A}; + + auto imageHW = std::make_unique>>(); + + imageHW->initialize(device, &zeDesc); + + EXPECT_EQ(imageHW->getAllocation()->getAllocationType(), NEO::GraphicsAllocation::AllocationType::IMAGE); + auto RSS = imageHW->surfaceState; + EXPECT_EQ(RSS.getSurfaceType(), FamilyType::RENDER_SURFACE_STATE::SURFACE_TYPE_SURFTYPE_2D); + EXPECT_EQ(RSS.getAuxiliarySurfaceMode(), FamilyType::RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE); + EXPECT_EQ(RSS.getRenderTargetViewExtent(), 1u); + + auto hAlign = static_cast(imageHW->getAllocation()->getDefaultGmm()->gmmResourceInfo->getHAlignSurfaceState()); + auto vAlign = static_cast(imageHW->getAllocation()->getDefaultGmm()->gmmResourceInfo->getVAlignSurfaceState()); + + EXPECT_EQ(RSS.getSurfaceHorizontalAlignment(), hAlign); + EXPECT_EQ(RSS.getSurfaceVerticalAlignment(), vAlign); + + auto isMediaFormatLayout = imageHW->isMediaFormat(params.first); + if (isMediaFormatLayout) { + auto imgInfo = imageHW->getImageInfo(); + EXPECT_EQ(RSS.getShaderChannelSelectAlpha(), FamilyType::RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ONE); + EXPECT_EQ(RSS.getYOffsetForUOrUvPlane(), imgInfo.yOffsetForUVPlane); + EXPECT_EQ(RSS.getXOffsetForUOrUvPlane(), imgInfo.xOffset); + } else { + EXPECT_EQ(RSS.getYOffsetForUOrUvPlane(), 0u); + EXPECT_EQ(RSS.getXOffsetForUOrUvPlane(), 0u); + } + + EXPECT_EQ(RSS.getSurfaceMinLod(), 0u); + EXPECT_EQ(RSS.getMipCountLod(), 0u); + + if (!isMediaFormatLayout) { + EXPECT_EQ(RSS.getShaderChannelSelectRed(), FamilyType::RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT::SHADER_CHANNEL_SELECT_RED); + EXPECT_EQ(RSS.getShaderChannelSelectGreen(), FamilyType::RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT::SHADER_CHANNEL_SELECT_GREEN); + EXPECT_EQ(RSS.getShaderChannelSelectBlue(), FamilyType::RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT::SHADER_CHANNEL_SELECT_BLUE); + EXPECT_EQ(RSS.getShaderChannelSelectAlpha(), FamilyType::RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT::SHADER_CHANNEL_SELECT_ALPHA); + } + + EXPECT_EQ(RSS.getNumberOfMultisamples(), FamilyType::RENDER_SURFACE_STATE::NUMBER_OF_MULTISAMPLES::NUMBER_OF_MULTISAMPLES_MULTISAMPLECOUNT_1); +} + +std::pair validFormats[] = { + {ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_8, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2, ZE_IMAGE_FORMAT_TYPE_UINT}, + {ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2, ZE_IMAGE_FORMAT_TYPE_SINT}, + {ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2, ZE_IMAGE_FORMAT_TYPE_SNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_11_11_10, ZE_IMAGE_FORMAT_TYPE_FLOAT}, + {ZE_IMAGE_FORMAT_LAYOUT_5_6_5, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_5_5_5_1, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_4_4_4_4, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_Y8, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_NV12, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_YUYV, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_VYUY, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_YVYU, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_UYVY, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_AYUV, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_P010, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_Y410, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_P012, ZE_IMAGE_FORMAT_TYPE_UNORM}, + {ZE_IMAGE_FORMAT_LAYOUT_P016, ZE_IMAGE_FORMAT_TYPE_UNORM}}; + +INSTANTIATE_TEST_CASE_P( + validImageFormats, + TestImageFormats, + testing::ValuesIn(validFormats)); + } // namespace ult } // namespace L0 diff --git a/opencl/test/unit_test/mocks/mock_gmm_resource_info.cpp b/opencl/test/unit_test/mocks/mock_gmm_resource_info.cpp index acd5856b91..6a10157242 100644 --- a/opencl/test/unit_test/mocks/mock_gmm_resource_info.cpp +++ b/opencl/test/unit_test/mocks/mock_gmm_resource_info.cpp @@ -75,7 +75,7 @@ void MockGmmResourceInfo::computeRowPitch() { if (mockResourceCreateParams.OverridePitch) { rowPitch = mockResourceCreateParams.OverridePitch; } else { - rowPitch = static_cast(mockResourceCreateParams.BaseWidth64 * (surfaceFormatInfo->PerChannelSizeInBytes * surfaceFormatInfo->NumChannels)); + rowPitch = static_cast(mockResourceCreateParams.BaseWidth64 * (surfaceFormatInfo->ImageElementSizeInBytes)); rowPitch = alignUp(rowPitch, 64); } } @@ -116,7 +116,7 @@ void MockGmmResourceInfo::setSurfaceFormat() { } uint32_t MockGmmResourceInfo::getBitsPerPixel() { - return (surfaceFormatInfo->PerChannelSizeInBytes << 3) * surfaceFormatInfo->NumChannels; + return static_cast(surfaceFormatInfo->ImageElementSizeInBytes * 8); } void MockGmmResourceInfo::setUnifiedAuxTranslationCapable() { diff --git a/shared/source/generated/gen9/hw_cmds_generated_gen9.inl b/shared/source/generated/gen9/hw_cmds_generated_gen9.inl index e8ebeacbe0..39db696866 100644 --- a/shared/source/generated/gen9/hw_cmds_generated_gen9.inl +++ b/shared/source/generated/gen9/hw_cmds_generated_gen9.inl @@ -2457,6 +2457,7 @@ typedef struct tagRENDER_SURFACE_STATE { SURFACE_FORMAT_BC7_UNORM_SRGB = 0x1a3, SURFACE_FORMAT_BC6H_UF16 = 0x1a4, SURFACE_FORMAT_PLANAR_420_8 = 0x1a5, + SURFACE_FORMAT_PLANAR_420_16 = 0x1a6, SURFACE_FORMAT_R8G8B8_UNORM_SRGB = 0x1a8, SURFACE_FORMAT_ETC1_RGB8 = 0x1a9, SURFACE_FORMAT_ETC2_RGB8 = 0x1aa, diff --git a/shared/source/gmm_helper/gmm.cpp b/shared/source/gmm_helper/gmm.cpp index 71d69472d2..1ae4646b14 100644 --- a/shared/source/gmm_helper/gmm.cpp +++ b/shared/source/gmm_helper/gmm.cpp @@ -216,6 +216,7 @@ void Gmm::updateOffsetsInImgInfo(ImageInfo &imgInfo, uint32_t arrayIndex) { reqOffsetInfo.ArrayIndex = arrayIndex; reqOffsetInfo.Plane = imgInfo.plane; gmmResourceInfo->getOffset(reqOffsetInfo); + UNRECOVERABLE_IF(gmmResourceInfo->getBitsPerPixel() == 0u); imgInfo.xOffset = reqOffsetInfo.Render.XOffset / (gmmResourceInfo->getBitsPerPixel() / 8); imgInfo.yOffset = reqOffsetInfo.Render.YOffset; imgInfo.offset = reqOffsetInfo.Render.Offset; diff --git a/shared/source/helpers/surface_format_info.h b/shared/source/helpers/surface_format_info.h index 5e0dfba74a..33ba78fcb6 100644 --- a/shared/source/helpers/surface_format_info.h +++ b/shared/source/helpers/surface_format_info.h @@ -139,6 +139,7 @@ enum GFX3DSTATE_SURFACEFORMAT : unsigned short { GFX3DSTATE_SURFACEFORMAT_R8_USCALED = 0x14A, GFX3DSTATE_SURFACEFORMAT_P8_UNORM = 0x14B, GFX3DSTATE_SURFACEFORMAT_L8_UNORM_SRGB = 0x14C, + GFX3DSTATE_SURFACEFORMAT_Y8_UNORM = 0x150, GFX3DSTATE_SURFACEFORMAT_DXT1_RGB_SRGB = 0x180, GFX3DSTATE_SURFACEFORMAT_R1_UINT = 0x181, GFX3DSTATE_SURFACEFORMAT_YCRCB_NORMAL = 0x182, @@ -175,6 +176,9 @@ enum GFX3DSTATE_SURFACEFORMAT : unsigned short { GFX3DSTATE_SURFACEFORMAT_BC7_UNORM_SRGB = 0x1A3, GFX3DSTATE_SURFACEFORMAT_BC6H_UF16 = 0x1A4, GFX3DSTATE_SURFACEFORMAT_NV12 = 0x1A5, + GFX3DSTATE_SURFACEFORMAT_PLANAR_420_16 = 0x1a6, + GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_SINT = 0x1b6, + GFX3DSTATE_SURFACEFORMAT_R10G10B10A2_SNORM = 0x1b3, GFX3DSTATE_SURFACEFORMAT_RAW = 0x1FF, NUM_GFX3DSTATE_SURFACEFORMATS };