From f95ff4a37aba42a07b0fed9ee760d1a238c6d291 Mon Sep 17 00:00:00 2001 From: cblume Date: Thu, 2 Jun 2016 09:01:48 -0700 Subject: Add getting the size of a given mipmap level. When allocating memory for mipmaps, it would be very handy to know the dimensions of a given mipmap level. R=bsalomon@google.com BUG=578304 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2018283002 Review-Url: https://codereview.chromium.org/2018283002 --- tests/MipMapTest.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'tests/MipMapTest.cpp') diff --git a/tests/MipMapTest.cpp b/tests/MipMapTest.cpp index 467fd34998..5070d04df6 100644 --- a/tests/MipMapTest.cpp +++ b/tests/MipMapTest.cpp @@ -150,3 +150,50 @@ DEF_TEST(MipMap_ComputeLevelCount, reporter) { REPORTER_ASSERT(reporter, currentTest.fExpectedLevelCount == levelCount); } } + +struct LevelSizeScenario { + int fBaseWidth; + int fBaseHeight; + int fLevel; + SkSize fExpectedMipMapLevelSize; +}; + +DEF_TEST(MipMap_ComputeLevelSize, reporter) { + const LevelSizeScenario tests[] = { + // Test mipmaps with negative sizes + {-100, 100, 1, SkSize::Make(0, 0)}, + {100, -100, 1, SkSize::Make(0, 0)}, + {-100, -100, 1, SkSize::Make(0, 0)}, + + // Test mipmaps with 0, 1, 2 as dimensions + // (SkMipMap::Build requires a min size of 1) + // + // 0 + {0, 100, 1, SkSize::Make(0, 0)}, + {100, 0, 1, SkSize::Make(0, 0)}, + {0, 0, 1, SkSize::Make(0, 0)}, + // 1 + + {1, 100, 1, SkSize::Make(1, 50)}, + {100, 1, 1, SkSize::Make(50, 1)}, + {1, 1, 1, SkSize::Make(0, 0)}, + // 2 + {2, 100, 1, SkSize::Make(1, 50)}, + {100, 2, 2, SkSize::Make(25, 1)}, + {2, 2, 1, SkSize::Make(1, 1)}, + + // Test a handful of cases + {63, 63, 3, SkSize::Make(7, 7)}, + {64, 64, 3, SkSize::Make(8, 8)}, + {127, 127, 3, SkSize::Make(15, 15)}, + {64, 129, 4, SkSize::Make(4, 8)}, + {255, 32, 7, SkSize::Make(1, 1)}, + {500, 1000, 2, SkSize::Make(125, 250)}, + }; + + for (auto& currentTest : tests) { + SkSize levelSize = SkMipMap::ComputeLevelSize(currentTest.fBaseWidth, + currentTest.fBaseHeight, currentTest.fLevel); + REPORTER_ASSERT(reporter, currentTest.fExpectedMipMapLevelSize == levelSize); + } +} -- cgit v1.2.3