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;
}
}