diff --git a/include/gpu/GrBackendEffectFactory.h b/include/gpu/GrBackendEffectFactory.h
index fae45fc..89562d5 100644
--- a/include/gpu/GrBackendEffectFactory.h
+++ b/include/gpu/GrBackendEffectFactory.h
@@ -23,13 +23,19 @@
 
 class GrBackendEffectFactory : public GrNoncopyable {
 public:
-    typedef uint32_t StageKey;
+    typedef uint32_t EffectKey;
     enum {
-        kProgramStageKeyBits = 10,
-        kTexturingStageKeyBits = 6
+        kEffectKeyBits = 10,
+        /**
+         * Some aspects of the generated code may be determined by the particular textures that are
+         * associated with the effect. These manipulations are performed by GrGLShaderBuilder beyond
+         * GrGLEffects' control. So there is a dedicated part of the key which is combined
+         * automatically with the bits produced by GrGLEffect::GenKey().
+         */
+        kTextureKeyBits = 6
     };
 
-    virtual StageKey glStageKey(const GrEffect&, const GrGLCaps&) const = 0;
+    virtual EffectKey glEffectKey(const GrEffect&, const GrGLCaps&) const = 0;
     virtual GrGLEffect* createGLInstance(const GrEffect&) const = 0;
 
     bool operator ==(const GrBackendEffectFactory& b) const {
@@ -50,16 +56,16 @@
         fEffectClassID = kIllegalEffectClassID;
     }
 
-    static StageKey GenID() {
+    static EffectKey GenID() {
         // fCurrEffectClassID has been initialized to kIllegalEffectClassID. The
         // atomic inc returns the old value not the incremented value. So we add
         // 1 to the returned value.
         int32_t id = sk_atomic_inc(&fCurrEffectClassID) + 1;
-        GrAssert(id < (1 << (8 * sizeof(StageKey) - kProgramStageKeyBits)));
+        GrAssert(id < (1 << (8 * sizeof(EffectKey) - kEffectKeyBits)));
         return id;
     }
 
-    StageKey fEffectClassID;
+    EffectKey fEffectClassID;
 
 private:
     static int32_t fCurrEffectClassID;
@@ -81,19 +87,18 @@
         id identifies the GrEffect subclass. The remainder is based
         on the aspects of the GrEffect object's configuration that affect
         GLSL code generation. */
-    virtual StageKey glStageKey(const GrEffect& effect, const GrGLCaps& caps) const SK_OVERRIDE {
+    virtual EffectKey glEffectKey(const GrEffect& effect, const GrGLCaps& caps) const SK_OVERRIDE {
         GrAssert(kIllegalEffectClassID != fEffectClassID);
-        StageKey stageID = GLEffect::GenKey(effect, caps);
-        StageKey textureKey = GLEffect::GenTextureKey(effect, caps);
+        EffectKey effectKey = GLEffect::GenKey(effect, caps);
+        EffectKey textureKey = GLEffect::GenTextureKey(effect, caps);
 #if GR_DEBUG
-        static const StageKey kIllegalIDMask = (uint16_t) (~((1U << kProgramStageKeyBits) - 1));
-        GrAssert(!(kIllegalIDMask & stageID));
+        static const EffectKey kIllegalIDMask = (uint16_t) (~((1U << kEffectKeyBits) - 1));
+        GrAssert(!(kIllegalIDMask & effectKey));
 
-        static const StageKey kIllegalTextureKeyMask =
-            (uint16_t) (~((1U << kTexturingStageKeyBits) - 1));
+        static const EffectKey kIllegalTextureKeyMask = (uint16_t) (~((1U << kTextureKeyBits) - 1));
         GrAssert(!(kIllegalTextureKeyMask & textureKey));
 #endif
-        return fEffectClassID | (textureKey << kProgramStageKeyBits) | stageID;
+        return fEffectClassID | (textureKey << kEffectKeyBits) | effectKey;
     }
 
     /** Returns a new instance of the appropriate *GL* implementation class
@@ -117,7 +122,7 @@
 
 protected:
     GrTBackendEffectFactory() {
-        fEffectClassID = GenID() << (kProgramStageKeyBits + kTexturingStageKeyBits) ;
+        fEffectClassID = GenID() << (kEffectKeyBits + kTextureKeyBits) ;
     }
 };
 
diff --git a/include/gpu/GrEffect.h b/include/gpu/GrEffect.h
index e3c662b..d7209ff 100644
--- a/include/gpu/GrEffect.h
+++ b/include/gpu/GrEffect.h
@@ -33,7 +33,7 @@
 public:
     SK_DECLARE_INST_COUNT(GrEffect)
 
-    typedef GrBackendEffectFactory::StageKey StageKey;
+    typedef GrBackendEffectFactory::EffectKey EffectKey;
 
     explicit GrEffect(int numTextures);
     virtual ~GrEffect();
@@ -66,8 +66,8 @@
         Equality is not the same thing as equivalence.
         To test for equivalence (that they will generate the same
         shader code, but may have different uniforms), check equality
-        of the stageKey produced by the GrBackendEffectFactory:
-        a.getFactory().glStageKey(a) == b.getFactory().glStageKey(b).
+        of the EffectKey produced by the GrBackendEffectFactory:
+        a.getFactory().glEffectKey(a) == b.getFactory().glEffectKey(b).
 
         The default implementation of this function returns true iff
         the two stages have the same return value for numTextures() and
diff --git a/src/effects/SkBlendImageFilter.cpp b/src/effects/SkBlendImageFilter.cpp
index 10104cc..c87c5d3 100644
--- a/src/effects/SkBlendImageFilter.cpp
+++ b/src/effects/SkBlendImageFilter.cpp
@@ -124,7 +124,7 @@
     virtual void emitVS(GrGLShaderBuilder* builder,
                         const char* vertexCoords) SK_OVERRIDE {}
 
-    static inline StageKey GenKey(const GrEffect& s, const GrGLCaps&);
+    static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps&);
 
 private:
     typedef GrGLLegacyEffect INHERITED;
@@ -275,7 +275,7 @@
     }
 }
 
-GrGLEffect::StageKey GrGLBlendEffect::GenKey(const GrEffect& s, const GrGLCaps&) {
+GrGLEffect::EffectKey GrGLBlendEffect::GenKey(const GrEffect& s, const GrGLCaps&) {
     return static_cast<const GrBlendEffect&>(s).mode();
 }
 #endif
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 5e2b960..ca23452 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -342,7 +342,7 @@
     class GLEffect : public GrGLLegacyEffect {
     public:
         // this class always generates the same code.
-        static StageKey GenKey(const GrEffect& s, const GrGLCaps&) { return 0; }
+        static EffectKey GenKey(const GrEffect& s, const GrGLCaps&) { return 0; }
 
         GLEffect(const GrBackendEffectFactory& factory,
                  const GrEffect& effect)
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 8464f6e..a83fe58 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -955,7 +955,7 @@
 
     virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0;
 
-    static inline StageKey GenKey(const GrEffect& s, const GrGLCaps& caps);
+    static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps);
 
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
@@ -1168,7 +1168,7 @@
     GrGLSLMulVarBy4f(code, 2, outputColor, inputColor);
 }
 
-GrGLEffect::StageKey GrGLLightingEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrEffect& s,
                                                       const GrGLCaps& caps) {
     return static_cast<const GrLightingEffect&>(s).light()->type();
 }
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 67ae13c..3b306c1 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -88,7 +88,7 @@
     virtual void setData(const GrGLUniformManager& uman,
                          const GrEffect& data) SK_OVERRIDE;
 
-    static inline StageKey GenKey(const GrEffect&, const GrGLCaps&);
+    static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&);
 
 private:
 
@@ -174,7 +174,7 @@
     uman.set2f(fInsetVar, zoom.x_inset(), zoom.y_inset());
 }
 
-GrGLEffect::StageKey GrGLMagnifierEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GrGLMagnifierEffect::GenKey(const GrEffect& s,
                                                        const GrGLCaps& caps) {
     return 0;
 }
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index c650539..a1ece00 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -291,7 +291,7 @@
                         const char* inputColor,
                         const TextureSamplerArray&) SK_OVERRIDE;
 
-    static inline StageKey GenKey(const GrEffect& s, const GrGLCaps& caps);
+    static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps);
 
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
@@ -415,10 +415,10 @@
 
 };
 
-GrGLEffect::StageKey GrGLMatrixConvolutionEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GrGLMatrixConvolutionEffect::GenKey(const GrEffect& s,
                                                         const GrGLCaps& caps) {
     const GrMatrixConvolutionEffect& m = static_cast<const GrMatrixConvolutionEffect&>(s);
-    StageKey key = encodeXY(m.kernelSize().width(), m.kernelSize().height());
+    EffectKey key = encodeXY(m.kernelSize().width(), m.kernelSize().height());
     key |= m.tileMode() << 7;
     key |= m.convolveAlpha() ? 1 << 9 : 0;
     return key;
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index d623c6f..1d243b9 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -279,7 +279,7 @@
                         const char* inputColor,
                         const TextureSamplerArray&) SK_OVERRIDE;
 
-    static inline StageKey GenKey(const GrEffect& s, const GrGLCaps& caps);
+    static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps);
 
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
@@ -341,10 +341,10 @@
     GrGLSLMulVarBy4f(code, 2, outputColor, inputColor);
 }
 
-GrGLEffect::StageKey GrGLMorphologyEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GrGLMorphologyEffect::GenKey(const GrEffect& s,
                                                         const GrGLCaps& caps) {
     const GrMorphologyEffect& m = static_cast<const GrMorphologyEffect&>(s);
-    StageKey key = static_cast<StageKey>(m.radius());
+    EffectKey key = static_cast<EffectKey>(m.radius());
     key |= (m.type() << 8);
     return key;
 }
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index fe90f02..16678c4 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -259,7 +259,7 @@
 
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE {}
 
-    static StageKey GenKey(const GrEffect&, const GrGLCaps&);
+    static EffectKey GenKey(const GrEffect&, const GrGLCaps&);
 
 private:
 
@@ -312,7 +312,7 @@
     code->appendf("\t\t%s.rgb *= %s.a;\n", outputColor, outputColor);
 }
 
-GrGLEffect::StageKey GLColorTableEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GLColorTableEffect::GenKey(const GrEffect& s,
                                                         const GrGLCaps& caps) {
     return 0;
 }
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 1154d13..740f66f 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -491,7 +491,7 @@
                         const char* outputColor,
                         const char* inputColor,
                         const TextureSamplerArray&) SK_OVERRIDE;
-    static StageKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
+    static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
 
 private:
 
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index dac1dc0..ee1ce66 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -487,7 +487,7 @@
                         const char* inputColor,
                         const TextureSamplerArray&) SK_OVERRIDE;
 
-    static StageKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
+    static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
 
 private:
 
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index 768f59d..726ccbf 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -396,7 +396,7 @@
                         const char* inputColor,
                         const TextureSamplerArray&) SK_OVERRIDE;
 
-    static StageKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
+    static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps) { return 0; }
 
 private:
 
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp
index 4150d2c..6e09772 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp
@@ -335,7 +335,7 @@
                         const TextureSamplerArray&) SK_OVERRIDE;
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
-    static StageKey GenKey(const GrEffect& s, const GrGLCaps& caps);
+    static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps);
 
 protected:
 
@@ -663,7 +663,7 @@
     }
 }
 
-GrEffect::StageKey GrGLConical2Gradient::GenKey(const GrEffect& s, const GrGLCaps& caps) {
+GrEffect::EffectKey GrGLConical2Gradient::GenKey(const GrEffect& s, const GrGLCaps& caps) {
     return (static_cast<const GrConical2Gradient&>(s).isDegenerate());
 }
 
diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp
index e367276..a9f81f6 100644
--- a/src/effects/gradients/SkTwoPointRadialGradient.cpp
+++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp
@@ -370,7 +370,7 @@
                         const TextureSamplerArray&) SK_OVERRIDE;
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
-    static StageKey GenKey(const GrEffect& s, const GrGLCaps& caps);
+    static EffectKey GenKey(const GrEffect& s, const GrGLCaps& caps);
 
 protected:
 
@@ -636,7 +636,7 @@
     }
 }
 
-GrEffect::StageKey GrGLRadial2Gradient::GenKey(const GrEffect& s, const GrGLCaps& caps) {
+GrEffect::EffectKey GrGLRadial2Gradient::GenKey(const GrEffect& s, const GrGLCaps& caps) {
     return (static_cast<const GrRadial2Gradient&>(s).isDegenerate());
 }
 
diff --git a/src/gpu/effects/GrConfigConversionEffect.cpp b/src/gpu/effects/GrConfigConversionEffect.cpp
index 652c6bc..b6a69f2 100644
--- a/src/gpu/effects/GrConfigConversionEffect.cpp
+++ b/src/gpu/effects/GrConfigConversionEffect.cpp
@@ -58,7 +58,7 @@
         GrGLSLMulVarBy4f(&builder->fFSCode, 2, outputColor, inputColor);
     }
 
-    static inline StageKey GenKey(const GrEffect& s, const GrGLCaps&) {
+    static inline EffectKey GenKey(const GrEffect& s, const GrGLCaps&) {
         const GrConfigConversionEffect& effect = static_cast<const GrConfigConversionEffect&>(s);
         return static_cast<int>(effect.swapsRedAndBlue()) | (effect.pmConversion() << 1);
     }
diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp
index 4c42987..6930bec 100644
--- a/src/gpu/effects/GrConvolutionEffect.cpp
+++ b/src/gpu/effects/GrConvolutionEffect.cpp
@@ -29,7 +29,7 @@
 
     virtual void setData(const GrGLUniformManager& uman, const GrEffect&) SK_OVERRIDE;
 
-    static inline StageKey GenKey(const GrEffect&, const GrGLCaps&);
+    static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&);
 
 private:
     int width() const { return Gr1DKernelEffect::WidthFromRadius(fRadius); }
@@ -108,7 +108,7 @@
     uman.set1fv(fKernelUni, 0, this->width(), conv.kernel());
 }
 
-GrGLEffect::StageKey GrGLConvolutionEffect::GenKey(const GrEffect& s,
+GrGLEffect::EffectKey GrGLConvolutionEffect::GenKey(const GrEffect& s,
                                                          const GrGLCaps& caps) {
     return static_cast<const GrConvolutionEffect&>(s).radius();
 }
diff --git a/src/gpu/effects/GrSingleTextureEffect.cpp b/src/gpu/effects/GrSingleTextureEffect.cpp
index 0ba748c..844bff7 100644
--- a/src/gpu/effects/GrSingleTextureEffect.cpp
+++ b/src/gpu/effects/GrSingleTextureEffect.cpp
@@ -29,7 +29,7 @@
         builder->fFSCode.append(";\n");
     }
 
-    static inline StageKey GenKey(const GrEffect&, const GrGLCaps&) { return 0; }
+    static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&) { return 0; }
 
 private:
 
diff --git a/src/gpu/effects/GrTextureDomainEffect.cpp b/src/gpu/effects/GrTextureDomainEffect.cpp
index bfbab29..1c2ad33 100644
--- a/src/gpu/effects/GrTextureDomainEffect.cpp
+++ b/src/gpu/effects/GrTextureDomainEffect.cpp
@@ -23,7 +23,7 @@
 
     virtual void setData(const GrGLUniformManager&, const GrEffect&) SK_OVERRIDE;
 
-    static inline StageKey GenKey(const GrEffect&, const GrGLCaps&) { return 0; }
+    static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&) { return 0; }
 
 private:
     GrGLUniformManager::UniformHandle fNameUni;
diff --git a/src/gpu/gl/GrGLEffect.cpp b/src/gpu/gl/GrGLEffect.cpp
index 3f8417c..b53a1cf 100644
--- a/src/gpu/gl/GrGLEffect.cpp
+++ b/src/gpu/gl/GrGLEffect.cpp
@@ -20,12 +20,12 @@
 void GrGLEffect::setData(const GrGLUniformManager&, const GrEffect&) {
 }
 
-GrGLEffect::StageKey GrGLEffect::GenTextureKey(const GrEffect& effect,
+GrGLEffect::EffectKey GrGLEffect::GenTextureKey(const GrEffect& effect,
                                                            const GrGLCaps& caps) {
-    StageKey key = 0;
+    EffectKey key = 0;
     for (int index = 0; index < effect.numTextures(); ++index) {
         const GrTextureAccess& access = effect.textureAccess(index);
-        StageKey value = GrGLShaderBuilder::KeyForTextureAccess(access, caps) << index;
+        EffectKey value = GrGLShaderBuilder::KeyForTextureAccess(access, caps) << index;
         GrAssert(0 == (value & key)); // keys for each access ought not to overlap
         key |= value;
     }
diff --git a/src/gpu/gl/GrGLEffect.h b/src/gpu/gl/GrGLEffect.h
index 404f275..132c3d7 100644
--- a/src/gpu/gl/GrGLEffect.h
+++ b/src/gpu/gl/GrGLEffect.h
@@ -23,7 +23,7 @@
     include/gpu/GrEffect.h. Objects of type GrGLEffect are responsible for emitting the
     GLSL code that implements a GrEffect and for uploading uniforms at draw time. They also
     must have a function:
-        static inline StageKey GenKey(const GrEffect&, const GrGLCaps&)
+        static inline EffectKey GenKey(const GrEffect&, const GrGLCaps&)
     that is used to implement a program cache. When two GrEffects produce the same key this means
     that their GrGLEffects would emit the same GLSL code.
 
@@ -33,10 +33,10 @@
 class GrGLEffect {
 
 public:
-    typedef GrEffect::StageKey StageKey;
+    typedef GrEffect::EffectKey EffectKey;
     enum {
-        // the number of bits in StageKey available to GenKey
-        kProgramStageKeyBits = GrBackendEffectFactory::kProgramStageKeyBits,
+        // the number of bits in EffectKey available to GenKey
+        kEffectKeyBits = GrBackendEffectFactory::kEffectKeyBits,
     };
 
     typedef GrGLShaderBuilder::TextureSamplerArray TextureSamplerArray;
@@ -51,7 +51,7 @@
 
         @param builder      Interface used to emit code in the shaders.
         @param effect       The effect that generated this program stage.
-        @param key          The key that was computed by StageKey() from the generating GrEffect.
+        @param key          The key that was computed by EffectKey() from the generating GrEffect.
         @param vertexCoords A vec2 of texture coordinates in the VS, which may be altered. This will
                             be removed soon and stages will be responsible for computing their own
                             coords.
@@ -68,7 +68,7 @@
         */
     virtual void emitCode(GrGLShaderBuilder* builder,
                           const GrEffect& effect,
-                          StageKey key,
+                          EffectKey key,
                           const char* vertexCoords,
                           const char* outputColor,
                           const char* inputColor,
@@ -81,7 +81,7 @@
 
     const char* name() const { return fFactory.name(); }
 
-    static StageKey GenTextureKey(const GrEffect&, const GrGLCaps&);
+    static EffectKey GenTextureKey(const GrEffect&, const GrGLCaps&);
 
 protected:
 
@@ -107,7 +107,7 @@
 
     virtual void emitCode(GrGLShaderBuilder* builder,
                           const GrEffect&,
-                          StageKey,
+                          EffectKey,
                           const char* vertexCoords,
                           const char* outputColor,
                           const char* inputColor,
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index cbcd2d5..fd01e0d 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -80,7 +80,7 @@
     fRTHeight = -1;
 
     for (int s = 0; s < GrDrawState::kNumStages; ++s) {
-        fProgramStage[s] = NULL;
+        fEffects[s] = NULL;
         fTextureMatrices[s] = GrMatrix::InvalidMatrix();
         // this is arbitrary, just initialize to something
         fTextureOrientation[s] = GrGLTexture::kBottomUp_Orientation;
@@ -104,7 +104,7 @@
     }
 
     for (int i = 0; i < GrDrawState::kNumStages; ++i) {
-        delete fProgramStage[i];
+        delete fEffects[i];
     }
 }
 
@@ -624,13 +624,13 @@
                 }
 
                 builder.setCurrentStage(s);
-                fProgramStage[s] = GenStageCode(effects[s],
-                                                fDesc.fStages[s],
-                                                &fUniforms.fStages[s],
-                                                inColor.size() ? inColor.c_str() : NULL,
-                                                outColor.c_str(),
-                                                inCoords,
-                                                &builder);
+                fEffects[s] = GenStageCode(effects[s],
+                                           fDesc.fStages[s],
+                                           &fUniforms.fStages[s],
+                                           inColor.size() ? inColor.c_str() : NULL,
+                                           outColor.c_str(),
+                                           inCoords,
+                                           &builder);
                 builder.setNonStage();
                 inColor = outColor;
             }
@@ -729,13 +729,13 @@
                         inCoverage.append("4");
                     }
                     builder.setCurrentStage(s);
-                    fProgramStage[s] = GenStageCode(effects[s],
-                                                    fDesc.fStages[s],
-                                                    &fUniforms.fStages[s],
-                                                    inCoverage.size() ? inCoverage.c_str() : NULL,
-                                                    outCoverage.c_str(),
-                                                    inCoords,
-                                                    &builder);
+                    fEffects[s] = GenStageCode(effects[s],
+                                               fDesc.fStages[s],
+                                               &fUniforms.fStages[s],
+                                               inCoverage.size() ? inCoverage.c_str() : NULL,
+                                               outCoverage.c_str(),
+                                               inCoords,
+                                               &builder);
                     builder.setNonStage();
                     inCoverage = outCoverage;
                 }
@@ -957,7 +957,7 @@
     builder->fFSCode.appendf("\t{ // %s \n", glStage->name());
     glStage->emitCode(builder,
                       *effect,
-                      desc.fCustomStageKey,
+                      desc.fEffectKey,
                       varyingVSName,
                       fsOutColor,
                       fsInColor,
@@ -975,10 +975,10 @@
         fRTHeight = rtHeight;
     }
     for (int s = 0; s < GrDrawState::kNumStages; ++s) {
-        if (NULL != fProgramStage[s]) {
+        if (NULL != fEffects[s]) {
             const GrSamplerState& sampler = drawState.getSampler(s);
             GrAssert(NULL != sampler.getEffect());
-            fProgramStage[s]->setData(fUniformManager, *sampler.getEffect());
+            fEffects[s]->setData(fUniformManager, *sampler.getEffect());
         }
     }
 }
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h
index 57c6d22..8adcd62 100644
--- a/src/gpu/gl/GrGLProgram.h
+++ b/src/gpu/gl/GrGLProgram.h
@@ -96,9 +96,8 @@
 
             uint8_t fOptFlags;
 
-            /** Non-zero if user-supplied code will write the stage's
-                contribution to the fragment shader. */
-            GrBackendEffectFactory::StageKey fCustomStageKey;
+            /** Non-zero if this stage has an effect */
+            GrBackendEffectFactory::EffectKey fEffectKey;
 
             inline bool isEnabled() const {
                 return SkToBool(fOptFlags & kIsEnabled_OptFlagBit);
@@ -254,7 +253,7 @@
     GrMatrix                    fTextureMatrices[GrDrawState::kNumStages];
     GrGLTexture::Orientation    fTextureOrientation[GrDrawState::kNumStages];
 
-    GrGLEffect*           fProgramStage[GrDrawState::kNumStages];
+    GrGLEffect*                 fEffects[GrDrawState::kNumStages];
 
     Desc fDesc;
     const GrGLContextInfo&      fContextInfo;
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index a915cfa..e736231 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -153,9 +153,9 @@
     GrGLSLModulate4f(out, modulation, lookup.c_str());
 }
 
-GrEffect::StageKey GrGLShaderBuilder::KeyForTextureAccess(const GrTextureAccess& access,
-                                                               const GrGLCaps& caps) {
-    GrEffect::StageKey key = 0;
+GrEffect::EffectKey GrGLShaderBuilder::KeyForTextureAccess(const GrTextureAccess& access,
+                                                           const GrGLCaps& caps) {
+    GrEffect::EffectKey key = 0;
 
     // Assume that swizzle support implies that we never have to modify a shader to adjust
     // for texture format/swizzle settings.
diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h
index d60f33f..fa68268 100644
--- a/src/gpu/gl/GrGLShaderBuilder.h
+++ b/src/gpu/gl/GrGLShaderBuilder.h
@@ -119,11 +119,11 @@
                       const char* body,
                       SkString* outName);
 
-    /** Generates a StageKey for the shader code based on the texture access parameters and the
+    /** Generates a EffectKey for the shader code based on the texture access parameters and the
         capabilities of the GL context.  This is useful for keying the shader programs that may
         have multiple representations, based on the type/format of textures used. */
-    static GrEffect::StageKey KeyForTextureAccess(const GrTextureAccess& access,
-                                                       const GrGLCaps& caps);
+    static GrEffect::EffectKey KeyForTextureAccess(const GrTextureAccess& access,
+                                                   const GrGLCaps& caps);
 
     /** If texture swizzling is available using tex parameters then it is preferred over mangling
         the generated shader code. This potentially allows greater reuse of cached shaders. */
diff --git a/src/gpu/gl/GrGpuGL_program.cpp b/src/gpu/gl/GrGpuGL_program.cpp
index dfb1123..d0b7b57 100644
--- a/src/gpu/gl/GrGpuGL_program.cpp
+++ b/src/gpu/gl/GrGpuGL_program.cpp
@@ -573,10 +573,10 @@
     const GrEffect* effect = sampler.getEffect();
     if (effect) {
         const GrBackendEffectFactory& factory = effect->getFactory();
-        stage->fCustomStageKey = factory.glStageKey(*effect, caps);
+        stage->fEffectKey = factory.glEffectKey(*effect, caps);
         effects[index] = effect;
     } else {
-        stage->fCustomStageKey = 0;
+        stage->fEffectKey = 0;
         effects[index] = NULL;
     }
 }
@@ -695,8 +695,8 @@
             setup_effect(&stage, sampler, this->glCaps(), effects, fCurrentProgram.get(), s);
 
         } else {
-            stage.fOptFlags         = 0;
-            stage.fCustomStageKey   = 0;
+            stage.fOptFlags  = 0;
+            stage.fEffectKey = 0;
             effects[s] = NULL;
         }
     }
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index b95a0bf..e6b2f56 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -136,7 +136,7 @@
                 pdesc.fVertexLayout |= kTextFormat_VertexLayoutBit;
             }
 
-            stage.fCustomStageKey = 0;
+            stage.fEffectKey = 0;
 
             stage.fOptFlags |= STAGE_OPTS[random_int(&random, GR_ARRAY_COUNT(STAGE_OPTS))];
 
@@ -147,8 +147,8 @@
                                                       getContext(),
                                                       dummyTextures));
                 if (NULL != effects[s]) {
-                    stage.fCustomStageKey =
-                        effects[s]->getFactory().glStageKey(*effects[s], this->glCaps());
+                    stage.fEffectKey =
+                        effects[s]->getFactory().glEffectKey(*effects[s], this->glCaps());
                 }
             }
         }
