| Index: src/gpu/GrClipMaskManager.cpp
|
| diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp
|
| index cce0b20eeeb7b12ae2e93cc95e0343929a04668b..c591bf11826babd6fdfe9861994a1a8bc8da9e7b 100644
|
| --- a/src/gpu/GrClipMaskManager.cpp
|
| +++ b/src/gpu/GrClipMaskManager.cpp
|
| @@ -306,7 +306,7 @@ bool GrClipMaskManager::SetupClipping(GrContext* context,
|
| out->makeScissoredFPBased(std::move(clipFP), scissorSpaceIBounds);
|
| return true;
|
| }
|
| - out->makeFPBased(std::move(clipFP));
|
| + out->makeFPBased(std::move(clipFP), SkRect::Make(scissorSpaceIBounds));
|
| return true;
|
| }
|
| }
|
| @@ -347,7 +347,8 @@ bool GrClipMaskManager::SetupClipping(GrContext* context,
|
| // clipSpace bounds. We determine the mask's position WRT to the render target here.
|
| SkIRect rtSpaceMaskBounds = clipSpaceIBounds;
|
| rtSpaceMaskBounds.offset(-clip.origin());
|
| - out->makeFPBased(create_fp_for_mask(result.get(), rtSpaceMaskBounds));
|
| + out->makeFPBased(create_fp_for_mask(result.get(), rtSpaceMaskBounds),
|
| + SkRect::Make(rtSpaceMaskBounds));
|
| return true;
|
| }
|
| // if alpha clip mask creation fails fall through to the non-AA code paths
|
| @@ -368,7 +369,7 @@ bool GrClipMaskManager::SetupClipping(GrContext* context,
|
| // use both stencil and scissor test to the bounds for the final draw.
|
| SkIRect scissorSpaceIBounds(clipSpaceIBounds);
|
| scissorSpaceIBounds.offset(clipSpaceToStencilSpaceOffset);
|
| - out->makeScissoredStencil(true, scissorSpaceIBounds);
|
| + out->makeScissoredStencil(scissorSpaceIBounds);
|
| return true;
|
| }
|
|
|
| @@ -594,7 +595,7 @@ bool GrClipMaskManager::CreateStencilClipMask(GrContext* context,
|
|
|
| bool fillInverted = false;
|
| // enabled at bottom of loop
|
| - clip.enableStencilClip(false);
|
| + clip.disableStencilClip();
|
|
|
| // This will be used to determine whether the clip shape can be rendered into the
|
| // stencil with arbitrary stencil settings.
|
| @@ -690,16 +691,20 @@ bool GrClipMaskManager::CreateStencilClipMask(GrContext* context,
|
|
|
| // now we modify the clip bit by rendering either the clip
|
| // element directly or a bounding rect of the entire clip.
|
| - clip.enableStencilClip(true);
|
| for (GrUserStencilSettings const* const* pass = stencilPasses; *pass; ++pass) {
|
|
|
| if (drawDirectToClip) {
|
| if (Element::kRect_Type == element->getType()) {
|
| + clip.enableStencilClip(element->getRect().makeOffset(translate.fX,
|
| + translate.fY));
|
| drawContext->drawContextPriv().stencilRect(clip, *pass, useHWAA, viewMatrix,
|
| element->getRect());
|
| } else {
|
| GrShape shape(clipPath, GrStyle::SimpleFill());
|
| GrPaint paint;
|
| + SkRect bounds = clipPath.getBounds();
|
| + bounds.offset(translate.fX, translate.fY);
|
| + clip.enableStencilClip(bounds);
|
| paint.setXPFactory(GrDisableColorXPFactory::Make());
|
| paint.setAntiAlias(element->isAA());
|
| GrPathRenderer::DrawPathArgs args;
|
| @@ -717,6 +722,9 @@ bool GrClipMaskManager::CreateStencilClipMask(GrContext* context,
|
| } else {
|
| // The view matrix is setup to do clip space -> stencil space translation, so
|
| // draw rect in clip space.
|
| + SkRect bounds = SkRect::Make(clipSpaceIBounds);
|
| + bounds.offset(translate.fX, translate.fY);
|
| + clip.enableStencilClip(bounds);
|
| drawContext->drawContextPriv().stencilRect(clip, *pass, false, viewMatrix,
|
| SkRect::Make(clipSpaceIBounds));
|
| }
|
|
|