Avoid MIP mapping in strict_constraint_no_red_allowed
Change-Id: Ia5fa3b7c61fb26abb9bcd2f21e1b9f01e77eb08e
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290762
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/gm/bleed.cpp b/gm/bleed.cpp
index fcf7c55..4c297f3 100644
--- a/gm/bleed.cpp
+++ b/gm/bleed.cpp
@@ -253,12 +253,18 @@
this->drawCase4(canvas, kCol1X, kRow3Y, aa, kLow_SkFilterQuality);
this->drawCase5(canvas, kCol1X, kRow4Y, aa, kLow_SkFilterQuality);
- // Then draw a column with high filtering
- this->drawCase1(canvas, kCol2X, kRow0Y, aa, kHigh_SkFilterQuality);
- this->drawCase2(canvas, kCol2X, kRow1Y, aa, kHigh_SkFilterQuality);
- this->drawCase3(canvas, kCol2X, kRow2Y, aa, kHigh_SkFilterQuality);
- this->drawCase4(canvas, kCol2X, kRow3Y, aa, kHigh_SkFilterQuality);
- this->drawCase5(canvas, kCol2X, kRow4Y, aa, kHigh_SkFilterQuality);
+ // Then draw a column with high filtering. Skip it if in kStrict mode and MIP
+ // mapping will be used. On GPU we allow bleeding at non-base levels because
+ // building a new MIP chain for the subset is expensive.
+ SkScalar scales[2];
+ SkAssertResult(matrices[m].getMinMaxScales(scales));
+ if (fConstraint != SkCanvas::kStrict_SrcRectConstraint || scales[0] >= 1.f) {
+ this->drawCase1(canvas, kCol2X, kRow0Y, aa, kHigh_SkFilterQuality);
+ this->drawCase2(canvas, kCol2X, kRow1Y, aa, kHigh_SkFilterQuality);
+ this->drawCase3(canvas, kCol2X, kRow2Y, aa, kHigh_SkFilterQuality);
+ this->drawCase4(canvas, kCol2X, kRow3Y, aa, kHigh_SkFilterQuality);
+ this->drawCase5(canvas, kCol2X, kRow4Y, aa, kHigh_SkFilterQuality);
+ }
SkPoint corners[] = { { 0, 0 },{ 0, kBottom },{ kWidth, kBottom },{ kWidth, 0 } };
matrices[m].mapPoints(corners, 4);