diff --git a/impeller/geometry/geometry_unittests.cc b/impeller/geometry/geometry_unittests.cc index f60cf50bfeaeb..6d615a94e8f11 100644 --- a/impeller/geometry/geometry_unittests.cc +++ b/impeller/geometry/geometry_unittests.cc @@ -640,6 +640,8 @@ TEST(GeometryTest, CanGenerateMipCounts) { ASSERT_EQ((Size{128, 0}.MipCount()), 1u); ASSERT_EQ((Size{128, -25}.MipCount()), 1u); ASSERT_EQ((Size{-128, 25}.MipCount()), 1u); + ASSERT_EQ((Size{1, 1}.MipCount()), 1u); + ASSERT_EQ((Size{0, 0}.MipCount()), 1u); } TEST(GeometryTest, CanConvertTTypesExplicitly) { diff --git a/impeller/geometry/size.h b/impeller/geometry/size.h index 6cb55cab47472..dc6abd4126d6e 100644 --- a/impeller/geometry/size.h +++ b/impeller/geometry/size.h @@ -99,10 +99,12 @@ struct TSize { } constexpr size_t MipCount() const { + constexpr size_t minimum_mip = 1u; if (!IsPositive()) { - return 1u; + return minimum_mip; } - return std::max(ceil(log2(width)), ceil(log2(height))); + size_t result = std::max(ceil(log2(width)), ceil(log2(height))); + return std::max(result, minimum_mip); } };