| Index: src/gpu/SkGpuDevice.cpp
|
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
|
| index 3fa13a7df9abd6b7b5b5ee220d3f4210ef362b39..7bba41f60aa42f7dc21e2e5ff71500a09076d2ef 100644
|
| --- a/src/gpu/SkGpuDevice.cpp
|
| +++ b/src/gpu/SkGpuDevice.cpp
|
| @@ -951,8 +951,17 @@ void SkGpuDevice::drawPath(const SkDraw& draw, const SkPath& origSrcPath,
|
| GrTexture* filtered;
|
|
|
| if (paint.getMaskFilter()->filterMaskGPU(mask.texture(), maskRect, &filtered, true)) {
|
| + // filterMaskGPU gives us ownership of a ref to the result
|
| SkAutoTUnref<GrTexture> atu(filtered);
|
|
|
| + // If the scratch texture that we used as the filter src also holds the filter
|
| + // result then we must detach so that this texture isn't recycled for a later
|
| + // draw.
|
| + if (filtered == mask.texture()) {
|
| + mask.detach();
|
| + filtered->unref(); // detach transfers GrAutoScratchTexture's ref to us.
|
| + }
|
| +
|
| if (draw_mask(fContext, maskRect, &grPaint, filtered)) {
|
| // This path is completely drawn
|
| return;
|
|
|