| Index: src/gpu/effects/GrTextureDomainEffect.cpp
 | 
| ===================================================================
 | 
| --- src/gpu/effects/GrTextureDomainEffect.cpp	(revision 8241)
 | 
| +++ src/gpu/effects/GrTextureDomainEffect.cpp	(working copy)
 | 
| @@ -14,19 +14,18 @@
 | 
|  
 | 
|  class GrGLTextureDomainEffect : public GrGLEffect {
 | 
|  public:
 | 
| -    GrGLTextureDomainEffect(const GrBackendEffectFactory&, const GrEffectRef&);
 | 
| +    GrGLTextureDomainEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
 | 
|  
 | 
|      virtual void emitCode(GrGLShaderBuilder*,
 | 
| -                          const GrEffectStage&,
 | 
| +                          const GrDrawEffect&,
 | 
|                            EffectKey,
 | 
| -                          const char* vertexCoords,
 | 
|                            const char* outputColor,
 | 
|                            const char* inputColor,
 | 
|                            const TextureSamplerArray&) SK_OVERRIDE;
 | 
|  
 | 
| -    virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE;
 | 
| +    virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
 | 
|  
 | 
| -    static inline EffectKey GenKey(const GrEffectStage&, const GrGLCaps&);
 | 
| +    static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
 | 
|  
 | 
|  private:
 | 
|      GrGLUniformManager::UniformHandle fNameUni;
 | 
| @@ -37,27 +36,27 @@
 | 
|  };
 | 
|  
 | 
|  GrGLTextureDomainEffect::GrGLTextureDomainEffect(const GrBackendEffectFactory& factory,
 | 
| -                                                 const GrEffectRef&)
 | 
| +                                                 const GrDrawEffect& drawEffect)
 | 
|      : INHERITED(factory)
 | 
| -    , fNameUni(GrGLUniformManager::kInvalidUniformHandle) {
 | 
| +    , fNameUni(GrGLUniformManager::kInvalidUniformHandle)
 | 
| +    , fEffectMatrix(drawEffect.castEffect<GrTextureDomainEffect>().coordsType()) {
 | 
|      fPrevDomain[0] = SK_FloatNaN;
 | 
|  }
 | 
|  
 | 
|  void GrGLTextureDomainEffect::emitCode(GrGLShaderBuilder* builder,
 | 
| -                                       const GrEffectStage& stage,
 | 
| +                                       const GrDrawEffect& drawEffect,
 | 
|                                         EffectKey key,
 | 
| -                                       const char* vertexCoords,
 | 
|                                         const char* outputColor,
 | 
|                                         const char* inputColor,
 | 
|                                         const TextureSamplerArray& samplers) {
 | 
| -    const GrTextureDomainEffect& effect = GetEffectFromStage<GrTextureDomainEffect>(stage);
 | 
| +    const GrTextureDomainEffect& texDom = drawEffect.castEffect<GrTextureDomainEffect>();
 | 
|  
 | 
|      const char* coords;
 | 
| -    fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, vertexCoords, &coords);
 | 
| +    fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords);
 | 
|      const char* domain;
 | 
|      fNameUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
 | 
|                                      kVec4f_GrSLType, "TexDom", &domain);
 | 
| -    if (GrTextureDomainEffect::kClamp_WrapMode == effect.wrapMode()) {
 | 
| +    if (GrTextureDomainEffect::kClamp_WrapMode == texDom.wrapMode()) {
 | 
|  
 | 
|          builder->fsCodeAppendf("\tvec2 clampCoord = clamp(%s, %s.xy, %s.zw);\n",
 | 
|                                  coords, domain, domain);
 | 
| @@ -69,7 +68,7 @@
 | 
|                                                  "clampCoord");
 | 
|          builder->fsCodeAppend(";\n");
 | 
|      } else {
 | 
| -        GrAssert(GrTextureDomainEffect::kDecal_WrapMode == effect.wrapMode());
 | 
| +        GrAssert(GrTextureDomainEffect::kDecal_WrapMode == texDom.wrapMode());
 | 
|  
 | 
|          if (kImagination_GrGLVendor == builder->ctxInfo().vendor()) {
 | 
|              // On the NexusS and GalaxyNexus, the other path (with the 'any'
 | 
| @@ -106,9 +105,10 @@
 | 
|      }
 | 
|  }
 | 
|  
 | 
| -void GrGLTextureDomainEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) {
 | 
| -    const GrTextureDomainEffect& effect = GetEffectFromStage<GrTextureDomainEffect>(stage);
 | 
| -    const GrRect& domain = effect.domain();
 | 
| +void GrGLTextureDomainEffect::setData(const GrGLUniformManager& uman,
 | 
| +                                      const GrDrawEffect& drawEffect) {
 | 
| +    const GrTextureDomainEffect& texDom = drawEffect.castEffect<GrTextureDomainEffect>();
 | 
| +    const GrRect& domain = texDom.domain();
 | 
|  
 | 
|      float values[4] = {
 | 
|          SkScalarToFloat(domain.left()),
 | 
| @@ -117,7 +117,7 @@
 | 
|          SkScalarToFloat(domain.bottom())
 | 
|      };
 | 
|      // vertical flip if necessary
 | 
| -    if (kBottomLeft_GrSurfaceOrigin == effect.texture(0)->origin()) {
 | 
| +    if (kBottomLeft_GrSurfaceOrigin == texDom.texture(0)->origin()) {
 | 
|          values[1] = 1.0f - values[1];
 | 
|          values[3] = 1.0f - values[3];
 | 
|          // The top and bottom were just flipped, so correct the ordering
 | 
| @@ -128,18 +128,20 @@
 | 
|          uman.set4fv(fNameUni, 0, 1, values);
 | 
|      }
 | 
|      fEffectMatrix.setData(uman,
 | 
| -                          effect.getMatrix(),
 | 
| -                          stage.getCoordChangeMatrix(),
 | 
| -                          effect.texture(0));
 | 
| +                          texDom.getMatrix(),
 | 
| +                          drawEffect,
 | 
| +                          texDom.texture(0));
 | 
|  }
 | 
|  
 | 
| -GrGLEffect::EffectKey GrGLTextureDomainEffect::GenKey(const GrEffectStage& stage, const GrGLCaps&) {
 | 
| -    const GrTextureDomainEffect& effect = GetEffectFromStage<GrTextureDomainEffect>(stage);
 | 
| -    EffectKey key = effect.wrapMode();
 | 
| +GrGLEffect::EffectKey GrGLTextureDomainEffect::GenKey(const GrDrawEffect& drawEffect,
 | 
| +                                                      const GrGLCaps&) {
 | 
| +    const GrTextureDomainEffect& texDom = drawEffect.castEffect<GrTextureDomainEffect>();
 | 
| +    EffectKey key = texDom.wrapMode();
 | 
|      key <<= GrGLEffectMatrix::kKeyBits;
 | 
| -    EffectKey matrixKey = GrGLEffectMatrix::GenKey(effect.getMatrix(),
 | 
| -                                                   stage.getCoordChangeMatrix(),
 | 
| -                                                   effect.texture(0));
 | 
| +    EffectKey matrixKey = GrGLEffectMatrix::GenKey(texDom.getMatrix(),
 | 
| +                                                   drawEffect,
 | 
| +                                                   texDom.coordsType(),
 | 
| +                                                   texDom.texture(0));
 | 
|      return key | matrixKey;
 | 
|  }
 | 
|  
 | 
| @@ -150,7 +152,8 @@
 | 
|                                             const SkMatrix& matrix,
 | 
|                                             const GrRect& domain,
 | 
|                                             WrapMode wrapMode,
 | 
| -                                           bool bilerp) {
 | 
| +                                           bool bilerp,
 | 
| +                                           CoordsType coordsType) {
 | 
|      static const SkRect kFullRect = {0, 0, SK_Scalar1, SK_Scalar1};
 | 
|      if (kClamp_WrapMode == wrapMode && domain.contains(kFullRect)) {
 | 
|          return GrSimpleTextureEffect::Create(texture, matrix, bilerp);
 | 
| @@ -172,7 +175,8 @@
 | 
|                                                                    matrix,
 | 
|                                                                    clippedDomain,
 | 
|                                                                    wrapMode,
 | 
| -                                                                  bilerp)));
 | 
| +                                                                  bilerp,
 | 
| +                                                                  coordsType)));
 | 
|          return CreateEffectRef(effect);
 | 
|  
 | 
|      }
 | 
| @@ -182,8 +186,9 @@
 | 
|                                               const SkMatrix& matrix,
 | 
|                                               const GrRect& domain,
 | 
|                                               WrapMode wrapMode,
 | 
| -                                             bool bilerp)
 | 
| -    : GrSingleTextureEffect(texture, matrix, bilerp)
 | 
| +                                             bool bilerp,
 | 
| +                                             CoordsType coordsType)
 | 
| +    : GrSingleTextureEffect(texture, matrix, bilerp, coordsType)
 | 
|      , fWrapMode(wrapMode)
 | 
|      , fTextureDomain(domain) {
 | 
|  }
 | 
| @@ -198,7 +203,8 @@
 | 
|  
 | 
|  bool GrTextureDomainEffect::onIsEqual(const GrEffect& sBase) const {
 | 
|      const GrTextureDomainEffect& s = CastEffect<GrTextureDomainEffect>(sBase);
 | 
| -    return this->hasSameTextureParamsAndMatrix(s) && this->fTextureDomain == s.fTextureDomain;
 | 
| +    return this->hasSameTextureParamsMatrixAndCoordsType(s) &&
 | 
| +           this->fTextureDomain == s.fTextureDomain;
 | 
|  }
 | 
|  
 | 
|  void GrTextureDomainEffect::getConstantColorComponents(GrColor* color, uint32_t* validFlags) const {
 | 
| @@ -225,5 +231,12 @@
 | 
|      domain.fBottom = random->nextRangeScalar(domain.fTop, SK_Scalar1);
 | 
|      WrapMode wrapMode = random->nextBool() ? kClamp_WrapMode : kDecal_WrapMode;
 | 
|      const SkMatrix& matrix = GrEffectUnitTest::TestMatrix(random);
 | 
| -    return GrTextureDomainEffect::Create(textures[texIdx], matrix, domain, wrapMode);
 | 
| +    bool bilerp = random->nextBool();
 | 
| +    CoordsType coords = random->nextBool() ? kLocal_CoordsType : kPosition_CoordsType;
 | 
| +    return GrTextureDomainEffect::Create(textures[texIdx],
 | 
| +                                         matrix,
 | 
| +                                         domain,
 | 
| +                                         wrapMode,
 | 
| +                                         bilerp,
 | 
| +                                         coords);
 | 
|  }
 | 
| 
 |