diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 19ad3f7..26dcbaa 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -44,8 +44,8 @@
 }
 #endif
 
-void SkColorFilter::appendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
-    this->onAppendStages(rec, shaderIsOpaque);
+bool SkColorFilter::appendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
+    return this->onAppendStages(rec, shaderIsOpaque);
 }
 
 SkColor SkColorFilter::filterColor(SkColor c) const {
@@ -93,13 +93,13 @@
         return fOuter->getFlags() & fInner->getFlags();
     }
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         bool innerIsOpaque = shaderIsOpaque;
         if (!(fInner->getFlags() & kAlphaUnchanged_Flag)) {
             innerIsOpaque = false;
         }
-        fInner->appendStages(rec, shaderIsOpaque);
-        fOuter->appendStages(rec, innerIsOpaque);
+        return fInner->appendStages(rec, shaderIsOpaque) &&
+               fOuter->appendStages(rec, innerIsOpaque);
     }
 
 #if SK_SUPPORT_GPU
@@ -210,7 +210,7 @@
     }
 #endif
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         if (!shaderIsOpaque) {
             rec.fPipeline->append(SkRasterPipeline::unpremul);
         }
@@ -222,6 +222,7 @@
         if (!shaderIsOpaque) {
             rec.fPipeline->append(SkRasterPipeline::premul);
         }
+        return true;
     }
 
 protected:
@@ -278,7 +279,7 @@
         return f0 & f1;
     }
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         // want cf0 * (1 - w) + cf1 * w == lerp(w)
         // which means
         //      dr,dg,db,da <-- cf0
@@ -304,6 +305,7 @@
         }
         float* storage = rec.fAlloc->make<float>(fWeight);
         p->append(SkRasterPipeline::lerp_1_float, storage);
+        return true;
     }
 
 #if SK_SUPPORT_GPU
@@ -394,7 +396,7 @@
     }
 #endif
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         if (fCpuFunction) {
             struct CpuFuncCtx : public SkRasterPipeline_CallbackCtx {
                 SkRuntimeColorFilterFn cpuFn;
@@ -440,6 +442,7 @@
             };
             rec.fPipeline->append(SkRasterPipeline::callback, ctx);
         }
+        return true;
     }
 
 protected:
diff --git a/src/core/SkColorFilter_Mixer.cpp b/src/core/SkColorFilter_Mixer.cpp
index e2c66ad..b716e85 100644
--- a/src/core/SkColorFilter_Mixer.cpp
+++ b/src/core/SkColorFilter_Mixer.cpp
@@ -36,7 +36,7 @@
     buffer.writeFlattenable(fMixer.get());
 }
 
-void SkColorFilter_Mixer::onAppendStages(const SkStageRec& rec,
+bool SkColorFilter_Mixer::onAppendStages(const SkStageRec& rec,
                                          bool shaderIsOpaque) const {
     struct Storage {
         float   fOrig[4 * SkRasterPipeline_kMaxStride];
@@ -71,7 +71,7 @@
 
     // 1st color in dr,dg,db,da
     // 2nd color in  r, g, b, a
-    (void) as_MB(fMixer)->appendStages(rec);
+    return as_MB(fMixer)->appendStages(rec);
 }
 
 #if SK_SUPPORT_GPU
diff --git a/src/core/SkColorFilter_Mixer.h b/src/core/SkColorFilter_Mixer.h
index 510153e..a9a84a2 100644
--- a/src/core/SkColorFilter_Mixer.h
+++ b/src/core/SkColorFilter_Mixer.h
@@ -33,7 +33,7 @@
 protected:
     SkColorFilter_Mixer(SkReadBuffer&);
     void flatten(SkWriteBuffer&) const override;
-    void onAppendStages(const SkStageRec&, bool shaderIsOpaque) const override;
+    bool onAppendStages(const SkStageRec&, bool shaderIsOpaque) const override;
 
 private:
     SK_FLATTENABLE_HOOKS(SkColorFilter_Mixer)
diff --git a/src/core/SkColorMatrixFilterRowMajor255.cpp b/src/core/SkColorMatrixFilterRowMajor255.cpp
index e83c9a8..84b95fa 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.cpp
+++ b/src/core/SkColorMatrixFilterRowMajor255.cpp
@@ -66,7 +66,7 @@
     return true;
 }
 
-void SkColorMatrixFilterRowMajor255::onAppendStages(const SkStageRec& rec,
+bool SkColorMatrixFilterRowMajor255::onAppendStages(const SkStageRec& rec,
                                                     bool shaderIsOpaque) const {
     const bool willStayOpaque = shaderIsOpaque && (fFlags & kAlphaUnchanged_Flag);
 
@@ -76,6 +76,7 @@
     if (           true) { p->append(SkRasterPipeline::clamp_0); }
     if (           true) { p->append(SkRasterPipeline::clamp_1); }
     if (!willStayOpaque) { p->append(SkRasterPipeline::premul); }
+    return true;
 }
 
 #if SK_SUPPORT_GPU
diff --git a/src/core/SkColorMatrixFilterRowMajor255.h b/src/core/SkColorMatrixFilterRowMajor255.h
index 3fd4cfc..bdc975b 100644
--- a/src/core/SkColorMatrixFilterRowMajor255.h
+++ b/src/core/SkColorMatrixFilterRowMajor255.h
@@ -33,7 +33,7 @@
 private:
     SK_FLATTENABLE_HOOKS(SkColorMatrixFilterRowMajor255)
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
 
     SkScalar        fMatrix[20];
     float           fTranspose[20]; // for Sk4s
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index 32c840e..b0323df 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -61,13 +61,14 @@
     return SkColorFilter::MakeModeFilter(color, mode);
 }
 
-void SkModeColorFilter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
+bool SkModeColorFilter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
     rec.fPipeline->append(SkRasterPipeline::move_src_dst);
     SkColor4f color = SkColor4f::FromColor(fColor);
     SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType,
                            rec.fDstCS,          kUnpremul_SkAlphaType).apply(color.vec());
     rec.fPipeline->append_constant_color(rec.fAlloc, color.premul().vec());
     SkBlendMode_AppendStages(fMode, rec.fPipeline);
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index c621f3b..aac6324 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -30,7 +30,7 @@
 
     void flatten(SkWriteBuffer&) const override;
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
 
 private:
     SK_FLATTENABLE_HOOKS(SkModeColorFilter)
diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp
index 9534d1c..0fc7b00 100644
--- a/src/effects/SkHighContrastFilter.cpp
+++ b/src/effects/SkHighContrastFilter.cpp
@@ -40,7 +40,7 @@
             GrRecordingContext*, const GrColorSpaceInfo&) const override;
  #endif
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
 
 protected:
     void flatten(SkWriteBuffer&) const override;
@@ -55,7 +55,7 @@
     typedef SkColorFilter INHERITED;
 };
 
-void SkHighContrast_Filter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
+bool SkHighContrast_Filter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
     SkRasterPipeline* p = rec.fPipeline;
     SkArenaAlloc* alloc = rec.fAlloc;
 
@@ -125,6 +125,7 @@
     if (!shaderIsOpaque) {
         p->append(SkRasterPipeline::premul);
     }
+    return true;
 }
 
 void SkHighContrast_Filter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 8c58549..2452c25 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -18,10 +18,11 @@
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #endif
 
-void SkLumaColorFilter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
+bool SkLumaColorFilter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const {
     rec.fPipeline->append(SkRasterPipeline::luminance_to_alpha);
     rec.fPipeline->append(SkRasterPipeline::clamp_0);
     rec.fPipeline->append(SkRasterPipeline::clamp_1);
+    return true;
 }
 
 sk_sp<SkColorFilter> SkLumaColorFilter::Make() {
diff --git a/src/effects/SkOverdrawColorFilter.cpp b/src/effects/SkOverdrawColorFilter.cpp
index f80832e..044bdf3 100644
--- a/src/effects/SkOverdrawColorFilter.cpp
+++ b/src/effects/SkOverdrawColorFilter.cpp
@@ -41,7 +41,7 @@
 )";
 #endif
 
-void SkOverdrawColorFilter::onAppendStages(const SkStageRec& rec, bool shader_is_opaque) const {
+bool SkOverdrawColorFilter::onAppendStages(const SkStageRec& rec, bool shader_is_opaque) const {
     struct Ctx : public SkRasterPipeline_CallbackCtx {
         const SkPMColor* colors;
     };
@@ -60,6 +60,7 @@
         }
     };
     rec.fPipeline->append(SkRasterPipeline::callback, ctx);
+    return true;
 }
 
 void SkOverdrawColorFilter::flatten(SkWriteBuffer& buffer) const {
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 4cc58ec..5b73dd5 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -99,7 +99,7 @@
         kB_Flag = 1 << 3,
     };
 
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         const uint8_t *r = gIdentityTable,
                       *g = gIdentityTable,
                       *b = gIdentityTable,
@@ -122,6 +122,7 @@
         if (!definitelyOpaque) {
             p->append(SkRasterPipeline::premul);
         }
+        return true;
     }
 
 protected:
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index 41e8180..dd56b0e 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -47,8 +47,9 @@
 
 protected:
     void flatten(SkWriteBuffer&) const override {}
-    void onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
+    bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override {
         rec.fPipeline->append(SkRasterPipeline::gauss_a_to_rgba);
+        return true;
     }
 private:
     SK_FLATTENABLE_HOOKS(SkGaussianColorFilter)
