| Index: src/gpu/GrDrawState.h
|
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
|
| index dff3c73f6cb5f7366183dee6c3a82a3ba25244bd..17bd0f43df8fe0e6ab80a57871420b001d9debfa 100644
|
| --- a/src/gpu/GrDrawState.h
|
| +++ b/src/gpu/GrDrawState.h
|
| @@ -68,6 +68,21 @@
|
| */
|
| void setFromPaint(const GrPaint& , const SkMatrix& viewMatrix, GrRenderTarget*);
|
|
|
| + ///////////////////////////////////////////////////////////////////////////
|
| + /// @name Vertex Attributes
|
| + ////
|
| +
|
| + // TODO when we move this info off of GrGeometryProcessor, delete these
|
| + bool hasLocalCoordAttribute() const {
|
| + return this->hasGeometryProcessor() && this->getGeometryProcessor()->hasLocalCoords();
|
| + }
|
| + bool hasColorVertexAttribute() const {
|
| + return this->hasGeometryProcessor() && this->getGeometryProcessor()->hasVertexColor();
|
| + }
|
| + bool hasCoverageVertexAttribute() const {
|
| + return this->hasGeometryProcessor() && this->getGeometryProcessor()->hasVertexCoverage();
|
| + }
|
| +
|
| /// @}
|
|
|
| /**
|
| @@ -85,13 +100,29 @@
|
| /**
|
| * Determines whether the output coverage is guaranteed to be one for all pixels hit by a draw.
|
| */
|
| - bool hasSolidCoverage(const GrPrimitiveProcessor*) const;
|
| + bool hasSolidCoverage(GrColor coverage) const;
|
|
|
| /**
|
| * This function returns true if the render target destination pixel values will be read for
|
| * blending during draw.
|
| */
|
| - bool willBlendWithDst(const GrPrimitiveProcessor*) const;
|
| + bool willBlendWithDst(GrColor color, GrColor coverage) const;
|
| +
|
| + /// @}
|
| +
|
| + /**
|
| + * The geometry processor is the sole element of the skia pipeline which can use the vertex,
|
| + * geometry, and tesselation shaders. The GP may also compute a coverage in its fragment shader
|
| + * but is never put in the color processing pipeline.
|
| + */
|
| +
|
| + const GrGeometryProcessor* setGeometryProcessor(const GrGeometryProcessor* geometryProcessor) {
|
| + SkASSERT(geometryProcessor);
|
| + SkASSERT(!this->hasGeometryProcessor());
|
| + fGeometryProcessor.reset(SkRef(geometryProcessor));
|
| + fCoverageProcInfoValid = false;
|
| + return geometryProcessor;
|
| + }
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| /// @name Effect Stages
|
| @@ -116,6 +147,12 @@
|
| int numColorStages() const { return fColorStages.count(); }
|
| int numCoverageStages() const { return fCoverageStages.count(); }
|
| int numFragmentStages() const { return this->numColorStages() + this->numCoverageStages(); }
|
| + int numTotalStages() const {
|
| + return this->numFragmentStages() + (this->hasGeometryProcessor() ? 1 : 0);
|
| + }
|
| +
|
| + bool hasGeometryProcessor() const { return SkToBool(fGeometryProcessor.get()); }
|
| + const GrGeometryProcessor* getGeometryProcessor() const { return fGeometryProcessor.get(); }
|
|
|
| const GrXPFactory* getXPFactory() const { return fXPFactory.get(); }
|
|
|
| @@ -126,7 +163,7 @@
|
| * Checks whether any of the effects will read the dst pixel color.
|
| * TODO remove when we have an XP
|
| */
|
| - bool willEffectReadDstColor(const GrPrimitiveProcessor*) const;
|
| + bool willEffectReadDstColor(GrColor color, GrColor coverage) const;
|
|
|
| /**
|
| * The xfer processor factory.
|
| @@ -201,11 +238,13 @@
|
| public:
|
| AutoRestoreEffects()
|
| : fDrawState(NULL)
|
| + , fOriginalGPID(SK_InvalidUniqueID)
|
| , fColorEffectCnt(0)
|
| , fCoverageEffectCnt(0) {}
|
|
|
| AutoRestoreEffects(GrDrawState* ds)
|
| : fDrawState(NULL)
|
| + , fOriginalGPID(SK_InvalidUniqueID)
|
| , fColorEffectCnt(0)
|
| , fCoverageEffectCnt(0) {
|
| this->set(ds);
|
| @@ -219,6 +258,7 @@
|
|
|
| private:
|
| GrDrawState* fDrawState;
|
| + uint32_t fOriginalGPID;
|
| int fColorEffectCnt;
|
| int fCoverageEffectCnt;
|
| };
|
| @@ -515,29 +555,22 @@
|
| GrDrawState& operator= (const GrDrawState& that);
|
|
|
| private:
|
| - bool isEqual(const GrDrawState& that, bool explicitLocalCoords) const;
|
| -
|
| - const GrProcOptInfo& colorProcInfo(const GrPrimitiveProcessor* pp) const {
|
| - this->calcColorInvariantOutput(pp);
|
| + bool isEqual(const GrDrawState& that) const;
|
| +
|
| + const GrProcOptInfo& colorProcInfo(GrColor color) const {
|
| + this->calcColorInvariantOutput(color);
|
| return fColorProcInfo;
|
| }
|
|
|
| - const GrProcOptInfo& coverageProcInfo(const GrPrimitiveProcessor* pp) const {
|
| - this->calcCoverageInvariantOutput(pp);
|
| + const GrProcOptInfo& coverageProcInfo(GrColor coverage) const {
|
| + this->calcCoverageInvariantOutput(coverage);
|
| return fCoverageProcInfo;
|
| }
|
|
|
| /**
|
| - * If fColorProcInfoValid is false, function calculates the invariant output for the color
|
| - * stages and results are stored in fColorProcInfo.
|
| - */
|
| - void calcColorInvariantOutput(const GrPrimitiveProcessor*) const;
|
| -
|
| - /**
|
| - * If fCoverageProcInfoValid is false, function calculates the invariant output for the coverage
|
| - * stages and results are stored in fCoverageProcInfo.
|
| - */
|
| - void calcCoverageInvariantOutput(const GrPrimitiveProcessor*) const;
|
| + * Determines whether src alpha is guaranteed to be one for all src pixels
|
| + */
|
| + bool srcAlphaWillBeOne(GrColor color, GrColor coverage) const;
|
|
|
| /**
|
| * If fColorProcInfoValid is false, function calculates the invariant output for the color
|
| @@ -564,6 +597,7 @@
|
| uint32_t fFlagBits;
|
| GrStencilSettings fStencilSettings;
|
| DrawFace fDrawFace;
|
| + SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
|
| SkAutoTUnref<const GrXPFactory> fXPFactory;
|
| FragmentStageArray fColorStages;
|
| FragmentStageArray fCoverageStages;
|
| @@ -575,8 +609,6 @@
|
| mutable bool fCoverageProcInfoValid;
|
| mutable GrColor fColorCache;
|
| mutable GrColor fCoverageCache;
|
| - mutable const GrPrimitiveProcessor* fColorPrimProc;
|
| - mutable const GrPrimitiveProcessor* fCoveragePrimProc;
|
|
|
| friend class GrOptDrawState;
|
| };
|
|
|