diff options
author | 2017-01-04 13:22:08 -0500 | |
---|---|---|
committer | 2017-01-04 19:23:05 +0000 | |
commit | bfd5183b9e039b50fb33441d1f90130b8eced80a (patch) | |
tree | 5b1aff9c95eb6cff4d5caee353f10265b7bdc4b9 /src/gpu | |
parent | 0bd783f951a004ccca175b166f2b30a0fd18a6f6 (diff) |
Removes tracking of whether color is ignored by XP.
Removes the feedback to GrDrawOp via GrPipelineOptimizations.
Change-Id: I3cb17cad41779af292a92385fcd5ac23ae5a1ffd
Reviewed-on: https://skia-review.googlesource.com/6561
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu')
28 files changed, 63 insertions, 212 deletions
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp index 8970803bb6..9da0ffee3f 100644 --- a/src/gpu/GrDefaultGeoProcFactory.cpp +++ b/src/gpu/GrDefaultGeoProcFactory.cpp @@ -47,7 +47,6 @@ public: const Attribute* inLocalCoords() const { return fInLocalCoords; } const Attribute* inCoverage() const { return fInCoverage; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } bool hasVertexColor() const { return SkToBool(fInColor); } const SkMatrix& viewMatrix() const { return fViewMatrix; } const SkMatrix& localMatrix() const { return fLocalMatrix; } @@ -71,13 +70,11 @@ public: varyingHandler->emitAttributes(gp); // Setup pass through color - if (!gp.colorIgnored()) { - if (gp.hasVertexColor()) { - varyingHandler->addPassThroughAttribute(gp.inColor(), args.fOutputColor); - } else { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, - &fColorUniform); - } + if (gp.hasVertexColor()) { + varyingHandler->addPassThroughAttribute(gp.inColor(), args.fOutputColor); + } else { + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, + &fColorUniform); } // Setup position @@ -131,10 +128,9 @@ public: GrProcessorKeyBuilder* b) { const DefaultGeoProc& def = gp.cast<DefaultGeoProc>(); uint32_t key = def.fFlags; - key |= def.colorIgnored() << 8; - key |= def.hasVertexColor() << 9; - key |= def.hasVertexCoverage() << 10; - key |= (def.coverage() == 0xff) ? (0x1 << 11) : 0; + key |= def.hasVertexColor() << 8; + key |= def.hasVertexCoverage() << 9; + key |= (def.coverage() == 0xff) ? (0x1 << 10) : 0; key |= (def.localCoordsWillBeRead() && def.localMatrix().hasPerspective()) ? (0x1 << 24) : 0x0; key |= ComputePosKey(def.viewMatrix()) << 25; diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp index 3d78c62684..910c3c919e 100644 --- a/src/gpu/GrPathProcessor.cpp +++ b/src/gpu/GrPathProcessor.cpp @@ -20,8 +20,7 @@ public: static void GenKey(const GrPathProcessor& pathProc, const GrShaderCaps&, GrProcessorKeyBuilder* b) { - b->add32(SkToInt(pathProc.optimizations().readsColor()) | - (SkToInt(pathProc.viewMatrix().hasPerspective()) << 2)); + b->add32(SkToInt(pathProc.viewMatrix().hasPerspective())); } void emitCode(EmitArgs& args) override { @@ -36,15 +35,13 @@ public: this->emitTransforms(args.fVaryingHandler, args.fFPCoordTransformHandler); // Setup uniform color - if (pathProc.optimizations().readsColor()) { - const char* stagedLocalVarName; - fColorUniform = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, - kVec4f_GrSLType, - kDefault_GrSLPrecision, - "Color", - &stagedLocalVarName); - fragBuilder->codeAppendf("%s = %s;", args.fOutputColor, stagedLocalVarName); - } + const char* stagedLocalVarName; + fColorUniform = args.fUniformHandler->addUniform(kFragment_GrShaderFlag, + kVec4f_GrSLType, + kDefault_GrSLPrecision, + "Color", + &stagedLocalVarName); + fragBuilder->codeAppendf("%s = %s;", args.fOutputColor, stagedLocalVarName); // setup constant solid coverage fragBuilder->codeAppendf("%s = vec4(1);", args.fOutputCoverage); @@ -76,7 +73,7 @@ public: const GrPrimitiveProcessor& primProc, FPCoordTransformIter&& transformIter) override { const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); - if (pathProc.optimizations().readsColor() && pathProc.color() != fColor) { + if (pathProc.color() != fColor) { float c[4]; GrColorToRGBAFloat(pathProc.color(), c); pd.set4fv(fColorUniform, 1, c); diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index 22818299cd..ea3f0f234f 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -111,9 +111,10 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, // information. int firstCoverageProcessorIdx = 0; - pipeline->adjustProgramFromOptimizations(builder, optFlags, args.fAnalysis.fColorPOI, - args.fAnalysis.fCoveragePOI, &firstColorProcessorIdx, - &firstCoverageProcessorIdx); + if ((optFlags & GrXferProcessor::kIgnoreColor_OptFlag) || + (optFlags & GrXferProcessor::kOverrideColor_OptFlag)) { + firstColorProcessorIdx = builder.numColorFragmentProcessors(); + } bool usesLocalCoords = false; @@ -139,9 +140,6 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, // Setup info we need to pass to GrPrimitiveProcessors that are used with this GrPipeline. optimizations->fFlags = 0; - if (!SkToBool(optFlags & GrXferProcessor::kIgnoreColor_OptFlag)) { - optimizations->fFlags |= GrPipelineOptimizations::kReadsColor_Flag; - } if (GrColor_ILLEGAL != overrideColor) { optimizations->fFlags |= GrPipelineOptimizations::kUseOverrideColor_Flag; optimizations->fOverrideColor = overrideColor; @@ -191,18 +189,6 @@ void GrPipeline::addDependenciesTo(GrRenderTarget* rt) const { } } -void GrPipeline::adjustProgramFromOptimizations(const GrPipelineBuilder& pipelineBuilder, - GrXferProcessor::OptFlags flags, - const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI, - int* firstColorProcessorIdx, - int* firstCoverageProcessorIdx) { - if ((flags & GrXferProcessor::kIgnoreColor_OptFlag) || - (flags & GrXferProcessor::kOverrideColor_OptFlag)) { - *firstColorProcessorIdx = pipelineBuilder.numColorFragmentProcessors(); - } -} - //////////////////////////////////////////////////////////////////////////////// bool GrPipeline::AreEqual(const GrPipeline& a, const GrPipeline& b) { diff --git a/src/gpu/GrPipeline.h b/src/gpu/GrPipeline.h index 3e25fda0e1..0013ce6dd6 100644 --- a/src/gpu/GrPipeline.h +++ b/src/gpu/GrPipeline.h @@ -203,16 +203,6 @@ private: GrPipeline() { /** Initialized in factory function*/ } /** - * Alter the program desc and inputs (attribs and processors) based on the blend optimization. - */ - void adjustProgramFromOptimizations(const GrPipelineBuilder& ds, - GrXferProcessor::OptFlags, - const GrProcOptInfo& colorPOI, - const GrProcOptInfo& coveragePOI, - int* firstColorProcessorIdx, - int* firstCoverageProcessorIdx); - - /** * Calculates the primary and secondary output types of the shader. For certain output types * the function may adjust the blend coefficients. After this function is called the src and dst * blend coeffs will represent those used by backend API. diff --git a/src/gpu/GrPrimitiveProcessor.h b/src/gpu/GrPrimitiveProcessor.h index 8d6a70284e..f1af14de4e 100644 --- a/src/gpu/GrPrimitiveProcessor.h +++ b/src/gpu/GrPrimitiveProcessor.h @@ -56,9 +56,6 @@ enum GrPixelLocalStorageState { */ class GrPipelineOptimizations { public: - /** Does the pipeline require the GrPrimitiveProcessor's color? */ - bool readsColor() const { return SkToBool(kReadsColor_Flag & fFlags); } - /** Does the pipeline require access to (implicit or explicit) local coordinates? */ bool readsLocalCoords() const { return SkToBool(kReadsLocalCoords_Flag & fFlags); @@ -74,7 +71,6 @@ public: so get the color)? */ bool getOverrideColorIfSet(GrColor* overrideColor) const { if (SkToBool(kUseOverrideColor_Flag & fFlags)) { - SkASSERT(SkToBool(kReadsColor_Flag & fFlags)); if (overrideColor) { *overrideColor = fOverrideColor; } @@ -98,21 +94,18 @@ public: private: enum { - // If this is not set the primitive processor need not produce a color output - kReadsColor_Flag = 0x1, - // If this is not set the primitive processor need not produce local coordinates - kReadsLocalCoords_Flag = 0x2, + kReadsLocalCoords_Flag = 0x1, // If this flag is set then the primitive processor may produce color*coverage as // its color output (and not output a separate coverage). - kCanTweakAlphaForCoverage_Flag = 0x4, + kCanTweakAlphaForCoverage_Flag = 0x2, // If this flag is set the GrPrimitiveProcessor must produce fOverrideColor as its // output color. If not set fOverrideColor is to be ignored. - kUseOverrideColor_Flag = 0x8, + kUseOverrideColor_Flag = 0x4, - kWillColorBlendWithDst_Flag = 0x10, + kWillColorBlendWithDst_Flag = 0x8, }; uint32_t fFlags; diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp index 8db60acec8..cb0e0c5a0c 100644 --- a/src/gpu/effects/GrBezierEffect.cpp +++ b/src/gpu/effects/GrBezierEffect.cpp @@ -84,9 +84,7 @@ void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!gp.colorIgnored()) { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); - } + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); // Setup position this->setupPosition(vertBuilder, @@ -222,7 +220,6 @@ void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp, GrProcessorKeyBuilder* b) { const GrConicEffect& ce = gp.cast<GrConicEffect>(); uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; - key |= GrColor_ILLEGAL != ce.color() ? 0x4 : 0x0; key |= 0xff != ce.coverageScale() ? 0x8 : 0x0; key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0x10 : 0x0; key |= ComputePosKey(ce.viewMatrix()) << 5; @@ -346,9 +343,7 @@ void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!gp.colorIgnored()) { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); - } + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); // Setup position this->setupPosition(vertBuilder, @@ -426,7 +421,6 @@ void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp, GrProcessorKeyBuilder* b) { const GrQuadEffect& ce = gp.cast<GrQuadEffect>(); uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; - key |= ce.color() != GrColor_ILLEGAL ? 0x4 : 0x0; key |= ce.coverageScale() != 0xff ? 0x8 : 0x0; key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0x10 : 0x0; key |= ComputePosKey(ce.viewMatrix()) << 5; @@ -656,7 +650,6 @@ void GrGLCubicEffect::GenKey(const GrGeometryProcessor& gp, GrProcessorKeyBuilder* b) { const GrCubicEffect& ce = gp.cast<GrCubicEffect>(); uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; - key |= ce.color() != GrColor_ILLEGAL ? 0x4 : 0x8; key |= ComputePosKey(ce.viewMatrix()) << 5; b->add32(key); } diff --git a/src/gpu/effects/GrBezierEffect.h b/src/gpu/effects/GrBezierEffect.h index edb14080d4..824883c9e6 100644 --- a/src/gpu/effects/GrBezierEffect.h +++ b/src/gpu/effects/GrBezierEffect.h @@ -100,7 +100,6 @@ public: inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -183,7 +182,6 @@ public: inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp index 8be4c2951a..3c4566ea7c 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -41,13 +41,11 @@ public: GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!cte.colorIgnored()) { - if (cte.hasVertexColor()) { - varyingHandler->addPassThroughAttribute(cte.inColor(), args.fOutputColor); - } else { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, - &fColorUniform); - } + if (cte.hasVertexColor()) { + varyingHandler->addPassThroughAttribute(cte.inColor(), args.fOutputColor); + } else { + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, + &fColorUniform); } // Setup position @@ -63,15 +61,13 @@ public: args.fFPCoordTransformHandler); if (cte.maskFormat() == kARGB_GrMaskFormat) { - if (!cte.colorIgnored()) { - fragBuilder->codeAppendf("%s = ", args.fOutputColor); - fragBuilder->appendTextureLookupAndModulate(args.fOutputColor, - args.fTexSamplers[0], - v.fsIn(), - kVec2f_GrSLType); - fragBuilder->codeAppend(";"); - fragBuilder->codeAppendf("%s = vec4(1);", args.fOutputCoverage); - } + fragBuilder->codeAppendf("%s = ", args.fOutputColor); + fragBuilder->appendTextureLookupAndModulate(args.fOutputColor, + args.fTexSamplers[0], + v.fsIn(), + kVec2f_GrSLType); + fragBuilder->codeAppend(";"); + fragBuilder->codeAppendf("%s = vec4(1);", args.fOutputCoverage); } else { fragBuilder->codeAppendf("%s = ", args.fOutputCoverage); fragBuilder->appendTextureLookup(args.fTexSamplers[0], v.fsIn(), kVec2f_GrSLType); @@ -102,9 +98,8 @@ public: GrProcessorKeyBuilder* b) { const GrBitmapTextGeoProc& gp = proc.cast<GrBitmapTextGeoProc>(); uint32_t key = 0; - key |= gp.usesLocalCoords() && gp.localMatrix().hasPerspective() ? 0x1 : 0x0; - key |= gp.colorIgnored() ? 0x2 : 0x0; - key |= gp.maskFormat() << 3; + key |= (gp.usesLocalCoords() && gp.localMatrix().hasPerspective()) ? 0x1 : 0x0; + key |= gp.maskFormat() << 1; b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point diff --git a/src/gpu/effects/GrBitmapTextGeoProc.h b/src/gpu/effects/GrBitmapTextGeoProc.h index bf7f08febd..f15de47cf4 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.h +++ b/src/gpu/effects/GrBitmapTextGeoProc.h @@ -37,7 +37,6 @@ public: const Attribute* inTextureCoords() const { return fInTextureCoords; } GrMaskFormat maskFormat() const { return fMaskFormat; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } bool hasVertexColor() const { return SkToBool(fInColor); } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index 9d90ac9986..ee28760b11 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -53,9 +53,7 @@ public: #endif // Setup pass through color - if (!dfTexEffect.colorIgnored()) { - varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); - } + varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); // Setup position this->setupPosition(vertBuilder, @@ -201,8 +199,7 @@ public: GrProcessorKeyBuilder* b) { const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast<GrDistanceFieldA8TextGeoProc>(); uint32_t key = dfTexEffect.getFlags(); - key |= dfTexEffect.colorIgnored() << 16; - key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; + key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point @@ -323,9 +320,7 @@ public: varyingHandler->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); // setup pass through color - if (!dfTexEffect.colorIgnored()) { - varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); - } + varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); vertBuilder->codeAppendf("%s = %s;", v.vsOut(), dfTexEffect.inTextureCoords()->fName); // Setup position @@ -457,8 +452,7 @@ public: const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast<GrDistanceFieldPathGeoProc>(); uint32_t key = dfTexEffect.getFlags(); - key |= dfTexEffect.colorIgnored() << 16; - key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; + key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); } @@ -561,9 +555,7 @@ public: GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // setup pass through color - if (!dfTexEffect.colorIgnored()) { - varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); - } + varyingHandler->addPassThroughAttribute(dfTexEffect.inColor(), args.fOutputColor); // Setup position this->setupPosition(vertBuilder, @@ -752,8 +744,7 @@ public: const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast<GrDistanceFieldLCDTextGeoProc>(); uint32_t key = dfTexEffect.getFlags(); - key |= dfTexEffect.colorIgnored() << 16; - key |= ComputePosKey(dfTexEffect.viewMatrix()) << 25; + key |= ComputePosKey(dfTexEffect.viewMatrix()) << 16; b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h index a0bfdd9dde..4355e8dd20 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -74,7 +74,6 @@ public: const Attribute* inColor() const { return fInColor; } const Attribute* inTextureCoords() const { return fInTextureCoords; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } #ifdef SK_GAMMA_APPLY_TO_A8 @@ -135,7 +134,6 @@ public: const Attribute* inColor() const { return fInColor; } const Attribute* inTextureCoords() const { return fInTextureCoords; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } uint32_t getFlags() const { return fFlags; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -204,7 +202,6 @@ public: const Attribute* inTextureCoords() const { return fInTextureCoords; } DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } uint32_t getFlags() const { return fFlags; } bool usesLocalCoords() const { return fUsesLocalCoords; } diff --git a/src/gpu/effects/GrShadowGeoProc.h b/src/gpu/effects/GrShadowGeoProc.h index dc6872e701..b0631efd9e 100755 --- a/src/gpu/effects/GrShadowGeoProc.h +++ b/src/gpu/effects/GrShadowGeoProc.h @@ -31,7 +31,6 @@ public: const Attribute* inColor() const { return fInColor; } const Attribute* inShadowParams() const { return fInShadowParams; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& localMatrix() const { return fLocalMatrix; } void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override; diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp index 14106fec28..e260d27628 100644 --- a/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -538,14 +538,12 @@ public: const Attribute* inPosition() const { return fInPosition; } const Attribute* inQuadEdge() const { return fInQuadEdge; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } class GLSLProcessor : public GrGLSLGeometryProcessor { public: - GLSLProcessor() - : fColor(GrColor_ILLEGAL) {} + GLSLProcessor() : fColor(GrColor_ILLEGAL) {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { const QuadEdgeEffect& qe = args.fGP.cast<QuadEdgeEffect>(); @@ -562,10 +560,8 @@ public: GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!qe.colorIgnored()) { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, - &fColorUniform); - } + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, + &fColorUniform); // Setup position this->setupPosition(vertBuilder, gpArgs, qe.inPosition()->fName); @@ -604,10 +600,7 @@ public: const GrShaderCaps&, GrProcessorKeyBuilder* b) { const QuadEdgeEffect& qee = gp.cast<QuadEdgeEffect>(); - uint32_t key = 0; - key |= qee.usesLocalCoords() && qee.localMatrix().hasPerspective() ? 0x1 : 0x0; - key |= qee.colorIgnored() ? 0x2 : 0x0; - b->add32(key); + b->add32(SkToBool(qee.usesLocalCoords() && qee.localMatrix().hasPerspective())); } void setData(const GrGLSLProgramDataManager& pdman, @@ -757,9 +750,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); diff --git a/src/gpu/ops/GrAADistanceFieldPathRenderer.cpp b/src/gpu/ops/GrAADistanceFieldPathRenderer.cpp index fc141f732c..4da6763407 100644 --- a/src/gpu/ops/GrAADistanceFieldPathRenderer.cpp +++ b/src/gpu/ops/GrAADistanceFieldPathRenderer.cpp @@ -170,12 +170,7 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fShapes[0].fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fShapes[0].fColor); - - fColorIgnored = !optimizations.readsColor(); fUsesLocalCoords = optimizations.readsLocalCoords(); } @@ -486,7 +481,6 @@ private: SkMatrix fViewMatrix; bool fUsesLocalCoords; - bool fColorIgnored; struct Entry { GrColor fColor; diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp index c8533cbd2e..29ad4ec305 100644 --- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp +++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp @@ -723,9 +723,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); } diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp index 03e5ce3522..74f355ee33 100644 --- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp @@ -178,12 +178,7 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fPaths[0].fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fPaths[0].fColor); - - fColor = fPaths[0].fColor; fUsesLocalCoords = optimizations.readsLocalCoords(); fCanTweakAlphaForCoverage = optimizations.canTweakAlphaForCoverage(); } @@ -304,7 +299,6 @@ private: return true; } - GrColor color() const { return fColor; } bool usesLocalCoords() const { return fUsesLocalCoords; } bool canTweakAlphaForCoverage() const { return fCanTweakAlphaForCoverage; } const SkMatrix& viewMatrix() const { return fPaths[0].fViewMatrix; } @@ -319,7 +313,6 @@ private: SkScalar fMiterLimit; }; - GrColor fColor; bool fUsesLocalCoords; bool fCanTweakAlphaForCoverage; SkSTArray<1, PathData, true> fPaths; diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp index 3c603bb228..8a5fec1f45 100644 --- a/src/gpu/ops/GrAAStrokeRectOp.cpp +++ b/src/gpu/ops/GrAAStrokeRectOp.cpp @@ -220,9 +220,6 @@ private: }; void AAStrokeRectOp::applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) { - if (!optimizations.readsColor()) { - fRects[0].fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fRects[0].fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp index 8705bac411..dd17ad6736 100644 --- a/src/gpu/ops/GrAtlasTextOp.cpp +++ b/src/gpu/ops/GrAtlasTextOp.cpp @@ -67,12 +67,8 @@ void GrAtlasTextOp::getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* inpu } void GrAtlasTextOp::applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) { - if (!optimizations.readsColor()) { - fGeoData[0].fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fGeoData[0].fColor); - fColorIgnored = !optimizations.readsColor(); fColor = fGeoData[0].fColor; fUsesLocalCoords = optimizations.readsLocalCoords(); } diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h index 781e580515..2a8c30b352 100644 --- a/src/gpu/ops/GrAtlasTextOp.h +++ b/src/gpu/ops/GrAtlasTextOp.h @@ -153,7 +153,6 @@ private: GrColor fColor; bool fUsesLocalCoords; - bool fColorIgnored; int fNumGlyphs; // The minimum number of Geometry we will try to allocate. diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp index caeff3d69f..d4be853100 100644 --- a/src/gpu/ops/GrDashOp.cpp +++ b/src/gpu/ops/GrDashOp.cpp @@ -303,9 +303,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); @@ -772,8 +769,6 @@ public: GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } - const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -851,9 +846,7 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!dce.colorIgnored()) { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); - } + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); // Setup position this->setupPosition(vertBuilder, gpArgs, dce.inPosition()->fName); @@ -904,8 +897,7 @@ void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, const DashingCircleEffect& dce = gp.cast<DashingCircleEffect>(); uint32_t key = 0; key |= dce.usesLocalCoords() && dce.localMatrix().hasPerspective() ? 0x1 : 0x0; - key |= dce.colorIgnored() ? 0x2 : 0x0; - key |= static_cast<uint32_t>(dce.aaMode()) << 8; + key |= static_cast<uint32_t>(dce.aaMode()) << 1; b->add32(key); } @@ -985,9 +977,7 @@ public: GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } - - const SkMatrix& localMatrix() const { return fLocalMatrix; } + const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -1033,9 +1023,7 @@ private: typedef GrGLSLGeometryProcessor INHERITED; }; -GLDashingLineEffect::GLDashingLineEffect() { - fColor = GrColor_ILLEGAL; -} +GLDashingLineEffect::GLDashingLineEffect() : fColor(GrColor_ILLEGAL) {} void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { const DashingLineEffect& de = args.fGP.cast<DashingLineEffect>(); @@ -1060,9 +1048,7 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLPPFragmentBuilder* fragBuilder = args.fFragBuilder; // Setup pass through color - if (!de.colorIgnored()) { - this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); - } + this->setupUniformColor(fragBuilder, uniformHandler, args.fOutputColor, &fColorUniform); // Setup position this->setupPosition(vertBuilder, gpArgs, de.inPosition()->fName); @@ -1131,7 +1117,6 @@ void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, const DashingLineEffect& de = gp.cast<DashingLineEffect>(); uint32_t key = 0; key |= de.usesLocalCoords() && de.localMatrix().hasPerspective() ? 0x1 : 0x0; - key |= de.colorIgnored() ? 0x2 : 0x0; key |= static_cast<int>(de.aaMode()) << 8; b->add32(key); } diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp index 2b2501e20b..d9e0110c06 100644 --- a/src/gpu/ops/GrDefaultPathRenderer.cpp +++ b/src/gpu/ops/GrDefaultPathRenderer.cpp @@ -138,9 +138,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); } diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp index 2c8e34bdce..c9dffe6e34 100644 --- a/src/gpu/ops/GrDrawAtlasOp.cpp +++ b/src/gpu/ops/GrDrawAtlasOp.cpp @@ -14,9 +14,6 @@ void GrDrawAtlasOp::applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) { SkASSERT(fGeoData.count() == 1); - if (!optimizations.readsColor()) { - fGeoData[0].fColor = GrColor_ILLEGAL; - } if (optimizations.getOverrideColorIfSet(&fGeoData[0].fColor) && fHasColors) { size_t vertexStride = sizeof(SkPoint) + sizeof(SkPoint) + (this->hasColors() ? sizeof(GrColor) : 0); @@ -27,7 +24,6 @@ void GrDrawAtlasOp::applyPipelineOptimizations(const GrPipelineOptimizations& op } } - fColorIgnored = !optimizations.readsColor(); fColor = fGeoData[0].fColor; // We'd like to assert this, but we can't because of GLPrograms test // SkASSERT(init.readsLocalCoords()); @@ -176,9 +172,6 @@ bool GrDrawAtlasOp::onCombineIfPossible(GrOp* t, const GrCaps& caps) { return false; } - if (this->color() != that->color()) { - fColor = GrColor_ILLEGAL; - } fGeoData.push_back_n(that->fGeoData.count(), that->fGeoData.begin()); fQuadCount += that->quadCount(); diff --git a/src/gpu/ops/GrDrawAtlasOp.h b/src/gpu/ops/GrDrawAtlasOp.h index 8251386eab..8184ecb81b 100644 --- a/src/gpu/ops/GrDrawAtlasOp.h +++ b/src/gpu/ops/GrDrawAtlasOp.h @@ -53,7 +53,6 @@ private: void applyPipelineOptimizations(const GrPipelineOptimizations&) override; GrColor color() const { return fColor; } - bool colorIgnored() const { return fColorIgnored; } const SkMatrix& viewMatrix() const { return fViewMatrix; } bool hasColors() const { return fHasColors; } int quadCount() const { return fQuadCount; } @@ -70,7 +69,6 @@ private: SkMatrix fViewMatrix; GrColor fColor; int fQuadCount; - bool fColorIgnored; bool fHasColors; typedef GrMeshDrawOp INHERITED; diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp index a45e6fad15..207567beff 100644 --- a/src/gpu/ops/GrMSAAPathRenderer.cpp +++ b/src/gpu/ops/GrMSAAPathRenderer.cpp @@ -264,9 +264,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fPaths[0].fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fPaths[0].fColor); } diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp index 51db03542c..f693169b47 100644 --- a/src/gpu/ops/GrOvalOpFactory.cpp +++ b/src/gpu/ops/GrOvalOpFactory.cpp @@ -1251,9 +1251,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fGeoData[0].fColor = GrColor_ILLEGAL; - } if (!optimizations.readsLocalCoords()) { fViewMatrixIfUsingLocalCoords.reset(); } diff --git a/src/gpu/ops/GrPLSPathRenderer.cpp b/src/gpu/ops/GrPLSPathRenderer.cpp index 637b4b7c09..0e70634023 100644 --- a/src/gpu/ops/GrPLSPathRenderer.cpp +++ b/src/gpu/ops/GrPLSPathRenderer.cpp @@ -634,7 +634,6 @@ public: const Attribute* inPosition() const { return fInPosition; } GrColor color() const { return fColor; } - bool colorIgnored() const { return GrColor_ILLEGAL == fColor; } const SkMatrix& localMatrix() const { return fLocalMatrix; } bool usesLocalCoords() const { return fUsesLocalCoords; } @@ -683,10 +682,8 @@ public: fsBuilder->codeAppend("coverage += pls.windings[2] != 0 ? 0.25 : 0.0;"); fsBuilder->codeAppend("coverage += pls.windings[3] != 0 ? 0.25 : 0.0;"); fsBuilder->codeAppend("}"); - if (!fe.colorIgnored()) { - this->setupUniformColor(fsBuilder, uniformHandler, args.fOutputColor, - &fColorUniform); - } + this->setupUniformColor(fsBuilder, uniformHandler, args.fOutputColor, + &fColorUniform); fsBuilder->codeAppendf("%s = vec4(coverage);", args.fOutputCoverage); fsBuilder->codeAppendf("%s = vec4(1.0, 0.0, 1.0, 1.0);", args.fOutputColor); } @@ -704,7 +701,7 @@ public: FPCoordTransformIter&& transformIter) override { const PLSFinishEffect& fe = gp.cast<PLSFinishEffect>(); pdman.set1f(fUseEvenOdd, fe.fUseEvenOdd); - if (fe.color() != fColor && !fe.colorIgnored()) { + if (fe.color() != fColor) { GrGLfloat c[4]; GrColorToRGBAFloat(fe.color(), c); pdman.set4fv(fColorUniform, 1, c); @@ -796,9 +793,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fUsesLocalCoords = optimizations.readsLocalCoords(); diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp index afd953e917..183ab31aac 100644 --- a/src/gpu/ops/GrTessellatingPathRenderer.cpp +++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp @@ -186,9 +186,6 @@ private: } void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { - if (!optimizations.readsColor()) { - fColor = GrColor_ILLEGAL; - } optimizations.getOverrideColorIfSet(&fColor); fOptimizations = optimizations; } diff --git a/src/gpu/ops/GrTestMeshDrawOp.h b/src/gpu/ops/GrTestMeshDrawOp.h index 8d5a896d81..b8143a5aa7 100644 --- a/src/gpu/ops/GrTestMeshDrawOp.h +++ b/src/gpu/ops/GrTestMeshDrawOp.h @@ -30,12 +30,7 @@ protected: GrColor color() const { return fColor; } - struct Optimizations { - bool fColorIgnored = false; - bool fUsesLocalCoords = false; - }; - - const Optimizations optimizations() const { return fOptimizations; } + bool usesLocalCoords() const { return fUsesLocalCoords; } private: void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override { @@ -45,15 +40,13 @@ private: void applyPipelineOptimizations(const GrPipelineOptimizations& optimizations) override { optimizations.getOverrideColorIfSet(&fColor); - - fOptimizations.fColorIgnored = !optimizations.readsColor(); - fOptimizations.fUsesLocalCoords = optimizations.readsLocalCoords(); + fUsesLocalCoords = optimizations.readsLocalCoords(); } bool onCombineIfPossible(GrOp*, const GrCaps&) override { return false; } - GrColor fColor; - Optimizations fOptimizations; + GrColor fColor; + bool fUsesLocalCoords = false; typedef GrMeshDrawOp INHERITED; }; |