| Index: src/effects/SkMorphologyImageFilter.cpp | 
| diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp | 
| index 3e3dbe41fe9ea8b4151f01712b169583b6a85c34..6c3e6f6dc7633d9ee468bcdf14c1603130a2daf8 100644 | 
| --- a/src/effects/SkMorphologyImageFilter.cpp | 
| +++ b/src/effects/SkMorphologyImageFilter.cpp | 
| @@ -503,11 +503,9 @@ bool apply_morphology(const SkBitmap& input, | 
| GrMorphologyEffect::MorphologyType morphType, | 
| SkISize radius, | 
| SkBitmap* dst) { | 
| -    GrTexture* srcTexture = input.getTexture(); | 
| +    SkAutoTUnref<GrTexture> srcTexture(SkRef(input.getTexture())); | 
| SkASSERT(srcTexture); | 
| GrContext* context = srcTexture->getContext(); | 
| -    srcTexture->ref(); | 
| -    SkAutoTUnref<GrTexture> src(srcTexture); | 
|  | 
| GrContext::AutoMatrix am; | 
| am.setIdentity(context); | 
| @@ -524,32 +522,32 @@ bool apply_morphology(const SkBitmap& input, | 
| SkIRect srcRect = rect; | 
|  | 
| if (radius.fWidth > 0) { | 
| -        GrAutoScratchTexture ast(context, desc); | 
| -        if (NULL == ast.texture()) { | 
| +        GrTexture* texture = context->refScratchTexture(desc, GrContext::kApprox_ScratchTexMatch); | 
| +        if (NULL == texture) { | 
| return false; | 
| } | 
| -        GrContext::AutoRenderTarget art(context, ast.texture()->asRenderTarget()); | 
| -        apply_morphology_pass(context, src, srcRect, dstRect, radius.fWidth, | 
| +        GrContext::AutoRenderTarget art(context, texture->asRenderTarget()); | 
| +        apply_morphology_pass(context, srcTexture, srcRect, dstRect, radius.fWidth, | 
| morphType, Gr1DKernelEffect::kX_Direction); | 
| SkIRect clearRect = SkIRect::MakeXYWH(dstRect.fLeft, dstRect.fBottom, | 
| dstRect.width(), radius.fHeight); | 
| context->clear(&clearRect, GrMorphologyEffect::kErode_MorphologyType == morphType ? | 
| SK_ColorWHITE : | 
| SK_ColorTRANSPARENT, false); | 
| -        src.reset(ast.detach()); | 
| +        srcTexture.reset(texture); | 
| srcRect = dstRect; | 
| } | 
| if (radius.fHeight > 0) { | 
| -        GrAutoScratchTexture ast(context, desc); | 
| -        if (NULL == ast.texture()) { | 
| +        GrTexture* texture = context->refScratchTexture(desc, GrContext::kApprox_ScratchTexMatch); | 
| +        if (NULL == texture) { | 
| return false; | 
| } | 
| -        GrContext::AutoRenderTarget art(context, ast.texture()->asRenderTarget()); | 
| -        apply_morphology_pass(context, src, srcRect, dstRect, radius.fHeight, | 
| +        GrContext::AutoRenderTarget art(context, texture->asRenderTarget()); | 
| +        apply_morphology_pass(context, srcTexture, srcRect, dstRect, radius.fHeight, | 
| morphType, Gr1DKernelEffect::kY_Direction); | 
| -        src.reset(ast.detach()); | 
| +        srcTexture.reset(texture); | 
| } | 
| -    SkImageFilter::WrapTexture(src, rect.width(), rect.height(), dst); | 
| +    SkImageFilter::WrapTexture(srcTexture, rect.width(), rect.height(), dst); | 
| return true; | 
| } | 
|  | 
|  |