/* * 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> MipLevelTest; TEST_P(MipLevelTest, givenMemObjectTypeReturnProperMipLevel) { auto pair = GetParam(); EXPECT_EQ(static_cast(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> MipLevelOriginIdxTest; TEST_P(MipLevelOriginIdxTest, givenMemObjectTypeReturnProperMipLevelOriginIdx) { auto pair = GetParam(); EXPECT_EQ(static_cast(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(-1)), std::make_pair(CL_MEM_OBJECT_PIPE, static_cast(-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, uint32_t, uint32_t>; using MipOffsetTest = ::testing::TestWithParam; TEST_P(MipOffsetTest, givenImageWithMipLevelsWhenGetMipOffsetIsCalledThenProperOffsetIsReturned) { std::array 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));