| Index: src/core/SkImageFilter.cpp | 
| diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp | 
| index 7518501aa5e21805ca4d5cfece09c97cda78699b..e64cf7200aca22df518d245b4f97be45691db513 100644 | 
| --- a/src/core/SkImageFilter.cpp | 
| +++ b/src/core/SkImageFilter.cpp | 
| @@ -265,25 +265,16 @@ bool SkImageFilter::filterImage(Proxy* proxy, const SkBitmap& src, | 
| } | 
|  | 
| bool SkImageFilter::filterInput(int index, Proxy* proxy, const SkBitmap& src, | 
| -                                const Context& origCtx, | 
| -                                SkBitmap* result, SkIPoint* offset, | 
| -                                bool relaxSizeConstraint) const { | 
| +                                const Context& ctx, | 
| +                                SkBitmap* result, SkIPoint* offset) const { | 
| SkImageFilter* input = this->getInput(index); | 
| if (!input) { | 
| return true; | 
| } | 
| - | 
| -    SizeConstraint constraint = origCtx.sizeConstraint(); | 
| -    if (relaxSizeConstraint && (kExact_SizeConstraint == constraint)) { | 
| -        constraint = kApprox_SizeConstraint; | 
| -    } | 
| -    Context ctx(origCtx.ctm(), origCtx.clipBounds(), origCtx.cache(), constraint); | 
| - | 
| return input->filterImage(proxy, src, this->mapContext(ctx), result, offset); | 
| } | 
|  | 
| -bool SkImageFilter::filterBounds(const SkIRect& src, const SkMatrix& ctm, | 
| -                                 SkIRect* dst) const { | 
| +bool SkImageFilter::filterBounds(const SkIRect& src, const SkMatrix& ctm, SkIRect* dst) const { | 
| SkASSERT(dst); | 
| return this->onFilterBounds(src, ctm, dst); | 
| } | 
| @@ -353,8 +344,7 @@ bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont | 
| desc.fHeight = bounds.height(); | 
| desc.fConfig = kRGBA_8888_GrPixelConfig; | 
|  | 
| -    SkAutoTUnref<GrTexture> dst(context->textureProvider()->createTexture(desc, | 
| -                                      GrTextureProvider::FromImageFilter(ctx.sizeConstraint()))); | 
| +    SkAutoTUnref<GrTexture> dst(context->textureProvider()->createApproxTexture(desc)); | 
| if (!dst) { | 
| return false; | 
| } | 
| @@ -488,7 +478,7 @@ SkImageFilter::Context SkImageFilter::mapContext(const Context& ctx) const { | 
| SkIRect clipBounds; | 
| this->onFilterNodeBounds(ctx.clipBounds(), ctx.ctm(), &clipBounds, | 
| MapDirection::kReverse_MapDirection); | 
| -    return Context(ctx.ctm(), clipBounds, ctx.cache(), ctx.sizeConstraint()); | 
| +    return Context(ctx.ctm(), clipBounds, ctx.cache()); | 
| #endif | 
| } | 
|  | 
| @@ -519,7 +509,7 @@ void SkImageFilter::WrapTexture(GrTexture* texture, int width, int height, SkBit | 
| } | 
|  | 
| bool SkImageFilter::filterInputGPU(int index, SkImageFilter::Proxy* proxy, | 
| -                                   const SkBitmap& src, const Context& origCtx, | 
| +                                   const SkBitmap& src, const Context& ctx, | 
| SkBitmap* result, SkIPoint* offset) const { | 
| SkImageFilter* input = this->getInput(index); | 
| if (!input) { | 
| @@ -529,9 +519,6 @@ bool SkImageFilter::filterInputGPU(int index, SkImageFilter::Proxy* proxy, | 
| // matrix with no clip and that the matrix, clip, and render target set before this function was | 
| // called are restored before we return to the caller. | 
| GrContext* context = src.getTexture()->getContext(); | 
| - | 
| -    Context ctx(origCtx.ctm(), origCtx.clipBounds(), origCtx.cache(), kApprox_SizeConstraint); | 
| - | 
| if (input->filterImage(proxy, src, this->mapContext(ctx), result, offset)) { | 
| if (!result->getTexture()) { | 
| const SkImageInfo info = result->info(); | 
|  |