aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrReducedClip.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-12-05 10:35:15 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-05 15:56:01 +0000
commit1447177005fcbac83acd501766a46c751a49ae73 (patch)
treeed20f7b0984a3a0f01e0d46465c4fda98bb49802 /src/gpu/GrReducedClip.cpp
parentbb4b20a265a78b561c005aaf80920d4bc9c2e7d0 (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.cpp18
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);
}