2020-02-12 06:42:16 +08:00
|
|
|
/*
|
2021-01-29 18:17:10 +08:00
|
|
|
* Copyright (C) 2020-2021 Intel Corporation
|
2020-02-12 06:42:16 +08:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2020-02-24 08:01:38 +08:00
|
|
|
#include "shared/test/unit_test/image/image_surface_state_fixture.h"
|
2020-02-12 06:42:16 +08:00
|
|
|
|
2020-03-19 21:26:08 +08:00
|
|
|
using namespace NEO;
|
|
|
|
|
2020-02-12 06:42:16 +08:00
|
|
|
HWTEST_F(ImageSurfaceStateTests, givenImageInfoWhenSetImageSurfaceStateThenProperFieldsAreSet) {
|
|
|
|
auto size = sizeof(typename FamilyType::RENDER_SURFACE_STATE);
|
|
|
|
auto surfaceState = std::make_unique<char[]>(size);
|
|
|
|
auto castSurfaceState = reinterpret_cast<typename FamilyType::RENDER_SURFACE_STATE *>(surfaceState.get());
|
|
|
|
const uint32_t cubeFaceIndex = 2u;
|
|
|
|
|
|
|
|
imageInfo.qPitch = 1u;
|
|
|
|
imageInfo.imgDesc.imageArraySize = 2u;
|
|
|
|
imageInfo.imgDesc.imageDepth = 3u;
|
|
|
|
imageInfo.imgDesc.imageHeight = 4u;
|
|
|
|
imageInfo.imgDesc.imageRowPitch = 5u;
|
|
|
|
imageInfo.imgDesc.imageSlicePitch = 6u;
|
|
|
|
imageInfo.imgDesc.imageWidth = 7u;
|
|
|
|
imageInfo.imgDesc.numMipLevels = 8u;
|
|
|
|
imageInfo.imgDesc.numSamples = 9u;
|
|
|
|
imageInfo.imgDesc.imageType = ImageType::Image2DArray;
|
2020-02-12 15:59:03 +08:00
|
|
|
SurfaceFormatInfo surfaceFormatInfo;
|
|
|
|
surfaceFormatInfo.GenxSurfaceFormat = GFX3DSTATE_SURFACEFORMAT::GFX3DSTATE_SURFACEFORMAT_A32_FLOAT;
|
|
|
|
imageInfo.surfaceFormat = &surfaceFormatInfo;
|
|
|
|
SurfaceOffsets surfaceOffsets;
|
|
|
|
surfaceOffsets.offset = 0u;
|
|
|
|
surfaceOffsets.xOffset = 11u;
|
|
|
|
surfaceOffsets.yOffset = 12u;
|
|
|
|
surfaceOffsets.yOffsetForUVplane = 13u;
|
2020-02-12 06:42:16 +08:00
|
|
|
|
2020-02-12 15:59:03 +08:00
|
|
|
const uint64_t gpuAddress = 0x000001a78a8a8000;
|
|
|
|
|
|
|
|
setImageSurfaceState<FamilyType>(castSurfaceState, imageInfo, &mockGmm, *gmmHelper, cubeFaceIndex, gpuAddress, surfaceOffsets, true);
|
2020-02-12 06:42:16 +08:00
|
|
|
|
|
|
|
using RENDER_SURFACE_STATE = typename FamilyType::RENDER_SURFACE_STATE;
|
|
|
|
using SURFACE_FORMAT = typename RENDER_SURFACE_STATE::SURFACE_FORMAT;
|
|
|
|
using AUXILIARY_SURFACE_MODE = typename RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE;
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getRenderTargetViewExtent(), 1u);
|
|
|
|
EXPECT_EQ(castSurfaceState->getMinimumArrayElement(), cubeFaceIndex);
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceQpitch(), imageInfo.qPitch >> RENDER_SURFACE_STATE::tagSURFACEQPITCH::SURFACEQPITCH_BIT_SHIFT);
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceArray(), true);
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceHorizontalAlignment(), static_cast<typename RENDER_SURFACE_STATE::SURFACE_HORIZONTAL_ALIGNMENT>(mockGmm.gmmResourceInfo->getHAlignSurfaceState()));
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceVerticalAlignment(), static_cast<typename RENDER_SURFACE_STATE::SURFACE_VERTICAL_ALIGNMENT>(mockGmm.gmmResourceInfo->getVAlignSurfaceState()));
|
|
|
|
EXPECT_EQ(castSurfaceState->getTileMode(), mockGmm.gmmResourceInfo->getTileModeSurfaceState());
|
|
|
|
EXPECT_EQ(castSurfaceState->getMemoryObjectControlState(), gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_IMAGE));
|
|
|
|
EXPECT_EQ(castSurfaceState->getCoherencyType(), RENDER_SURFACE_STATE::COHERENCY_TYPE_GPU_COHERENT);
|
|
|
|
EXPECT_EQ(castSurfaceState->getMultisampledSurfaceStorageFormat(), RENDER_SURFACE_STATE::MULTISAMPLED_SURFACE_STORAGE_FORMAT::MULTISAMPLED_SURFACE_STORAGE_FORMAT_MSS);
|
|
|
|
|
2020-02-12 15:59:03 +08:00
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceBaseAddress(), gpuAddress + surfaceOffsets.offset);
|
|
|
|
|
|
|
|
uint32_t xOffset = surfaceOffsets.xOffset >> RENDER_SURFACE_STATE::tagXOFFSET::XOFFSET_BIT_SHIFT;
|
|
|
|
uint32_t yOffset = surfaceOffsets.yOffset >> RENDER_SURFACE_STATE::tagYOFFSET::YOFFSET_BIT_SHIFT;
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getXOffset(), xOffset << RENDER_SURFACE_STATE::tagXOFFSET::XOFFSET_BIT_SHIFT);
|
|
|
|
EXPECT_EQ(castSurfaceState->getYOffset(), yOffset << RENDER_SURFACE_STATE::tagYOFFSET::YOFFSET_BIT_SHIFT);
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getShaderChannelSelectAlpha(), RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ONE);
|
|
|
|
EXPECT_EQ(castSurfaceState->getYOffsetForUOrUvPlane(), surfaceOffsets.yOffsetForUVplane);
|
|
|
|
EXPECT_EQ(castSurfaceState->getXOffsetForUOrUvPlane(), surfaceOffsets.xOffset);
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceFormat(), static_cast<SURFACE_FORMAT>(imageInfo.surfaceFormat->GenxSurfaceFormat));
|
|
|
|
|
2020-02-12 06:42:16 +08:00
|
|
|
surfaceState = std::make_unique<char[]>(size);
|
|
|
|
castSurfaceState = reinterpret_cast<typename FamilyType::RENDER_SURFACE_STATE *>(surfaceState.get());
|
|
|
|
|
2020-02-12 15:59:03 +08:00
|
|
|
setImageSurfaceState<FamilyType>(castSurfaceState, imageInfo, nullptr, *gmmHelper, cubeFaceIndex, gpuAddress, surfaceOffsets, false);
|
2020-02-12 06:42:16 +08:00
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceHorizontalAlignment(), RENDER_SURFACE_STATE::SURFACE_HORIZONTAL_ALIGNMENT_HALIGN_4);
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceVerticalAlignment(), RENDER_SURFACE_STATE::SURFACE_VERTICAL_ALIGNMENT_VALIGN_4);
|
2020-02-12 15:59:03 +08:00
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getShaderChannelSelectAlpha(), RENDER_SURFACE_STATE::SHADER_CHANNEL_SELECT_ALPHA);
|
|
|
|
EXPECT_EQ(castSurfaceState->getYOffsetForUOrUvPlane(), 0u);
|
|
|
|
EXPECT_EQ(castSurfaceState->getXOffsetForUOrUvPlane(), 0u);
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getAuxiliarySurfaceMode(), AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_NONE);
|
|
|
|
EXPECT_EQ(castSurfaceState->getAuxiliarySurfacePitch(), 1u);
|
|
|
|
EXPECT_EQ(castSurfaceState->getAuxiliarySurfaceQpitch(), 0u);
|
|
|
|
EXPECT_EQ(castSurfaceState->getAuxiliarySurfaceBaseAddress(), 0u);
|
2020-02-13 05:55:46 +08:00
|
|
|
|
|
|
|
surfaceState = std::make_unique<char[]>(size);
|
|
|
|
castSurfaceState = reinterpret_cast<typename FamilyType::RENDER_SURFACE_STATE *>(surfaceState.get());
|
|
|
|
typename FamilyType::RENDER_SURFACE_STATE::SURFACE_TYPE surfaceType = RENDER_SURFACE_STATE::SURFACE_TYPE::SURFACE_TYPE_SURFTYPE_3D;
|
|
|
|
|
|
|
|
setImageSurfaceStateDimensions<FamilyType>(castSurfaceState, imageInfo, cubeFaceIndex, surfaceType);
|
|
|
|
|
|
|
|
EXPECT_EQ(castSurfaceState->getWidth(), static_cast<uint32_t>(imageInfo.imgDesc.imageWidth));
|
|
|
|
EXPECT_EQ(castSurfaceState->getHeight(), static_cast<uint32_t>(imageInfo.imgDesc.imageHeight));
|
|
|
|
EXPECT_EQ(castSurfaceState->getDepth(), __GMM_MAX_CUBE_FACE - cubeFaceIndex);
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfacePitch(), static_cast<uint32_t>(imageInfo.imgDesc.imageRowPitch));
|
|
|
|
EXPECT_EQ(castSurfaceState->getSurfaceType(), surfaceType);
|
2020-02-12 06:42:16 +08:00
|
|
|
}
|
2020-02-13 21:43:34 +08:00
|
|
|
|
|
|
|
HWTEST_F(ImageSurfaceStateTests, givenGmmWhenSetAuxParamsForCCSThenAuxiliarySurfaceModeIsSet) {
|
|
|
|
auto size = sizeof(typename FamilyType::RENDER_SURFACE_STATE);
|
|
|
|
auto surfaceState = std::make_unique<char[]>(size);
|
|
|
|
auto castSurfaceState = reinterpret_cast<typename FamilyType::RENDER_SURFACE_STATE *>(surfaceState.get());
|
2021-01-29 23:40:17 +08:00
|
|
|
EncodeSurfaceState<FamilyType>::setImageAuxParamsForCCS(castSurfaceState, &mockGmm);
|
2020-02-13 21:43:34 +08:00
|
|
|
|
2021-06-09 00:37:54 +08:00
|
|
|
mockGmm.isCompressionEnabled = true;
|
2021-01-29 23:40:17 +08:00
|
|
|
EXPECT_TRUE(EncodeSurfaceState<FamilyType>::isAuxModeEnabled(castSurfaceState, &mockGmm));
|
2021-07-21 19:06:06 +08:00
|
|
|
}
|