| Index: src/core/SkCanvas.cpp | 
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp | 
| index c59cd04016583f74a2e9eb171f536b5220dfcad2..ff688f50805a0574f917a26ec8bf0e9cc93e34e7 100644 | 
| --- a/src/core/SkCanvas.cpp | 
| +++ b/src/core/SkCanvas.cpp | 
| @@ -999,7 +999,9 @@ void SkCanvas::internalDrawDevice(SkDevice* srcDev, int x, int y, | 
| SkDeviceImageFilterProxy proxy(dstDev); | 
| SkBitmap dst; | 
| const SkBitmap& src = srcDev->accessBitmap(false); | 
| -            if (filter->filterImage(&proxy, src, *iter.fMatrix, &dst, &pos)) { | 
| +            SkMatrix matrix = *iter.fMatrix; | 
| +            matrix.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y)); | 
| +            if (filter->filterImage(&proxy, src, matrix, &dst, &pos)) { | 
| SkPaint tmpUnfiltered(*paint); | 
| tmpUnfiltered.setImageFilter(NULL); | 
| dstDev->drawSprite(iter, dst, pos.x(), pos.y(), tmpUnfiltered); | 
| @@ -1034,8 +1036,9 @@ void SkCanvas::drawSprite(const SkBitmap& bitmap, int x, int y, | 
| if (filter && !iter.fDevice->canHandleImageFilter(filter)) { | 
| SkDeviceImageFilterProxy proxy(iter.fDevice); | 
| SkBitmap dst; | 
| -            if (filter->filterImage(&proxy, bitmap, *iter.fMatrix, | 
| -                                    &dst, &pos)) { | 
| +            SkMatrix matrix = *iter.fMatrix; | 
| +            matrix.postTranslate(SkIntToScalar(-x), SkIntToScalar(-y)); | 
| +            if (filter->filterImage(&proxy, bitmap, matrix, &dst, &pos)) { | 
| SkPaint tmpUnfiltered(*paint); | 
| tmpUnfiltered.setImageFilter(NULL); | 
| iter.fDevice->drawSprite(iter, dst, pos.x(), pos.y(), | 
|  |