Check all scratch texture allocations for image filters.
authorsenorblanco <senorblanco@chromium.org>
Fri, 15 Aug 2014 17:48:43 +0000 (10:48 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 15 Aug 2014 17:48:43 +0000 (10:48 -0700)
BUG=403677
R=bsalomon@google.com
NOTREECHECKS=true

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/473283002

src/core/SkImageFilter.cpp
src/effects/SkDisplacementMapEffect.cpp
src/effects/SkMorphologyImageFilter.cpp
src/effects/SkXfermodeImageFilter.cpp

index cf1f07696b92270b5a6225791f4715bc147b619f..4a9a22e63445bde4b0c6705403fe0dc08ee31805 100644 (file)
@@ -256,6 +256,9 @@ bool SkImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Cont
     desc.fConfig = kRGBA_8888_GrPixelConfig;
 
     GrAutoScratchTexture dst(context, desc);
+    if (NULL == dst.texture()) {
+        return false;
+    }
     GrContext::AutoMatrix am;
     am.setIdentity(context);
     GrContext::AutoRenderTarget art(context, dst.texture()->asRenderTarget());
index 26aaa022ace0d11220a87d6987bccb8ba69bc2a3..bae7ac098c7bdf376754ff508af432e3a3de45b6 100644 (file)
@@ -389,6 +389,9 @@ bool SkDisplacementMapEffect::filterImageGPU(Proxy* proxy, const SkBitmap& src,
     desc.fConfig = kSkia8888_GrPixelConfig;
 
     GrAutoScratchTexture ast(context, desc);
+    if (NULL == ast.texture()) {
+        return false;
+    }
     SkAutoTUnref<GrTexture> dst(ast.detach());
 
     GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
index 49df654316d8637b15e14397e270151875492f2a..67769f29b93c2efe2468071133ec7ceb7212e0ca 100644 (file)
@@ -506,6 +506,9 @@ bool apply_morphology(const SkBitmap& input,
 
     if (radius.fWidth > 0) {
         GrAutoScratchTexture ast(context, desc);
+        if (NULL == ast.texture()) {
+            return false;
+        }
         GrContext::AutoRenderTarget art(context, ast.texture()->asRenderTarget());
         apply_morphology_pass(context, src, srcRect, dstRect, radius.fWidth,
                               morphType, Gr1DKernelEffect::kX_Direction);
@@ -519,6 +522,9 @@ bool apply_morphology(const SkBitmap& input,
     }
     if (radius.fHeight > 0) {
         GrAutoScratchTexture ast(context, desc);
+        if (NULL == ast.texture()) {
+            return false;
+        }
         GrContext::AutoRenderTarget art(context, ast.texture()->asRenderTarget());
         apply_morphology_pass(context, src, srcRect, dstRect, radius.fHeight,
                               morphType, Gr1DKernelEffect::kY_Direction);
index cf32cf5cb046428c7fa5b8ca4667b3476a185594..c876d5f6b3759b89505d114ec6fd292636b667d1 100644 (file)
@@ -132,6 +132,9 @@ bool SkXfermodeImageFilter::filterImageGPU(Proxy* proxy,
     desc.fConfig = kSkia8888_GrPixelConfig;
 
     GrAutoScratchTexture ast(context, desc);
+    if (NULL == ast.texture()) {
+        return false;
+    }
     SkAutoTUnref<GrTexture> dst(ast.detach());
 
     GrContext::AutoRenderTarget art(context, dst->asRenderTarget());