compute-runtime/unit_tests/helpers/mipmap_tests.cpp

170 lines
7.3 KiB
C++
Raw Normal View History

/*
* Copyright (C) 2018 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "runtime/helpers/mipmap.h"
#include "runtime/mem_obj/image.h"
#include "unit_tests/mocks/mock_buffer.h"
#include "unit_tests/mocks/mock_gmm.h"
#include "unit_tests/mocks/mock_image.h"
#include "gtest/gtest.h"
using namespace OCLRT;
constexpr size_t testOrigin[]{2, 3, 5, 7};
typedef ::testing::TestWithParam<std::pair<uint32_t, size_t>> MipLevelTest;
TEST_P(MipLevelTest, givenMemObjectTypeReturnProperMipLevel) {
auto pair = GetParam();
EXPECT_EQ(static_cast<uint32_t>(pair.second), findMipLevel(pair.first, testOrigin));
}
INSTANTIATE_TEST_CASE_P(MipLevel,
MipLevelTest,
::testing::Values(std::make_pair(CL_MEM_OBJECT_IMAGE1D, testOrigin[1]),
std::make_pair(CL_MEM_OBJECT_IMAGE1D_ARRAY, testOrigin[2]),
std::make_pair(CL_MEM_OBJECT_IMAGE2D, testOrigin[2]),
std::make_pair(CL_MEM_OBJECT_IMAGE2D_ARRAY, testOrigin[3]),
std::make_pair(CL_MEM_OBJECT_IMAGE3D, testOrigin[3]),
std::make_pair(CL_MEM_OBJECT_BUFFER, 0U),
std::make_pair(CL_MEM_OBJECT_IMAGE1D_BUFFER, 0U),
std::make_pair(CL_MEM_OBJECT_PIPE, 0U)));
typedef ::testing::TestWithParam<std::pair<uint32_t, uint32_t>> MipLevelOriginIdxTest;
TEST_P(MipLevelOriginIdxTest, givenMemObjectTypeReturnProperMipLevelOriginIdx) {
auto pair = GetParam();
EXPECT_EQ(static_cast<uint32_t>(pair.second), getMipLevelOriginIdx(pair.first));
}
INSTANTIATE_TEST_CASE_P(MipLevelOriginIdx,
MipLevelOriginIdxTest,
::testing::Values(std::make_pair(CL_MEM_OBJECT_IMAGE1D, 1U),
std::make_pair(CL_MEM_OBJECT_IMAGE1D_ARRAY, 2U),
std::make_pair(CL_MEM_OBJECT_IMAGE2D, 2U),
std::make_pair(CL_MEM_OBJECT_IMAGE2D_ARRAY, 3U),
std::make_pair(CL_MEM_OBJECT_IMAGE3D, 3U),
std::make_pair(CL_MEM_OBJECT_IMAGE1D_BUFFER, 0U),
std::make_pair(CL_MEM_OBJECT_BUFFER, static_cast<uint32_t>(-1)),
std::make_pair(CL_MEM_OBJECT_PIPE, static_cast<uint32_t>(-1))));
TEST(MipmapHelper, givenClImageDescWithoutMipLevelsWhenIsMipMappedIsCalledThenFalseIsReturned) {
cl_image_desc desc = {};
desc.num_mip_levels = 0;
EXPECT_FALSE(OCLRT::isMipMapped(desc));
desc.num_mip_levels = 1;
EXPECT_FALSE(OCLRT::isMipMapped(desc));
}
TEST(MipmapHelper, givenClImageDescWithMipLevelsWhenIsMipMappedIsCalledThenTrueIsReturned) {
cl_image_desc desc = {};
desc.num_mip_levels = 2;
EXPECT_TRUE(OCLRT::isMipMapped(desc));
}
TEST(MipmapHelper, givenBufferWhenIsMipMappedIsCalledThenFalseIsReturned) {
MockBuffer buffer;
EXPECT_FALSE(OCLRT::isMipMapped(&buffer));
}
struct MockImage : MockImageBase {
MockImage() : MockImageBase() {
surfaceFormatInfo.ImageElementSizeInBytes = 4u;
}
};
TEST(MipmapHelper, givenImageWithoutMipLevelsWhenIsMipMappedIsCalledThenFalseIsReturned) {
MockImage image;
image.imageDesc.num_mip_levels = 0;
EXPECT_FALSE(OCLRT::isMipMapped(&image));
image.imageDesc.num_mip_levels = 1;
EXPECT_FALSE(OCLRT::isMipMapped(&image));
}
TEST(MipmapHelper, givenImageWithMipLevelsWhenIsMipMappedIsCalledThenTrueIsReturned) {
MockImage image;
image.imageDesc.num_mip_levels = 2;
EXPECT_TRUE(OCLRT::isMipMapped(&image));
}
TEST(MipmapHelper, givenImageWithoutMipLevelsWhenGetMipOffsetIsCalledThenZeroIsReturned) {
MockImage image;
image.imageDesc.num_mip_levels = 1;
auto offset = getMipOffset(&image, testOrigin);
EXPECT_EQ(0U, offset);
}
using myTuple = std::tuple<std::array<size_t, 4>, uint32_t, uint32_t>;
using MipOffsetTest = ::testing::TestWithParam<myTuple>;
TEST_P(MipOffsetTest, givenImageWithMipLevelsWhenGetMipOffsetIsCalledThenProperOffsetIsReturned) {
std::array<size_t, 4> origin;
uint32_t expectedOffset;
cl_mem_object_type imageType;
std::tie(origin, expectedOffset, imageType) = GetParam();
MockImage image;
image.imageDesc.num_mip_levels = 16;
image.imageDesc.image_type = imageType;
image.imageDesc.image_width = 11;
image.imageDesc.image_height = 13;
image.imageDesc.image_depth = 17;
auto offset = getMipOffset(&image, origin.data());
EXPECT_EQ(expectedOffset, offset);
}
constexpr myTuple testOrigins[]{myTuple({{2, 3, 5, 7}},
812u, CL_MEM_OBJECT_IMAGE3D),
myTuple({{2, 3, 5, 2}},
592u, CL_MEM_OBJECT_IMAGE3D),
myTuple({{2, 3, 5, 1}},
572u, CL_MEM_OBJECT_IMAGE3D),
myTuple({{2, 3, 5, 0}},
0u, CL_MEM_OBJECT_IMAGE3D),
myTuple({{2, 3, 5, 7}},
812u, CL_MEM_OBJECT_IMAGE2D_ARRAY),
myTuple({{2, 3, 5, 2}},
592u, CL_MEM_OBJECT_IMAGE2D_ARRAY),
myTuple({{2, 3, 5, 1}},
572u, CL_MEM_OBJECT_IMAGE2D_ARRAY),
myTuple({{2, 3, 5, 0}},
0u, CL_MEM_OBJECT_IMAGE2D_ARRAY),
myTuple({{2, 3, 5, 0}},
724u, CL_MEM_OBJECT_IMAGE2D),
myTuple({{2, 3, 2, 0}},
592u, CL_MEM_OBJECT_IMAGE2D),
myTuple({{2, 3, 1, 0}},
572u, CL_MEM_OBJECT_IMAGE2D),
myTuple({{2, 3, 0, 0}},
0u, CL_MEM_OBJECT_IMAGE2D),
myTuple({{2, 3, 5, 0}},
724u, CL_MEM_OBJECT_IMAGE1D_ARRAY),
myTuple({{2, 3, 2, 0}},
592u, CL_MEM_OBJECT_IMAGE1D_ARRAY),
myTuple({{2, 3, 1, 0}},
572u, CL_MEM_OBJECT_IMAGE1D_ARRAY),
myTuple({{2, 3, 0, 0}},
0u, CL_MEM_OBJECT_IMAGE1D_ARRAY),
myTuple({{2, 3, 0, 0}},
56u, CL_MEM_OBJECT_IMAGE1D),
myTuple({{2, 2, 0, 0}},
52u, CL_MEM_OBJECT_IMAGE1D),
myTuple({{2, 1, 0, 0}},
44u, CL_MEM_OBJECT_IMAGE1D),
myTuple({{2, 0, 0, 0}},
0u, CL_MEM_OBJECT_IMAGE1D)};
INSTANTIATE_TEST_CASE_P(MipMapOffset,
MipOffsetTest,
::testing::ValuesIn(testOrigins));