aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2018-04-13 12:08:01 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-04-14 01:35:01 +0000
commit520e578b9987ea99b8ee62b485e941b3d5d96e0f (patch)
treeb26fef23d4f43efacce66e96a7b936e8a016b49d
parent3e4cbbb55d381458f17cdfe22f5797547b22f983 (diff)
Cumulate deltas even if they're out of the clip
Otherwise, GM complexclip_aa_inverse will be drawn incorrectly in t8888 mode. Bug: skia: Change-Id: I2fe9dd94f3219e3883f713ca95ea3c3d8a49c7ba Reviewed-on: https://skia-review.googlesource.com/121261 Reviewed-by: Cary Clark <caryclark@google.com> Commit-Queue: Yuqian Li <liyuqian@google.com>
-rw-r--r--src/core/SkBlitter.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 0a642ca4f6..18b9d83048 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -129,9 +129,15 @@ void SkBlitter::blitCoverageDeltas(SkCoverageDeltaList* deltas, const SkIRect& c
int lastX = clip.fLeft; // init x to clip.fLeft
SkFixed coverage = 0; // init coverage to 0
- // skip deltas with x less than clip.fLeft; they must be precision errors
- for(; i < deltas->count(y) && deltas->getDelta(y, i).fX < clip.fLeft; ++i)
- ;
+ // skip deltas with x less than clip.fLeft; they may be:
+ // 1. precision errors
+ // 2. deltas generated during init-once phase (threaded backend) that has a wider
+ // clip than the final tile clip.
+ for(; i < deltas->count(y) && deltas->getDelta(y, i).fX < clip.fLeft; ++i) {
+#ifndef SK_SUPPORT_LEGACY_THREADED_DAA_BUGS
+ coverage += deltas->getDelta(y, i).fDelta;
+#endif
+ }
for(; i < deltas->count(y) && deltas->getDelta(y, i).fX < clip.fRight; ++i) {
const SkCoverageDelta& delta = deltas->getDelta(y, i);
SkASSERT(delta.fX >= lastX); // delta must be x sorted