From 99bba9ea829323a7941d4f3a9c98da7a76432d1b Mon Sep 17 00:00:00 2001 From: Yuqian Li Date: Mon, 21 Nov 2016 09:44:59 -0500 Subject: Add missing virtual functions for SkRectClipCheckBlitter This CL is related to the issue that we tried to fix in https://skia-review.googlesource.com/c/5078/ Specifically, SkARGB32_Blitter overrides blitAntiH2 and blitAntiV2 and they're different from blitAntiRuns. Therefore, if SkRectClipCheckBlitter does not override those two functions, we're going to get different results in debug and release build. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5082 Change-Id: I7f9565d494f0a6c45ab5a06fbedb73ef233b9a1f Reviewed-on: https://skia-review.googlesource.com/5082 Reviewed-by: Mike Reed Commit-Queue: Yuqian Li --- src/core/SkBlitter.cpp | 10 ++++++++++ src/core/SkBlitter.h | 2 ++ src/core/SkScanPriv.h | 2 +- src/core/SkScan_Path.cpp | 8 ++++---- 4 files changed, 17 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index af3cc04932..731d0d3cb7 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -1070,4 +1070,14 @@ const SkPixmap* SkRectClipCheckBlitter::justAnOpaqueColor(uint32_t* value) { return fBlitter->justAnOpaqueColor(value); } +void SkRectClipCheckBlitter::blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) { + SkASSERT(fClipRect.contains(SkIRect::MakeXYWH(x, y, 2, 1))); + fBlitter->blitAntiH2(x, y, a0, a1); +} + +void SkRectClipCheckBlitter::blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) { + SkASSERT(fClipRect.contains(SkIRect::MakeXYWH(x, y, 1, 2))); + fBlitter->blitAntiV2(x, y, a0, a1); +} + #endif diff --git a/src/core/SkBlitter.h b/src/core/SkBlitter.h index c9fed1ce22..f03a308243 100644 --- a/src/core/SkBlitter.h +++ b/src/core/SkBlitter.h @@ -258,6 +258,8 @@ public: SkAlpha leftAlpha, SkAlpha rightAlpha) override; void blitMask(const SkMask&, const SkIRect& clip) override; const SkPixmap* justAnOpaqueColor(uint32_t* value) override; + void blitAntiH2(int x, int y, U8CPU a0, U8CPU a1) override; + void blitAntiV2(int x, int y, U8CPU a0, U8CPU a1) override; int requestRowsPreserved() const override { return fBlitter->requestRowsPreserved(); diff --git a/src/core/SkScanPriv.h b/src/core/SkScanPriv.h index af0a4cbd3f..4c237e004b 100644 --- a/src/core/SkScanPriv.h +++ b/src/core/SkScanPriv.h @@ -24,7 +24,7 @@ private: SkRectClipBlitter fRectBlitter; SkRgnClipBlitter fRgnBlitter; #ifdef SK_DEBUG - // SkRectClipCheckBlitter fRectClipCheckBlitter; + SkRectClipCheckBlitter fRectClipCheckBlitter; #endif SkBlitter* fBlitter; const SkIRect* fClipRect; diff --git a/src/core/SkScan_Path.cpp b/src/core/SkScan_Path.cpp index bf8f32080d..ec0fe06b66 100644 --- a/src/core/SkScan_Path.cpp +++ b/src/core/SkScan_Path.cpp @@ -559,8 +559,8 @@ SkScanClipper::SkScanClipper(SkBlitter* blitter, const SkRegion* clip, if (clip->isRect()) { if (fClipRect->contains(ir)) { #ifdef SK_DEBUG - // fRectClipCheckBlitter.init(blitter, *fClipRect); - // blitter = &fRectClipCheckBlitter; + fRectClipCheckBlitter.init(blitter, *fClipRect); + blitter = &fRectClipCheckBlitter; #endif fClipRect = nullptr; } else { @@ -570,8 +570,8 @@ SkScanClipper::SkScanClipper(SkBlitter* blitter, const SkRegion* clip, blitter = &fRectBlitter; } else { #ifdef SK_DEBUG - // fRectClipCheckBlitter.init(blitter, *fClipRect); - // blitter = &fRectClipCheckBlitter; + fRectClipCheckBlitter.init(blitter, *fClipRect); + blitter = &fRectClipCheckBlitter; #endif } } -- cgit v1.2.3