diff options
-rw-r--r-- | src/gpu/GrRenderTargetContext.cpp | 2 | ||||
-rw-r--r-- | tests/BlurTest.cpp | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 576f348c01..aae0248ae4 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -503,7 +503,7 @@ void GrRenderTargetContext::drawRect(const GrClip& clip, AutoCheckFlush acf(this->drawingManager()); const SkStrokeRec& stroke = style->strokeRec(); - if (stroke.getStyle() == SkStrokeRec::kFill_Style) { + if (stroke.getStyle() == SkStrokeRec::kFill_Style && !paint.numCoverageFragmentProcessors()) { // Check if this is a full RT draw and can be replaced with a clear. We don't bother // checking cases where the RT is fully inside a stroke. SkRect rtRect = fRenderTargetProxy->getBoundsRect(); diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp index e0ce22e3d6..07cfdcd2b1 100644 --- a/tests/BlurTest.cpp +++ b/tests/BlurTest.cpp @@ -708,3 +708,39 @@ DEF_TEST(BlurZeroSigma, reporter) { } } + +/////////////////////////////////////////////////////////////////////////////////////////// +#if SK_SUPPORT_GPU + +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BlurMaskBiggerThanDest, reporter, ctxInfo) { + GrContext* context = ctxInfo.grContext(); + + SkImageInfo ii = SkImageInfo::Make(32, 32, kRGBA_8888_SkColorType, kPremul_SkAlphaType); + + sk_sp<SkSurface> dst(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii)); + if (!dst) { + ERRORF(reporter, "Could not create surface for test."); + return; + } + + SkPaint p; + p.setColor(SK_ColorRED); + p.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 3)); + + SkCanvas* canvas = dst->getCanvas(); + + canvas->clear(SK_ColorBLACK); + canvas->drawCircle(SkPoint::Make(16, 16), 8, p); + + SkBitmap readback; + SkAssertResult(readback.tryAllocPixels(ii)); + + canvas->readPixels(readback, 0, 0); + REPORTER_ASSERT(reporter, SkColorGetR(readback.getColor(15, 15)) > 128); + REPORTER_ASSERT(reporter, SkColorGetG(readback.getColor(15, 15)) == 0); + REPORTER_ASSERT(reporter, SkColorGetB(readback.getColor(15, 15)) == 0); + REPORTER_ASSERT(reporter, readback.getColor(31, 31) == SK_ColorBLACK); +} + +#endif + |