| Index: src/gpu/GrOptDrawState.h
|
| diff --git a/src/gpu/GrOptDrawState.h b/src/gpu/GrOptDrawState.h
|
| index f47913a41ae049b2b214ac166a1291f4c09bf3a2..f495b8983a4e3c929ba32565c35809a42ae98399 100644
|
| --- a/src/gpu/GrOptDrawState.h
|
| +++ b/src/gpu/GrOptDrawState.h
|
| @@ -11,11 +11,13 @@
|
| #include "GrColor.h"
|
| #include "GrGpu.h"
|
| #include "GrProcessorStage.h"
|
| +#include "GrProgramDesc.h"
|
| #include "GrStencil.h"
|
| #include "GrTypesPriv.h"
|
| #include "SkMatrix.h"
|
| #include "SkRefCnt.h"
|
|
|
| +class GrDeviceCoordTexture;
|
| class GrDrawState;
|
|
|
| /**
|
| @@ -30,8 +32,8 @@ public:
|
| * GrOptDrawState. In all cases the GrOptDrawState is reffed and ownership is given to the
|
| * caller.
|
| */
|
| - static GrOptDrawState* Create(const GrDrawState& drawState, const GrDrawTargetCaps& caps,
|
| - GrGpu::DrawType drawType);
|
| + static GrOptDrawState* Create(const GrDrawState& drawState, GrGpu*,
|
| + const GrDeviceCoordTexture* dstCopy, GrGpu::DrawType drawType);
|
|
|
| bool operator== (const GrOptDrawState& that) const;
|
|
|
| @@ -48,35 +50,6 @@ public:
|
|
|
| size_t getVertexStride() const { return fVAStride; }
|
|
|
| - /**
|
| - * Getters for index into getVertexAttribs() for particular bindings. -1 is returned if the
|
| - * binding does not appear in the current attribs. These bindings should appear only once in
|
| - * the attrib array.
|
| - */
|
| -
|
| - int positionAttributeIndex() const {
|
| - return fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding];
|
| - }
|
| - int localCoordAttributeIndex() const {
|
| - return fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| - }
|
| - int colorVertexAttributeIndex() const {
|
| - return fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| - }
|
| - int coverageVertexAttributeIndex() const {
|
| - return fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| - }
|
| -
|
| - bool hasLocalCoordAttribute() const {
|
| - return -1 != fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| - }
|
| - bool hasColorVertexAttribute() const {
|
| - return -1 != fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| - }
|
| - bool hasCoverageVertexAttribute() const {
|
| - return -1 != fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| - }
|
| -
|
| /// @}
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| @@ -299,48 +272,10 @@ public:
|
| kB_CombinedState,
|
| };
|
|
|
| - bool inputColorIsUsed() const { return fInputColorIsUsed; }
|
| - bool inputCoverageIsUsed() const { return fInputCoverageIsUsed; }
|
| -
|
| - bool readsDst() const { return fReadsDst; }
|
| - bool readsFragPosition() const { return fReadsFragPosition; }
|
| - bool requiresLocalCoordAttrib() const { return fRequiresLocalCoordAttrib; }
|
| -
|
| - ///////////////////////////////////////////////////////////////////////////
|
| - /// @name Stage Output Types
|
| - ////
|
| -
|
| - enum PrimaryOutputType {
|
| - // Modulate color and coverage, write result as the color output.
|
| - kModulate_PrimaryOutputType,
|
| - // Combines the coverage, dst, and color as coverage * color + (1 - coverage) * dst. This
|
| - // can only be set if fDstReadKey is non-zero.
|
| - kCombineWithDst_PrimaryOutputType,
|
| -
|
| - kPrimaryOutputTypeCnt,
|
| - };
|
| -
|
| - enum SecondaryOutputType {
|
| - // There is no secondary output
|
| - kNone_SecondaryOutputType,
|
| - // Writes coverage as the secondary output. Only set if dual source blending is supported
|
| - // and primary output is kModulate.
|
| - kCoverage_SecondaryOutputType,
|
| - // Writes coverage * (1 - colorA) as the secondary output. Only set if dual source blending
|
| - // is supported and primary output is kModulate.
|
| - kCoverageISA_SecondaryOutputType,
|
| - // Writes coverage * (1 - colorRGBA) as the secondary output. Only set if dual source
|
| - // blending is supported and primary output is kModulate.
|
| - kCoverageISC_SecondaryOutputType,
|
| -
|
| - kSecondaryOutputTypeCnt,
|
| - };
|
| -
|
| - PrimaryOutputType getPrimaryOutputType() const { return fPrimaryOutputType; }
|
| - SecondaryOutputType getSecondaryOutputType() const { return fSecondaryOutputType; }
|
| -
|
| /// @}
|
|
|
| + const GrProgramDesc& programDesc() const { return fDesc; }
|
| +
|
| private:
|
| /**
|
| * Optimizations for blending / coverage to that can be applied based on the current state.
|
| @@ -376,7 +311,7 @@ private:
|
| */
|
| GrOptDrawState(const GrDrawState& drawState, BlendOptFlags blendOptFlags,
|
| GrBlendCoeff optSrcCoeff, GrBlendCoeff optDstCoeff,
|
| - const GrDrawTargetCaps& caps);
|
| + GrGpu*, const GrDeviceCoordTexture* dstCopy, GrGpu::DrawType);
|
|
|
| /**
|
| * Loops through all the color stage effects to check if the stage will ignore color input or
|
| @@ -384,35 +319,38 @@ private:
|
| * stages. In the constant color case, we can ignore all previous stages and
|
| * the current one and set the state color to the constant color.
|
| */
|
| - void computeEffectiveColorStages(const GrDrawState& ds, int* firstColorStageIdx,
|
| - uint8_t* fixFunctionVAToRemove);
|
| + void computeEffectiveColorStages(const GrDrawState& ds, GrProgramDesc::DescInfo*,
|
| + int* firstColorStageIdx, uint8_t* fixFunctionVAToRemove);
|
|
|
| /**
|
| * Loops through all the coverage stage effects to check if the stage will ignore color input.
|
| * If a coverage stage will ignore input, then we can ignore all coverage stages before it. We
|
| * loop to determine the first effective coverage stage.
|
| */
|
| - void computeEffectiveCoverageStages(const GrDrawState& ds, int* firstCoverageStageIdx);
|
| + void computeEffectiveCoverageStages(const GrDrawState& ds, GrProgramDesc::DescInfo* descInfo,
|
| + int* firstCoverageStageIdx);
|
|
|
| /**
|
| * This function takes in a flag and removes the corresponding fixed function vertex attributes.
|
| * The flags are in the same order as GrVertexAttribBinding array. If bit i of removeVAFlags is
|
| * set, then vertex attributes with binding (GrVertexAttribute)i will be removed.
|
| */
|
| - void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags);
|
| + void removeFixedFunctionVertexAttribs(uint8_t removeVAFlags, GrProgramDesc::DescInfo*);
|
|
|
| /**
|
| * Alter the OptDrawState (adjusting stages, vertex attribs, flags, etc.) based on the
|
| * BlendOptFlags.
|
| */
|
| - void adjustFromBlendOpts(const GrDrawState& ds, int* firstColorStageIdx,
|
| - int* firstCoverageStageIdx, uint8_t* fixedFunctionVAToRemove);
|
| + void adjustFromBlendOpts(const GrDrawState& ds, GrProgramDesc::DescInfo*,
|
| + int* firstColorStageIdx, int* firstCoverageStageIdx,
|
| + uint8_t* fixedFunctionVAToRemove);
|
|
|
| /**
|
| * Loop over the effect stages to determine various info like what data they will read and what
|
| * shaders they require.
|
| */
|
| - void getStageStats(const GrDrawState& ds, int firstColorStageIdx, int firstCoverageStageIdx);
|
| + void getStageStats(const GrDrawState& ds, int firstColorStageIdx, int firstCoverageStageIdx,
|
| + GrProgramDesc::DescInfo*);
|
|
|
| /**
|
| * Calculates the primary and secondary output types of the shader. For certain output types
|
| @@ -420,7 +358,8 @@ private:
|
| * blend coeffs will represent those used by backend API.
|
| */
|
| void setOutputStateInfo(const GrDrawState& ds, const GrDrawTargetCaps&,
|
| - int firstCoverageStageIdx, bool* separateCoverageFromColor);
|
| + int firstCoverageStageIdx, GrProgramDesc::DescInfo*,
|
| + bool* separateCoverageFromColor);
|
|
|
| bool isEqual(const GrOptDrawState& that) const;
|
|
|
| @@ -448,27 +387,11 @@ private:
|
| // This function is equivalent to the offset into fFragmentStages where coverage stages begin.
|
| int fNumColorStages;
|
|
|
| - // This is simply a different representation of info in fVertexAttribs and thus does
|
| - // not need to be compared in op==.
|
| - int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt];
|
| -
|
| - // These flags are needed to protect the code from creating an unused uniform color/coverage
|
| - // which will cause shader compiler errors.
|
| - bool fInputColorIsUsed;
|
| - bool fInputCoverageIsUsed;
|
| -
|
| - // These flags give aggregated info on the effect stages that are used when building programs.
|
| - bool fReadsDst;
|
| - bool fReadsFragPosition;
|
| - bool fRequiresLocalCoordAttrib;
|
| -
|
| SkAutoSTArray<4, GrVertexAttrib> fOptVA;
|
|
|
| BlendOptFlags fBlendOptFlags;
|
|
|
| - // Fragment shader color outputs
|
| - PrimaryOutputType fPrimaryOutputType : 8;
|
| - SecondaryOutputType fSecondaryOutputType : 8;
|
| + GrProgramDesc fDesc;
|
|
|
| typedef SkRefCnt INHERITED;
|
| };
|
|
|