Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 1131b65

Browse files
bsalomonSkia Commit-Bot
authored andcommitted
Reenable circle blur fast path for ellipse that transforms to circle
Bug: chromium:1132617 Change-Id: Id9ecc22dfd1720195e0753cfc2b0897fe09dc2ae Reviewed-on: https://skia-review.googlesource.com/c/skia/+/327378 Reviewed-by: Robert Phillips <robertphillips@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
1 parent fd74ac6 commit 1131b65

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

src/core/SkBlurMF.cpp

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -713,21 +713,33 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrRecordingContext* context,
713713

714714
std::unique_ptr<GrFragmentProcessor> fp;
715715

716+
SkRRect devRRect;
717+
bool devRRectIsValid = srcRRect.transform(viewMatrix, &devRRect);
718+
719+
bool devRRectIsCircle = devRRectIsValid && SkRRectPriv::IsCircle(devRRect);
720+
716721
bool canBeRect = srcRRect.isRect() && viewMatrix.preservesRightAngles();
717-
bool canBeCircle = SkRRectPriv::IsCircle(srcRRect) && viewMatrix.isSimilarity();
722+
bool canBeCircle = (SkRRectPriv::IsCircle(srcRRect) && viewMatrix.isSimilarity()) ||
723+
devRRectIsCircle;
724+
718725
if (canBeRect || canBeCircle) {
719726
if (canBeRect) {
720727
fp = GrRectBlurEffect::Make(
721728
/*inputFP=*/nullptr, context, *context->priv().caps()->shaderCaps(),
722729
srcRRect.rect(), viewMatrix, xformedSigma);
723730
} else {
724-
SkPoint center = {srcRRect.getBounds().centerX(), srcRRect.getBounds().centerY()};
725-
viewMatrix.mapPoints(&center, 1);
726-
SkScalar radius = viewMatrix.mapVector(0, srcRRect.width()/2.f).length();
727-
SkRect devBounds = {center.x() - radius,
728-
center.y() - radius,
729-
center.x() + radius,
730-
center.y() + radius};
731+
SkRect devBounds;
732+
if (devRRectIsCircle) {
733+
devBounds = devRRect.getBounds();
734+
} else {
735+
SkPoint center = {srcRRect.getBounds().centerX(), srcRRect.getBounds().centerY()};
736+
viewMatrix.mapPoints(&center, 1);
737+
SkScalar radius = viewMatrix.mapVector(0, srcRRect.width()/2.f).length();
738+
devBounds = {center.x() - radius,
739+
center.y() - radius,
740+
center.x() + radius,
741+
center.y() + radius};
742+
}
731743
fp = GrCircleBlurFragmentProcessor::Make(/*inputFP=*/nullptr, context, devBounds,
732744
xformedSigma);
733745
}
@@ -760,8 +772,7 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrRecordingContext* context,
760772
if (!viewMatrix.isScaleTranslate()) {
761773
return false;
762774
}
763-
SkRRect devRRect;
764-
if (!srcRRect.transform(viewMatrix, &devRRect) || !SkRRectPriv::AllCornersCircular(devRRect)) {
775+
if (!devRRectIsValid || !SkRRectPriv::AllCornersCircular(devRRect)) {
765776
return false;
766777
}
767778

0 commit comments

Comments
 (0)