diff options
author | Brian Salomon <bsalomon@google.com> | 2017-12-05 10:35:15 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-05 15:56:01 +0000 |
commit | 1447177005fcbac83acd501766a46c751a49ae73 (patch) | |
tree | ed20f7b0984a3a0f01e0d46465c4fda98bb49802 /src/gpu/GrReducedClip.cpp | |
parent | bb4b20a265a78b561c005aaf80920d4bc9c2e7d0 (diff) |
Avoid GrEllipseEffect for small radii on devices without 32 bit float.
Also limit small radius bail in GrCircleEffect to clip out cases.
Change-Id: I14ce736969b05203219d68f30283c36c84f78f3a
Reviewed-on: https://skia-review.googlesource.com/80621
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrReducedClip.cpp')
-rw-r--r-- | src/gpu/GrReducedClip.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gpu/GrReducedClip.cpp b/src/gpu/GrReducedClip.cpp index 883ed5d956..f481a10b1c 100644 --- a/src/gpu/GrReducedClip.cpp +++ b/src/gpu/GrReducedClip.cpp @@ -32,9 +32,8 @@ * take a rect in case the caller knows a bound on what is to be drawn through this clip. */ GrReducedClip::GrReducedClip(const SkClipStack& stack, const SkRect& queryBounds, - int maxWindowRectangles, int maxAnalyticFPs) - : fMaxWindowRectangles(maxWindowRectangles) - , fMaxAnalyticFPs(maxAnalyticFPs) { + const GrShaderCaps* caps, int maxWindowRectangles, int maxAnalyticFPs) + : fCaps(caps), fMaxWindowRectangles(maxWindowRectangles), fMaxAnalyticFPs(maxAnalyticFPs) { SkASSERT(!queryBounds.isEmpty()); SkASSERT(fMaxWindowRectangles <= GrWindowRectangles::kMaxWindows); fHasScissor = false; @@ -588,7 +587,7 @@ inline GrReducedClip::ClipResult GrReducedClip::addAnalyticFP(const T& deviceSpa : GrClipEdgeType::kInverseFillBW; } - if (auto fp = make_analytic_clip_fp(edgeType, deviceSpaceShape)) { + if (auto fp = make_analytic_clip_fp(edgeType, deviceSpaceShape, *fCaps)) { fAnalyticFPs.push_back(std::move(fp)); return ClipResult::kClipped; } @@ -597,17 +596,20 @@ inline GrReducedClip::ClipResult GrReducedClip::addAnalyticFP(const T& deviceSpa } std::unique_ptr<GrFragmentProcessor> make_analytic_clip_fp(GrClipEdgeType edgeType, - const SkRect& deviceSpaceRect) { + const SkRect& deviceSpaceRect, + const GrShaderCaps&) { return GrConvexPolyEffect::Make(edgeType, deviceSpaceRect); } std::unique_ptr<GrFragmentProcessor> make_analytic_clip_fp(GrClipEdgeType edgeType, - const SkRRect& deviceSpaceRRect) { - return GrRRectEffect::Make(edgeType, deviceSpaceRRect); + const SkRRect& deviceSpaceRRect, + const GrShaderCaps& caps) { + return GrRRectEffect::Make(edgeType, deviceSpaceRRect, caps); } std::unique_ptr<GrFragmentProcessor> make_analytic_clip_fp(GrClipEdgeType edgeType, - const SkPath& deviceSpacePath) { + const SkPath& deviceSpacePath, + const GrShaderCaps&) { return GrConvexPolyEffect::Make(edgeType, deviceSpacePath); } |