Chromium Code Reviews| Index: src/gpu/GrClipStackClip.cpp |
| diff --git a/src/gpu/GrClipStackClip.cpp b/src/gpu/GrClipStackClip.cpp |
| index 14c2dbe8accdb2250315b58a416493798e2bb796..d524dcc3c431c273e491f1c28d0a5bfc30cb20f2 100644 |
| --- a/src/gpu/GrClipStackClip.cpp |
| +++ b/src/gpu/GrClipStackClip.cpp |
| @@ -298,7 +298,13 @@ bool GrClipStackClip::apply(GrContext* context, GrRenderTargetContext* renderTar |
| return InitialState::kAllIn == reducedClip.initialState(); |
| } |
| +#ifdef SK_DEBUG |
| SkASSERT(reducedClip.hasIBounds()); |
| + SkIRect rtIBounds = SkIRect::MakeWH(renderTargetContext->width(), |
| + renderTargetContext->height()); |
| + SkIRect clipIBounds = reducedClip.ibounds().makeOffset(-fOrigin.x(), -fOrigin.y()); |
| + SkASSERT(rtIBounds.contains(clipIBounds)); // Mask shouldn't be larger than the RT. |
| +#endif |
| // An element count of 4 was chosen because of the common pattern in Blink of: |
| // isect RR |
| @@ -380,8 +386,8 @@ static void GetClipMaskKey(int32_t clipGenID, const SkIRect& bounds, GrUniqueKey |
| static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); |
| GrUniqueKey::Builder builder(key, kDomain, 3); |
| builder[0] = clipGenID; |
| - builder[1] = SkToU16(bounds.fLeft) | (SkToU16(bounds.fRight) << 16); |
| - builder[2] = SkToU16(bounds.fTop) | (SkToU16(bounds.fBottom) << 16); |
| + builder[1] = SkToS16(bounds.fLeft) | (SkToS16(bounds.fRight) << 16); |
|
bsalomon
2016/10/28 14:24:49
Do we expect these bounds to ever be negative? I t
csmartdalton
2016/10/28 16:50:30
If you disable all types of clipping except for so
|
| + builder[2] = SkToS16(bounds.fTop) | (SkToS16(bounds.fBottom) << 16); |
| } |
| sk_sp<GrTexture> GrClipStackClip::CreateAlphaClipMask(GrContext* context, |
| @@ -432,7 +438,9 @@ sk_sp<GrTexture> GrClipStackClip::CreateSoftwareClipMask(GrTextureProvider* texP |
| SkMatrix translate; |
| translate.setTranslate(SkIntToScalar(-reducedClip.left()), SkIntToScalar(-reducedClip.top())); |
| - helper.init(maskSpaceIBounds, &translate); |
| + if (!helper.init(maskSpaceIBounds, &translate)) { |
| + return nullptr; |
| + } |
| helper.clear(InitialState::kAllIn == reducedClip.initialState() ? 0xFF : 0x00); |
| for (ElementList::Iter iter(reducedClip.elements()); iter.get(); iter.next()) { |