| Index: src/gpu/GrLayerCache.h | 
| diff --git a/src/gpu/GrLayerCache.h b/src/gpu/GrLayerCache.h | 
| index b9b59d06bcf209a5d1a5fa788e501837c3da75f1..0ea23b3fc7294425c690da96c2707cf572c4c068 100644 | 
| --- a/src/gpu/GrLayerCache.h | 
| +++ b/src/gpu/GrLayerCache.h | 
| @@ -12,6 +12,7 @@ | 
| #include "GrRect.h" | 
|  | 
| #include "SkChecksum.h" | 
| +#include "SkImageFilter.h" | 
| #include "SkMessageBus.h" | 
| #include "SkPicture.h" | 
| #include "SkTDynamicHash.h" | 
| @@ -151,16 +152,23 @@ public: | 
| , fStop(stop) | 
| , fBounds(bounds) | 
| , fPaint(paint ? SkNEW_ARGS(SkPaint, (*paint)) : NULL) | 
| +        , fFilter(NULL) | 
| , fTexture(NULL) | 
| , fRect(SkIRect::MakeEmpty()) | 
| , fPlot(NULL) | 
| , fUses(0) | 
| , fLocked(false) { | 
| SkASSERT(SK_InvalidGenID != pictureID); | 
| + | 
| +        if (fPaint) { | 
| +            fFilter = SkSafeRef(fPaint->getImageFilter()); | 
| +            fPaint->setImageFilter(NULL); | 
| +        } | 
| } | 
|  | 
| ~GrCachedLayer() { | 
| SkSafeUnref(fTexture); | 
| +        SkSafeUnref(fFilter); | 
| SkDELETE(fPaint); | 
| } | 
|  | 
| @@ -179,6 +187,7 @@ public: | 
| } | 
| GrTexture* texture() { return fTexture; } | 
| const SkPaint* paint() const { return fPaint; } | 
| +    const SkImageFilter* filter() const { return fFilter; } | 
| const SkIRect& rect() const { return fRect; } | 
|  | 
| void setPlot(GrPlot* plot) { | 
| @@ -207,7 +216,11 @@ private: | 
|  | 
| // The paint used when dropping the layer down into the owning canvas. | 
| // Can be NULL. This class makes a copy for itself. | 
| -    const SkPaint*  fPaint; | 
| +    SkPaint*  fPaint; | 
| + | 
| +    // The imagefilter that needs to be applied to the layer prior to it being | 
| +    // composited with the rest of the scene. | 
| +    const SkImageFilter* fFilter; | 
|  | 
| // fTexture is a ref on the atlasing texture for atlased layers and a | 
| // ref on a GrTexture for non-atlased textures. | 
|  |