2017-12-21 00:45:38 +01:00
|
|
|
/*
|
2021-05-16 20:51:16 +02:00
|
|
|
* Copyright (C) 2018-2021 Intel Corporation
|
2018-09-18 09:11:08 +02:00
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2020-02-23 15:20:22 +01:00
|
|
|
#include "opencl/test/unit_test/mocks/mock_gmm_resource_info.h"
|
2019-02-27 11:39:32 +01:00
|
|
|
|
2020-02-23 22:44:01 +01:00
|
|
|
#include "shared/source/helpers/aligned_memory.h"
|
2020-02-24 10:22:30 +01:00
|
|
|
|
2020-02-22 22:50:57 +01:00
|
|
|
#include "opencl/source/helpers/surface_formats.h"
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
using namespace ::testing;
|
|
|
|
|
2019-03-26 11:59:46 +01:00
|
|
|
namespace NEO {
|
2019-12-30 14:14:27 +01:00
|
|
|
GmmResourceInfo *GmmResourceInfo::create(GmmClientContext *clientContext, GMM_RESCREATE_PARAMS *resourceCreateParams) {
|
2019-04-01 07:22:13 +02:00
|
|
|
if (resourceCreateParams->Type == GMM_RESOURCE_TYPE::RESOURCE_INVALID) {
|
|
|
|
return nullptr;
|
|
|
|
}
|
2017-12-21 00:45:38 +01:00
|
|
|
return new ::testing::NiceMock<MockGmmResourceInfo>(resourceCreateParams);
|
|
|
|
}
|
|
|
|
|
2019-12-30 14:14:27 +01:00
|
|
|
GmmResourceInfo *GmmResourceInfo::create(GmmClientContext *clientContext, GMM_RESOURCE_INFO *inputGmmResourceInfo) {
|
2017-12-21 00:45:38 +01:00
|
|
|
return new ::testing::NiceMock<MockGmmResourceInfo>(inputGmmResourceInfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
MockGmmResourceInfo::MockGmmResourceInfo(GMM_RESCREATE_PARAMS *resourceCreateParams) {
|
|
|
|
mockResourceCreateParams = *resourceCreateParams;
|
|
|
|
setupDefaultActions();
|
|
|
|
}
|
|
|
|
|
|
|
|
MockGmmResourceInfo::MockGmmResourceInfo(GMM_RESOURCE_INFO *inputGmmResourceInfo) {
|
|
|
|
mockResourceCreateParams = reinterpret_cast<MockGmmResourceInfo *>(inputGmmResourceInfo)->mockResourceCreateParams;
|
|
|
|
setupDefaultActions();
|
|
|
|
};
|
|
|
|
|
|
|
|
// Simulate GMM behaviour. We dont want to test 3rd party lib
|
|
|
|
void MockGmmResourceInfo::setupDefaultActions() {
|
|
|
|
setSurfaceFormat();
|
|
|
|
computeRowPitch();
|
|
|
|
|
|
|
|
size = rowPitch;
|
|
|
|
size *= static_cast<size_t>(mockResourceCreateParams.BaseHeight);
|
|
|
|
|
|
|
|
qPitch = alignUp((uint32_t)size, 64);
|
|
|
|
|
|
|
|
size *= mockResourceCreateParams.Depth ? static_cast<size_t>(mockResourceCreateParams.Depth) : 1;
|
|
|
|
size *= mockResourceCreateParams.ArraySize ? static_cast<size_t>(mockResourceCreateParams.ArraySize) : 1;
|
|
|
|
size = alignUp(size, MemoryConstants::pageSize);
|
2018-03-23 10:19:14 +01:00
|
|
|
}
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-03-23 10:19:14 +01:00
|
|
|
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;
|
|
|
|
}
|
2018-04-04 09:29:48 +02:00
|
|
|
if (reqOffsetInfo.MipLevel > 0) {
|
|
|
|
reqOffsetInfo.Lock.Offset = 32;
|
|
|
|
}
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-03-23 10:19:14 +01:00
|
|
|
return GMM_SUCCESS;
|
2017-12-21 00:45:38 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void MockGmmResourceInfo::computeRowPitch() {
|
|
|
|
if (mockResourceCreateParams.OverridePitch) {
|
|
|
|
rowPitch = mockResourceCreateParams.OverridePitch;
|
|
|
|
} else {
|
2020-04-14 09:57:59 +02:00
|
|
|
rowPitch = static_cast<size_t>(mockResourceCreateParams.BaseWidth64 * (surfaceFormatInfo->ImageElementSizeInBytes));
|
2017-12-21 00:45:38 +01:00
|
|
|
rowPitch = alignUp(rowPitch, 64);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void MockGmmResourceInfo::setSurfaceFormat() {
|
2020-01-08 17:29:15 +01:00
|
|
|
auto iterate = [&](ArrayRef<const ClSurfaceFormatInfo> formats) {
|
2017-12-21 00:45:38 +01:00
|
|
|
if (!surfaceFormatInfo) {
|
2018-09-11 13:08:29 +02:00
|
|
|
for (auto &format : formats) {
|
2020-01-08 17:29:15 +01:00
|
|
|
if (mockResourceCreateParams.Format == format.surfaceFormat.GMMSurfaceFormat) {
|
|
|
|
surfaceFormatInfo = &format.surfaceFormat;
|
2017-12-21 00:45:38 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-12-14 12:40:21 +01:00
|
|
|
if (mockResourceCreateParams.Format == GMM_RESOURCE_FORMAT::GMM_FORMAT_P010 || mockResourceCreateParams.Format == GMM_RESOURCE_FORMAT::GMM_FORMAT_P016) {
|
|
|
|
tempSurface.GMMSurfaceFormat = mockResourceCreateParams.Format;
|
2019-04-18 20:01:05 +02:00
|
|
|
tempSurface.NumChannels = 1;
|
|
|
|
tempSurface.ImageElementSizeInBytes = 16;
|
|
|
|
tempSurface.PerChannelSizeInBytes = 16;
|
|
|
|
|
2018-11-21 07:47:21 -08:00
|
|
|
surfaceFormatInfo = &tempSurface;
|
|
|
|
}
|
|
|
|
|
2020-05-18 22:45:32 +02:00
|
|
|
if (mockResourceCreateParams.Format == GMM_RESOURCE_FORMAT::GMM_FORMAT_RGBP) {
|
|
|
|
tempSurface.GMMSurfaceFormat = GMM_RESOURCE_FORMAT::GMM_FORMAT_RGBP;
|
|
|
|
tempSurface.NumChannels = 1;
|
|
|
|
tempSurface.ImageElementSizeInBytes = 8;
|
|
|
|
tempSurface.PerChannelSizeInBytes = 8;
|
|
|
|
|
|
|
|
surfaceFormatInfo = &tempSurface;
|
|
|
|
}
|
|
|
|
|
2020-01-10 09:48:09 +01:00
|
|
|
iterate(SurfaceFormats::readOnly12());
|
|
|
|
iterate(SurfaceFormats::readOnly20());
|
2018-09-11 13:08:29 +02:00
|
|
|
iterate(SurfaceFormats::writeOnly());
|
|
|
|
iterate(SurfaceFormats::readWrite());
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-09-11 13:08:29 +02:00
|
|
|
iterate(SurfaceFormats::packedYuv());
|
|
|
|
iterate(SurfaceFormats::planarYuv());
|
2020-09-23 17:01:19 +02:00
|
|
|
iterate(SurfaceFormats::packed());
|
2017-12-21 00:45:38 +01:00
|
|
|
|
2018-09-11 13:08:29 +02:00
|
|
|
iterate(SurfaceFormats::readOnlyDepth());
|
|
|
|
iterate(SurfaceFormats::readWriteDepth());
|
2017-12-21 00:45:38 +01:00
|
|
|
|
|
|
|
ASSERT_NE(nullptr, surfaceFormatInfo);
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t MockGmmResourceInfo::getBitsPerPixel() {
|
2020-04-14 09:57:59 +02:00
|
|
|
return static_cast<uint32_t>(surfaceFormatInfo->ImageElementSizeInBytes * 8);
|
2017-12-21 00:45:38 +01:00
|
|
|
}
|
|
|
|
|
2018-01-25 15:10:07 +01:00
|
|
|
void MockGmmResourceInfo::setUnifiedAuxTranslationCapable() {
|
|
|
|
mockResourceCreateParams.Flags.Gpu.CCS = 1;
|
|
|
|
mockResourceCreateParams.Flags.Gpu.UnifiedAuxSurface = 1;
|
2020-01-07 10:10:57 +01:00
|
|
|
mockResourceCreateParams.Flags.Info.RenderCompressed = 1;
|
2018-01-25 15:10:07 +01:00
|
|
|
}
|
|
|
|
|
2019-01-30 11:29:48 +01:00
|
|
|
void MockGmmResourceInfo::setMultisampleControlSurface() {
|
|
|
|
mockResourceCreateParams.Flags.Gpu.MCS = 1;
|
|
|
|
}
|
|
|
|
|
2019-02-08 10:19:22 +01:00
|
|
|
void MockGmmResourceInfo::setUnifiedAuxPitchTiles(uint32_t value) {
|
|
|
|
this->unifiedAuxPitch = value;
|
|
|
|
}
|
|
|
|
void MockGmmResourceInfo::setAuxQPitch(uint32_t value) {
|
|
|
|
this->auxQPitch = value;
|
|
|
|
}
|
|
|
|
|
2019-01-22 10:24:28 +01:00
|
|
|
uint32_t MockGmmResourceInfo::getTileModeSurfaceState() {
|
2019-08-26 09:27:30 +02:00
|
|
|
if (mockResourceCreateParams.Flags.Info.Linear == 1) {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2019-01-22 10:24:28 +01:00
|
|
|
if (mockResourceCreateParams.Type == GMM_RESOURCE_TYPE::RESOURCE_2D ||
|
|
|
|
mockResourceCreateParams.Type == GMM_RESOURCE_TYPE::RESOURCE_3D) {
|
|
|
|
return 3;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-21 00:45:38 +01:00
|
|
|
MockGmmResourceInfo::MockGmmResourceInfo() {}
|
|
|
|
MockGmmResourceInfo::~MockGmmResourceInfo() {}
|
2019-03-26 11:59:46 +01:00
|
|
|
} // namespace NEO
|