Remove use of GrEffectRef from draw state and below.

R=robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/372773002
diff --git a/include/gpu/GrDrawEffect.h b/include/gpu/GrDrawEffect.h
index 9a7a75d..6aff82e 100644
--- a/include/gpu/GrDrawEffect.h
+++ b/include/gpu/GrDrawEffect.h
@@ -24,10 +24,10 @@
         SkASSERT(NULL != fEffectStage);
         SkASSERT(NULL != fEffectStage->getEffect());
     }
-    const GrEffectRef* effect() const { return fEffectStage->getEffect(); }
+    const GrEffect* effect() const { return fEffectStage->getEffect(); }
 
     template <typename T>
-    const T& castEffect() const { return *static_cast<const T*>(this->effect()->get()); }
+    const T& castEffect() const { return *static_cast<const T*>(this->effect()); }
 
     const SkMatrix& getCoordChangeMatrix() const {
         if (fExplicitLocalCoords) {
diff --git a/include/gpu/GrEffectStage.h b/include/gpu/GrEffectStage.h
index 478ea5e..84ccbbf 100644
--- a/include/gpu/GrEffectStage.h
+++ b/include/gpu/GrEffectStage.h
@@ -45,7 +45,7 @@
         SkASSERT(NULL != fEffectRef.get());
         SkASSERT(NULL != other.fEffectRef.get());
 
-        if (!(*this->getEffect())->isEqual(*other.getEffect())) {
+        if (!this->getEffect()->isEqual(*other.getEffect())) {
             return false;
         }
 
@@ -126,7 +126,7 @@
         }
     }
 
-    const GrEffectRef* getEffect() const { return fEffectRef.get(); }
+    const GrEffect* getEffect() const { return fEffectRef.get()->get(); }
 
     const int* getVertexAttribIndices() const { return fVertexAttribIndices; }
     int getVertexAttribIndexCount() const { return fEffectRef->get()->numVertexAttribs(); }
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index b5f95da..d62602e 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -971,7 +971,7 @@
 
         static inline EffectKey GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&) {
             // The background may come from the dst or from a texture.
-            int numTextures = (*drawEffect.effect())->numTextures();
+            int numTextures = drawEffect.effect()->numTextures();
             SkASSERT(numTextures <= 1);
             return (drawEffect.castEffect<XferEffect>().mode() << 1) | numTextures;
         }
diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
index cd59497..8285a32 100644
--- a/src/gpu/GrDrawState.cpp
+++ b/src/gpu/GrDrawState.cpp
@@ -151,7 +151,7 @@
     for (int s = 0; s < totalStages; ++s) {
         int covIdx = s - fColorStages.count();
         const GrEffectStage& stage = covIdx < 0 ? fColorStages[s] : fCoverageStages[covIdx];
-        const GrEffectRef* effect = stage.getEffect();
+        const GrEffect* effect = stage.getEffect();
         SkASSERT(NULL != effect);
         // make sure that any attribute indices have the correct binding type, that the attrib
         // type and effect's shader lang type are compatible, and that attributes shared by
@@ -165,7 +165,7 @@
                 return false;
             }
 
-            GrSLType effectSLType = (*effect)->vertexAttribType(i);
+            GrSLType effectSLType = effect->vertexAttribType(i);
             GrVertexAttribType attribType = fVAPtr[attribIndex].fType;
             int slVecCount = GrSLTypeVectorCount(effectSLType);
             int attribVecCount = GrVertexAttribTypeVectorCount(attribType);
@@ -184,13 +184,13 @@
 bool GrDrawState::willEffectReadDstColor() const {
     if (!this->isColorWriteDisabled()) {
         for (int s = 0; s < fColorStages.count(); ++s) {
-            if ((*fColorStages[s].getEffect())->willReadDstColor()) {
+            if (fColorStages[s].getEffect()->willReadDstColor()) {
                 return true;
             }
         }
     }
     for (int s = 0; s < fCoverageStages.count(); ++s) {
-        if ((*fCoverageStages[s].getEffect())->willReadDstColor()) {
+        if (fCoverageStages[s].getEffect()->willReadDstColor()) {
             return true;
         }
     }
@@ -213,8 +213,8 @@
 
     // Run through the color stages
     for (int s = 0; s < fColorStages.count(); ++s) {
-        const GrEffectRef* effect = fColorStages[s].getEffect();
-        (*effect)->getConstantColorComponents(&color, &validComponentFlags);
+        const GrEffect* effect = fColorStages[s].getEffect();
+        effect->getConstantColorComponents(&color, &validComponentFlags);
     }
 
     // Check whether coverage is treated as color. If so we run through the coverage computation.
@@ -230,8 +230,8 @@
             }
         }
         for (int s = 0; s < fCoverageStages.count(); ++s) {
-            const GrEffectRef* effect = fCoverageStages[s].getEffect();
-            (*effect)->getConstantColorComponents(&color, &validComponentFlags);
+            const GrEffect* effect = fCoverageStages[s].getEffect();
+            effect->getConstantColorComponents(&color, &validComponentFlags);
         }
     }
     return (kA_GrColorComponentFlag & validComponentFlags) && 0xff == GrColorUnpackA(color);
@@ -255,8 +255,8 @@
 
     // Run through the coverage stages and see if the coverage will be all ones at the end.
     for (int s = 0; s < fCoverageStages.count(); ++s) {
-        const GrEffectRef* effect = fCoverageStages[s].getEffect();
-        (*effect)->getConstantColorComponents(&coverage, &validComponentFlags);
+        const GrEffect* effect = fCoverageStages[s].getEffect();
+        effect->getConstantColorComponents(&coverage, &validComponentFlags);
     }
     return (kRGBA_GrColorComponentFlags == validComponentFlags) && (0xffffffff == coverage);
 }
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 87057bd..353d36a 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -389,7 +389,7 @@
     SkASSERT(NULL != drawState.getRenderTarget());
 
     for (int s = 0; s < drawState.numColorStages(); ++s) {
-        const GrEffectRef& effect = *drawState.getColorStage(s).getEffect();
+        const GrEffect* effect = drawState.getColorStage(s).getEffect();
         int numTextures = effect->numTextures();
         for (int t = 0; t < numTextures; ++t) {
             GrTexture* texture = effect->texture(t);
@@ -397,7 +397,7 @@
         }
     }
     for (int s = 0; s < drawState.numCoverageStages(); ++s) {
-        const GrEffectRef& effect = *drawState.getCoverageStage(s).getEffect();
+        const GrEffect* effect = drawState.getCoverageStage(s).getEffect();
         int numTextures = effect->numTextures();
         for (int t = 0; t < numTextures; ++t) {
             GrTexture* texture = effect->texture(t);
diff --git a/src/gpu/GrPaint.cpp b/src/gpu/GrPaint.cpp
index 35912a9..ddce0ef 100644
--- a/src/gpu/GrPaint.cpp
+++ b/src/gpu/GrPaint.cpp
@@ -60,7 +60,7 @@
     uint32_t coverageComps = kRGBA_GrColorComponentFlags;
     int count = fCoverageStages.count();
     for (int i = 0; i < count; ++i) {
-        (*fCoverageStages[i].getEffect())->getConstantColorComponents(&coverage, &coverageComps);
+        fCoverageStages[i].getEffect()->getConstantColorComponents(&coverage, &coverageComps);
     }
     if (kRGBA_GrColorComponentFlags != coverageComps || 0xffffffff != coverage) {
         return false;
@@ -70,7 +70,7 @@
     uint32_t colorComps = kRGBA_GrColorComponentFlags;
     count = fColorStages.count();
     for (int i = 0; i < count; ++i) {
-        (*fColorStages[i].getEffect())->getConstantColorComponents(&color, &colorComps);
+        fColorStages[i].getEffect()->getConstantColorComponents(&color, &colorComps);
     }
 
     SkASSERT((NULL == solidColor) == (NULL == solidColorKnownComponents));
diff --git a/src/gpu/effects/GrDistanceFieldTextureEffect.cpp b/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
index 29f0985..9305ba9 100755
--- a/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
+++ b/src/gpu/effects/GrDistanceFieldTextureEffect.cpp
@@ -128,7 +128,7 @@
                          const GrDrawEffect& drawEffect) SK_OVERRIDE {
         SkASSERT(fTextureSizeUni.isValid());
 
-        GrTexture* texture = drawEffect.effect()->get()->texture(0);
+        GrTexture* texture = drawEffect.effect()->texture(0);
         if (texture->width() != fTextureSize.width() ||
             texture->height() != fTextureSize.height()) {
             fTextureSize = SkISize::Make(texture->width(), texture->height());
@@ -386,7 +386,7 @@
 
         const GrDistanceFieldLCDTextureEffect& dfTexEffect =
                                     drawEffect.castEffect<GrDistanceFieldLCDTextureEffect>();
-        GrTexture* texture = drawEffect.effect()->get()->texture(0);
+        GrTexture* texture = drawEffect.effect()->texture(0);
         if (texture->width() != fTextureSize.width() ||
             texture->height() != fTextureSize.height()) {
             fTextureSize = SkISize::Make(texture->width(), texture->height());
diff --git a/src/gpu/gl/GrGLProgramDesc.cpp b/src/gpu/gl/GrGLProgramDesc.cpp
index 4039eaf..ecd48e0 100644
--- a/src/gpu/gl/GrGLProgramDesc.cpp
+++ b/src/gpu/gl/GrGLProgramDesc.cpp
@@ -21,7 +21,7 @@
                                                       bool* setTrueIfReadsDst,
                                                       bool* setTrueIfReadsPos,
                                                       bool* setTrueIfHasVertexCode) {
-    const GrEffectRef& effect = *stage.getEffect();
+    const GrEffect* effect = stage.getEffect();
     const GrBackendEffectFactory& factory = effect->getFactory();
     GrDrawEffect drawEffect(stage, useExplicitLocalCoords);
     if (effect->willReadDstColor()) {
@@ -62,7 +62,7 @@
         firstEffectiveColorStage = drawState.numColorStages();
         while (firstEffectiveColorStage > 0 && inputColorIsUsed) {
             --firstEffectiveColorStage;
-            const GrEffect* effect = drawState.getColorStage(firstEffectiveColorStage).getEffect()->get();
+            const GrEffect* effect = drawState.getColorStage(firstEffectiveColorStage).getEffect();
             inputColorIsUsed = effect->willUseInputColor();
         }
     }
@@ -73,7 +73,7 @@
         firstEffectiveCoverageStage = drawState.numCoverageStages();
         while (firstEffectiveCoverageStage > 0 && inputCoverageIsUsed) {
             --firstEffectiveCoverageStage;
-            const GrEffect* effect = drawState.getCoverageStage(firstEffectiveCoverageStage).getEffect()->get();
+            const GrEffect* effect = drawState.getCoverageStage(firstEffectiveCoverageStage).getEffect();
             inputCoverageIsUsed = effect->willUseInputColor();
         }
     }
diff --git a/src/gpu/gl/GrGLProgramEffects.cpp b/src/gpu/gl/GrGLProgramEffects.cpp
index ee8bf60..fd91f58 100644
--- a/src/gpu/gl/GrGLProgramEffects.cpp
+++ b/src/gpu/gl/GrGLProgramEffects.cpp
@@ -89,7 +89,7 @@
  * Retrieves the final matrix that a transform needs to apply to its source coords.
  */
 SkMatrix get_transform_matrix(const GrDrawEffect& drawEffect, int transformIdx) {
-    const GrCoordTransform& coordTransform = (*drawEffect.effect())->coordTransform(transformIdx);
+    const GrCoordTransform& coordTransform = drawEffect.effect()->coordTransform(transformIdx);
     SkMatrix combined;
     if (kLocal_GrCoordSet == coordTransform.sourceCoords() &&
         !drawEffect.programHasExplicitLocalCoords()) {
@@ -129,10 +129,10 @@
 
 EffectKey GrGLProgramEffects::GenTransformKey(const GrDrawEffect& drawEffect) {
     EffectKey totalKey = 0;
-    int numTransforms = (*drawEffect.effect())->numTransforms();
+    int numTransforms = drawEffect.effect()->numTransforms();
     for (int t = 0; t < numTransforms; ++t) {
         EffectKey key = 0;
-        const GrCoordTransform& coordTransform = (*drawEffect.effect())->coordTransform(t);
+        const GrCoordTransform& coordTransform = drawEffect.effect()->coordTransform(t);
         SkMatrix::TypeMask type0 = coordTransform.getMatrix().getType();
         SkMatrix::TypeMask type1;
         if (kLocal_GrCoordSet == coordTransform.sourceCoords()) {
@@ -163,9 +163,9 @@
 
 EffectKey GrGLProgramEffects::GenTextureKey(const GrDrawEffect& drawEffect, const GrGLCaps& caps) {
     EffectKey key = 0;
-    int numTextures = (*drawEffect.effect())->numTextures();
+    int numTextures = drawEffect.effect()->numTextures();
     for (int t = 0; t < numTextures; ++t) {
-        const GrTextureAccess& access = (*drawEffect.effect())->textureAccess(t);
+        const GrTextureAccess& access = drawEffect.effect()->textureAccess(t);
         uint32_t configComponentMask = GrPixelConfigComponentMask(access.getTexture()->config());
         if (swizzle_requires_alpha_remapping(caps, configComponentMask, access.swizzleMask())) {
             key |= 1 << t;
@@ -182,7 +182,7 @@
 }
 
 void GrGLProgramEffects::emitSamplers(GrGLShaderBuilder* builder,
-                                      const GrEffectRef& effect,
+                                      const GrEffect* effect,
                                       TextureSamplerArray* outSamplers) {
     SkTArray<Sampler, true>& samplers = fSamplers.push_back();
     int numTextures = effect->numTextures();
@@ -212,7 +212,7 @@
     }
 }
 
-void GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrEffectRef& effect, int effectIdx) {
+void GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrEffect* effect, int effectIdx) {
     const SkTArray<Sampler, true>& samplers = fSamplers[effectIdx];
     int numSamplers = samplers.count();
     SkASSERT(numSamplers == effect->numTextures());
@@ -234,7 +234,7 @@
                                           const char* inColor,
                                           int stageIndex) {
     GrDrawEffect drawEffect(stage, fHasExplicitLocalCoords);
-    const GrEffectRef& effect = *stage.getEffect();
+    const GrEffect* effect = stage.getEffect();
     SkSTArray<2, TransformedCoords> coords(effect->numTransforms());
     SkSTArray<4, TextureSampler> samplers(effect->numTextures());
 
@@ -271,13 +271,13 @@
         SkString attributeName("aAttr");
         attributeName.appendS32(attributeIndices[a]);
         builder->addEffectAttribute(attributeIndices[a],
-                                    (*stage.getEffect())->vertexAttribType(a),
+                                    stage.getEffect()->vertexAttribType(a),
                                     attributeName);
     }
 }
 
 void GrGLVertexProgramEffects::emitTransforms(GrGLFullShaderBuilder* builder,
-                                              const GrEffectRef& effect,
+                                              const GrEffect* effect,
                                               EffectKey effectKey,
                                               TransformedCoordsArray* outCoords) {
     SkTArray<Transform, true>& transforms = fTransforms.push_back();
@@ -348,7 +348,7 @@
         GrDrawEffect drawEffect(*effectStages[e], fHasExplicitLocalCoords);
         fGLEffects[e]->setData(uniformManager, drawEffect);
         this->setTransformData(uniformManager, drawEffect, e);
-        this->bindTextures(gpu, *drawEffect.effect(), e);
+        this->bindTextures(gpu, drawEffect.effect(), e);
     }
 }
 
@@ -357,7 +357,7 @@
                                                 int effectIdx) {
     SkTArray<Transform, true>& transforms = fTransforms[effectIdx];
     int numTransforms = transforms.count();
-    SkASSERT(numTransforms == (*drawEffect.effect())->numTransforms());
+    SkASSERT(numTransforms == drawEffect.effect()->numTransforms());
     for (int t = 0; t < numTransforms; ++t) {
         SkASSERT(transforms[t].fHandle.isValid());
         const SkMatrix& matrix = get_transform_matrix(drawEffect, t);
@@ -393,7 +393,7 @@
                                           const char* inColor,
                                           int stageIndex) {
     GrDrawEffect drawEffect(stage, false);
-    const GrEffectRef& effect = *stage.getEffect();
+    const GrEffect* effect = stage.getEffect();
     SkSTArray<2, TransformedCoords> coords(effect->numTransforms());
     SkSTArray<4, TextureSampler> samplers(effect->numTextures());
 
@@ -416,7 +416,7 @@
 }
 
 void GrGLPathTexGenProgramEffects::setupPathTexGen(GrGLFragmentOnlyShaderBuilder* builder,
-                                           const GrEffectRef& effect,
+                                           const GrEffect* effect,
                                            EffectKey effectKey,
                                            TransformedCoordsArray* outCoords) {
     int numTransforms = effect->numTransforms();
@@ -443,7 +443,7 @@
         GrDrawEffect drawEffect(*effectStages[e], false);
         fGLEffects[e]->setData(uniformManager, drawEffect);
         this->setPathTexGenState(gpu, drawEffect, e);
-        this->bindTextures(gpu, *drawEffect.effect(), e);
+        this->bindTextures(gpu, drawEffect.effect(), e);
     }
 }
 
@@ -452,7 +452,7 @@
                                               int effectIdx) {
     EffectKey totalKey = fTransforms[effectIdx].fTransformKey;
     int texCoordIndex = fTransforms[effectIdx].fTexCoordIndex;
-    int numTransforms = (*drawEffect.effect())->numTransforms();
+    int numTransforms = drawEffect.effect()->numTransforms();
     for (int t = 0; t < numTransforms; ++t) {
         switch (get_matrix_type(totalKey, t)) {
             case kNoPersp_MatrixType: {
diff --git a/src/gpu/gl/GrGLProgramEffects.h b/src/gpu/gl/GrGLProgramEffects.h
index 769c7a1..137befd 100644
--- a/src/gpu/gl/GrGLProgramEffects.h
+++ b/src/gpu/gl/GrGLProgramEffects.h
@@ -13,6 +13,7 @@
 #include "GrTextureAccess.h"
 #include "GrGLUniformManager.h"
 
+class GrEffect;
 class GrEffectStage;
 class GrGLVertexProgramEffectsBuilder;
 class GrGLShaderBuilder;
@@ -107,12 +108,12 @@
      * appends the necessary data to the TextureSamplerArray* object so effects can add texture
      * lookups to their code. This method is only meant to be called during the construction phase.
      */
-    void emitSamplers(GrGLShaderBuilder*, const GrEffectRef&, TextureSamplerArray*);
+    void emitSamplers(GrGLShaderBuilder*, const GrEffect*, TextureSamplerArray*);
 
     /**
      * Helper for setData(). Binds all the textures for an effect.
      */
-    void bindTextures(GrGpuGL*, const GrEffectRef&, int effectIdx);
+    void bindTextures(GrGpuGL*, const GrEffect*, int effectIdx);
 
     struct Sampler {
         SkDEBUGCODE(Sampler() : fTextureUnit(-1) {})
@@ -188,7 +189,7 @@
      * TransformedCoordsArray* object, which is in turn passed to the effect's emitCode() function.
      */
     void emitTransforms(GrGLFullShaderBuilder*,
-                        const GrEffectRef&,
+                        const GrEffect*,
                         EffectKey,
                         TransformedCoordsArray*);
 
@@ -276,7 +277,7 @@
      * effect's emitCode() function.
      */
     void setupPathTexGen(GrGLFragmentOnlyShaderBuilder*,
-                         const GrEffectRef&,
+                         const GrEffect*,
                          EffectKey,
                          TransformedCoordsArray*);
 
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index 7d2152f..4b7de02 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -337,7 +337,7 @@
 
 const char* GrGLShaderBuilder::dstColor() {
     if (fCodeStage.inStageCode()) {
-        const GrEffectRef& effect = *fCodeStage.effectStage()->getEffect();
+        const GrEffect* effect = fCodeStage.effectStage()->getEffect();
         if (!effect->willReadDstColor()) {
             SkDEBUGFAIL("GrGLEffect asked for dst color but its generating GrEffect "
                          "did not request access.");
@@ -487,7 +487,7 @@
 
 const char* GrGLShaderBuilder::fragmentPosition() {
     if (fCodeStage.inStageCode()) {
-        const GrEffectRef& effect = *fCodeStage.effectStage()->getEffect();
+        const GrEffect* effect = fCodeStage.effectStage()->getEffect();
         if (!effect->willReadFragmentPosition()) {
             SkDEBUGFAIL("GrGLEffect asked for frag position but its generating GrEffect "
                          "did not request access.");
diff --git a/tests/GLProgramsTest.cpp b/tests/GLProgramsTest.cpp
index 3df08a7..64c8559 100644
--- a/tests/GLProgramsTest.cpp
+++ b/tests/GLProgramsTest.cpp
@@ -76,16 +76,16 @@
     bool vertexCode = false;
     int numStages = numColorStages + numCoverageStages;
     for (int s = 0; s < numStages; ++s) {
-        const GrBackendEffectFactory& factory = (*stages[s]->getEffect())->getFactory();
+        const GrBackendEffectFactory& factory = stages[s]->getEffect()->getFactory();
         GrDrawEffect drawEffect(*stages[s], useLocalCoords);
         this->effectKeys()[s] = factory.glEffectKey(drawEffect, gpu->glCaps());
-        if ((*stages[s]->getEffect())->willReadDstColor()) {
+        if (stages[s]->getEffect()->willReadDstColor()) {
             dstRead = true;
         }
-        if ((*stages[s]->getEffect())->willReadFragmentPosition()) {
+        if (stages[s]->getEffect()->willReadFragmentPosition()) {
             fragPos = true;
         }
-        if ((*stages[s]->getEffect())->hasVertexCode()) {
+        if (stages[s]->getEffect()->hasVertexCode()) {
             vertexCode = true;
         }
     }