| Index: src/gpu/GrDrawState.h
|
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h
|
| index 11a5af9870b2056d509b5ea6048574ab48fbbc23..d2c60ea0724b1a57bddd30eacb02ceaa71b5df73 100644
|
| --- a/src/gpu/GrDrawState.h
|
| +++ b/src/gpu/GrDrawState.h
|
| @@ -103,8 +103,8 @@ public:
|
| this->setVertexAttribs(A, count);
|
| }
|
|
|
| - const GrVertexAttrib* getVertexAttribs() const { return fCommon.fVAPtr; }
|
| - int getVertexAttribCount() const { return fCommon.fVACount; }
|
| + const GrVertexAttrib* getVertexAttribs() const { return fVAPtr; }
|
| + int getVertexAttribCount() const { return fVACount; }
|
|
|
| size_t getVertexSize() const;
|
|
|
| @@ -121,26 +121,26 @@ public:
|
| */
|
|
|
| int positionAttributeIndex() const {
|
| - return fCommon.fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding];
|
| + return fFixedFunctionVertexAttribIndices[kPosition_GrVertexAttribBinding];
|
| }
|
| int localCoordAttributeIndex() const {
|
| - return fCommon.fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| + return fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| }
|
| int colorVertexAttributeIndex() const {
|
| - return fCommon.fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| + return fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| }
|
| int coverageVertexAttributeIndex() const {
|
| - return fCommon.fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| + return fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| }
|
|
|
| bool hasLocalCoordAttribute() const {
|
| - return -1 != fCommon.fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| + return -1 != fFixedFunctionVertexAttribIndices[kLocalCoord_GrVertexAttribBinding];
|
| }
|
| bool hasColorVertexAttribute() const {
|
| - return -1 != fCommon.fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| + return -1 != fFixedFunctionVertexAttribIndices[kColor_GrVertexAttribBinding];
|
| }
|
| bool hasCoverageVertexAttribute() const {
|
| - return -1 != fCommon.fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| + return -1 != fFixedFunctionVertexAttribIndices[kCoverage_GrVertexAttribBinding];
|
| }
|
|
|
| bool validateVertexAttribs() const;
|
| @@ -153,8 +153,8 @@ public:
|
| AutoVertexAttribRestore(GrDrawState* drawState) {
|
| SkASSERT(NULL != drawState);
|
| fDrawState = drawState;
|
| - fVAPtr = drawState->fCommon.fVAPtr;
|
| - fVACount = drawState->fCommon.fVACount;
|
| + fVAPtr = drawState->fVAPtr;
|
| + fVACount = drawState->fVACount;
|
| fDrawState->setDefaultVertexAttribs();
|
| }
|
|
|
| @@ -249,9 +249,9 @@ public:
|
| *
|
| * @param color the color to set.
|
| */
|
| - void setColor(GrColor color) { fCommon.fColor = color; }
|
| + void setColor(GrColor color) { fColor = color; }
|
|
|
| - GrColor getColor() const { return fCommon.fColor; }
|
| + GrColor getColor() const { return fColor; }
|
|
|
| /**
|
| * Sets the color to be used for the next draw to be
|
| @@ -307,15 +307,15 @@ public:
|
| * coverage is ignored when per-vertex coverage is provided.
|
| */
|
| void setCoverage(uint8_t coverage) {
|
| - fCommon.fCoverage = GrColorPackRGBA(coverage, coverage, coverage, coverage);
|
| + fCoverage = GrColorPackRGBA(coverage, coverage, coverage, coverage);
|
| }
|
|
|
| uint8_t getCoverage() const {
|
| - return GrColorUnpackR(fCommon.fCoverage);
|
| + return GrColorUnpackR(fCoverage);
|
| }
|
|
|
| GrColor getCoverageColor() const {
|
| - return fCommon.fCoverage;
|
| + return fCoverage;
|
| }
|
|
|
| /// @}
|
| @@ -451,8 +451,8 @@ public:
|
| * @param dstCoef coefficient applied to the dst color.
|
| */
|
| void setBlendFunc(GrBlendCoeff srcCoeff, GrBlendCoeff dstCoeff) {
|
| - fCommon.fSrcBlend = srcCoeff;
|
| - fCommon.fDstBlend = dstCoeff;
|
| + fSrcBlend = srcCoeff;
|
| + fDstBlend = dstCoeff;
|
| #ifdef SK_DEBUG
|
| if (GrBlendCoeffRefsDst(dstCoeff)) {
|
| GrPrintf("Unexpected dst blend coeff. Won't work correctly with coverage stages.\n");
|
| @@ -463,13 +463,13 @@ public:
|
| #endif
|
| }
|
|
|
| - GrBlendCoeff getSrcBlendCoeff() const { return fCommon.fSrcBlend; }
|
| - GrBlendCoeff getDstBlendCoeff() const { return fCommon.fDstBlend; }
|
| + GrBlendCoeff getSrcBlendCoeff() const { return fSrcBlend; }
|
| + GrBlendCoeff getDstBlendCoeff() const { return fDstBlend; }
|
|
|
| void getDstBlendCoeff(GrBlendCoeff* srcBlendCoeff,
|
| GrBlendCoeff* dstBlendCoeff) const {
|
| - *srcBlendCoeff = fCommon.fSrcBlend;
|
| - *dstBlendCoeff = fCommon.fDstBlend;
|
| + *srcBlendCoeff = fSrcBlend;
|
| + *dstBlendCoeff = fDstBlend;
|
| }
|
|
|
| /**
|
| @@ -482,13 +482,13 @@ public:
|
| *
|
| * @param constant the constant to set
|
| */
|
| - void setBlendConstant(GrColor constant) { fCommon.fBlendConstant = constant; }
|
| + void setBlendConstant(GrColor constant) { fBlendConstant = constant; }
|
|
|
| /**
|
| * Retrieves the last value set by setBlendConstant()
|
| * @return the blending constant value
|
| */
|
| - GrColor getBlendConstant() const { return fCommon.fBlendConstant; }
|
| + GrColor getBlendConstant() const { return fBlendConstant; }
|
|
|
| /**
|
| * Determines whether multiplying the computed per-pixel color by the pixel's fractional
|
| @@ -560,7 +560,7 @@ public:
|
| * Retrieves the current view matrix
|
| * @return the current view matrix.
|
| */
|
| - const SkMatrix& getViewMatrix() const { return fCommon.fViewMatrix; }
|
| + const SkMatrix& getViewMatrix() const { return fViewMatrix; }
|
|
|
| /**
|
| * Retrieves the inverse of the current view matrix.
|
| @@ -575,7 +575,7 @@ public:
|
| // TODO: determine whether we really need to leave matrix unmodified
|
| // at call sites when inversion fails.
|
| SkMatrix inverse;
|
| - if (fCommon.fViewMatrix.invert(&inverse)) {
|
| + if (fViewMatrix.invert(&inverse)) {
|
| if (matrix) {
|
| *matrix = inverse;
|
| }
|
| @@ -692,19 +692,19 @@ public:
|
| * @param settings the stencil settings to use.
|
| */
|
| void setStencil(const GrStencilSettings& settings) {
|
| - fCommon.fStencilSettings = settings;
|
| + fStencilSettings = settings;
|
| }
|
|
|
| /**
|
| * Shortcut to disable stencil testing and ops.
|
| */
|
| void disableStencil() {
|
| - fCommon.fStencilSettings.setDisabled();
|
| + fStencilSettings.setDisabled();
|
| }
|
|
|
| - const GrStencilSettings& getStencil() const { return fCommon.fStencilSettings; }
|
| + const GrStencilSettings& getStencil() const { return fStencilSettings; }
|
|
|
| - GrStencilSettings* stencil() { return &fCommon.fStencilSettings; }
|
| + GrStencilSettings* stencil() { return &fStencilSettings; }
|
|
|
| /// @}
|
|
|
| @@ -753,7 +753,7 @@ public:
|
| };
|
|
|
| void resetStateFlags() {
|
| - fCommon.fFlagBits = 0;
|
| + fFlagBits = 0;
|
| }
|
|
|
| /**
|
| @@ -762,7 +762,7 @@ public:
|
| * @param stateBits bitfield of StateBits specifying the states to enable
|
| */
|
| void enableState(uint32_t stateBits) {
|
| - fCommon.fFlagBits |= stateBits;
|
| + fFlagBits |= stateBits;
|
| }
|
|
|
| /**
|
| @@ -771,7 +771,7 @@ public:
|
| * @param stateBits bitfield of StateBits specifying the states to disable
|
| */
|
| void disableState(uint32_t stateBits) {
|
| - fCommon.fFlagBits &= ~(stateBits);
|
| + fFlagBits &= ~(stateBits);
|
| }
|
|
|
| /**
|
| @@ -789,27 +789,27 @@ public:
|
| }
|
|
|
| bool isDitherState() const {
|
| - return 0 != (fCommon.fFlagBits & kDither_StateBit);
|
| + return 0 != (fFlagBits & kDither_StateBit);
|
| }
|
|
|
| bool isHWAntialiasState() const {
|
| - return 0 != (fCommon.fFlagBits & kHWAntialias_StateBit);
|
| + return 0 != (fFlagBits & kHWAntialias_StateBit);
|
| }
|
|
|
| bool isClipState() const {
|
| - return 0 != (fCommon.fFlagBits & kClip_StateBit);
|
| + return 0 != (fFlagBits & kClip_StateBit);
|
| }
|
|
|
| bool isColorWriteDisabled() const {
|
| - return 0 != (fCommon.fFlagBits & kNoColorWrites_StateBit);
|
| + return 0 != (fFlagBits & kNoColorWrites_StateBit);
|
| }
|
|
|
| bool isCoverageDrawing() const {
|
| - return 0 != (fCommon.fFlagBits & kCoverageDrawing_StateBit);
|
| + return 0 != (fFlagBits & kCoverageDrawing_StateBit);
|
| }
|
|
|
| bool isStateFlagEnabled(uint32_t stateBit) const {
|
| - return 0 != (stateBit & fCommon.fFlagBits);
|
| + return 0 != (stateBit & fFlagBits);
|
| }
|
|
|
| /// @}
|
| @@ -832,7 +832,7 @@ public:
|
| */
|
| void setDrawFace(DrawFace face) {
|
| SkASSERT(kInvalid_DrawFace != face);
|
| - fCommon.fDrawFace = face;
|
| + fDrawFace = face;
|
| }
|
|
|
| /**
|
| @@ -840,39 +840,66 @@ public:
|
| * or both faces.
|
| * @return the current draw face(s).
|
| */
|
| - DrawFace getDrawFace() const { return fCommon.fDrawFace; }
|
| + DrawFace getDrawFace() const { return fDrawFace; }
|
|
|
| /// @}
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
|
|
| - bool operator ==(const GrDrawState& s) const {
|
| - if (fRenderTarget.get() != s.fRenderTarget.get() ||
|
| - fColorStages.count() != s.fColorStages.count() ||
|
| - fCoverageStages.count() != s.fCoverageStages.count() ||
|
| - fCommon != s.fCommon) {
|
| + bool operator ==(const GrDrawState& that) const {
|
| + if (fRenderTarget.get() != that.fRenderTarget.get() ||
|
| + fColorStages.count() != that.fColorStages.count() ||
|
| + fCoverageStages.count() != that.fCoverageStages.count() ||
|
| + fColor != that.fColor ||
|
| + !fViewMatrix.cheapEqualTo(that.fViewMatrix) ||
|
| + fSrcBlend != that.fSrcBlend ||
|
| + fDstBlend != that.fDstBlend ||
|
| + fBlendConstant != that.fBlendConstant ||
|
| + fFlagBits != that.fFlagBits ||
|
| + fVACount != that.fVACount ||
|
| + memcmp(fVAPtr, that.fVAPtr, fVACount * sizeof(GrVertexAttrib)) ||
|
| + fStencilSettings != that.fStencilSettings ||
|
| + fCoverage != that.fCoverage ||
|
| + fDrawFace != that.fDrawFace) {
|
| return false;
|
| }
|
| for (int i = 0; i < fColorStages.count(); i++) {
|
| - if (fColorStages[i] != s.fColorStages[i]) {
|
| + if (fColorStages[i] != that.fColorStages[i]) {
|
| return false;
|
| }
|
| }
|
| for (int i = 0; i < fCoverageStages.count(); i++) {
|
| - if (fCoverageStages[i] != s.fCoverageStages[i]) {
|
| + if (fCoverageStages[i] != that.fCoverageStages[i]) {
|
| return false;
|
| }
|
| }
|
| + SkASSERT(0 == memcmp(fFixedFunctionVertexAttribIndices,
|
| + that.fFixedFunctionVertexAttribIndices,
|
| + sizeof(fFixedFunctionVertexAttribIndices)));
|
| return true;
|
| }
|
| bool operator !=(const GrDrawState& s) const { return !(*this == s); }
|
|
|
| - GrDrawState& operator= (const GrDrawState& s) {
|
| + GrDrawState& operator= (const GrDrawState& that) {
|
| SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages());
|
| - this->setRenderTarget(s.fRenderTarget.get());
|
| - fCommon = s.fCommon;
|
| - fColorStages = s.fColorStages;
|
| - fCoverageStages = s.fCoverageStages;
|
| + this->setRenderTarget(that.fRenderTarget.get());
|
| + fColor = that.fColor;
|
| + fViewMatrix = that.fViewMatrix;
|
| + fSrcBlend = that.fSrcBlend;
|
| + fDstBlend = that.fDstBlend;
|
| + fBlendConstant = that.fBlendConstant;
|
| + fFlagBits = that.fFlagBits;
|
| + fVACount = that.fVACount;
|
| + fVAPtr = that.fVAPtr;
|
| + fStencilSettings = that.fStencilSettings;
|
| + fCoverage = that.fCoverage;
|
| + fDrawFace = that.fDrawFace;
|
| + fColorStages = that.fColorStages;
|
| + fCoverageStages = that.fCoverageStages;
|
| +
|
| + memcpy(fFixedFunctionVertexAttribIndices,
|
| + that.fFixedFunctionVertexAttribIndices,
|
| + sizeof(fFixedFunctionVertexAttribIndices));
|
| return *this;
|
| }
|
|
|
| @@ -887,67 +914,44 @@ private:
|
|
|
| this->setDefaultVertexAttribs();
|
|
|
| - fCommon.fColor = 0xffffffff;
|
| + fColor = 0xffffffff;
|
| if (NULL == initialViewMatrix) {
|
| - fCommon.fViewMatrix.reset();
|
| + fViewMatrix.reset();
|
| } else {
|
| - fCommon.fViewMatrix = *initialViewMatrix;
|
| + fViewMatrix = *initialViewMatrix;
|
| }
|
| - fCommon.fSrcBlend = kOne_GrBlendCoeff;
|
| - fCommon.fDstBlend = kZero_GrBlendCoeff;
|
| - fCommon.fBlendConstant = 0x0;
|
| - fCommon.fFlagBits = 0x0;
|
| - fCommon.fStencilSettings.setDisabled();
|
| - fCommon.fCoverage = 0xffffffff;
|
| - fCommon.fDrawFace = kBoth_DrawFace;
|
| - }
|
| -
|
| - /** This will be removed soon. The fields will become members of GrDrawState. */
|
| - struct CommonState {
|
| - // These fields are roughly sorted by decreasing likelihood of being different in op==
|
| - GrColor fColor;
|
| - SkMatrix fViewMatrix;
|
| - GrBlendCoeff fSrcBlend;
|
| - GrBlendCoeff fDstBlend;
|
| - GrColor fBlendConstant;
|
| - uint32_t fFlagBits;
|
| - const GrVertexAttrib* fVAPtr;
|
| - int fVACount;
|
| - GrStencilSettings fStencilSettings;
|
| - GrColor fCoverage;
|
| - DrawFace fDrawFace;
|
| -
|
| - // This is simply a different representation of info in fVertexAttribs and thus does
|
| - // not need to be compared in op==.
|
| - int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt];
|
| -
|
| - bool operator== (const CommonState& other) const {
|
| - bool result = fColor == other.fColor &&
|
| - fViewMatrix.cheapEqualTo(other.fViewMatrix) &&
|
| - fSrcBlend == other.fSrcBlend &&
|
| - fDstBlend == other.fDstBlend &&
|
| - fBlendConstant == other.fBlendConstant &&
|
| - fFlagBits == other.fFlagBits &&
|
| - fVACount == other.fVACount &&
|
| - !memcmp(fVAPtr, other.fVAPtr, fVACount * sizeof(GrVertexAttrib)) &&
|
| - fStencilSettings == other.fStencilSettings &&
|
| - fCoverage == other.fCoverage &&
|
| - fDrawFace == other.fDrawFace;
|
| - SkASSERT(!result || 0 == memcmp(fFixedFunctionVertexAttribIndices,
|
| - other.fFixedFunctionVertexAttribIndices,
|
| - sizeof(fFixedFunctionVertexAttribIndices)));
|
| - return result;
|
| - }
|
| - bool operator!= (const CommonState& other) const { return !(*this == other); }
|
| - };
|
| + fSrcBlend = kOne_GrBlendCoeff;
|
| + fDstBlend = kZero_GrBlendCoeff;
|
| + fBlendConstant = 0x0;
|
| + fFlagBits = 0x0;
|
| + fStencilSettings.setDisabled();
|
| + fCoverage = 0xffffffff;
|
| + fDrawFace = kBoth_DrawFace;
|
| + }
|
|
|
| +
|
| + // These fields are roughly sorted by decreasing likelihood of being different in op==
|
| SkAutoTUnref<GrRenderTarget> fRenderTarget;
|
| - CommonState fCommon;
|
| + GrColor fColor;
|
| + SkMatrix fViewMatrix;
|
| + GrBlendCoeff fSrcBlend;
|
| + GrBlendCoeff fDstBlend;
|
| + GrColor fBlendConstant;
|
| + uint32_t fFlagBits;
|
| + const GrVertexAttrib* fVAPtr;
|
| + int fVACount;
|
| + GrStencilSettings fStencilSettings;
|
| + GrColor fCoverage;
|
| + DrawFace fDrawFace;
|
|
|
| typedef SkSTArray<4, GrEffectStage> EffectStageArray;
|
| EffectStageArray fColorStages;
|
| EffectStageArray fCoverageStages;
|
|
|
| + // This is simply a different representation of info in fVertexAttribs and thus does
|
| + // not need to be compared in op==.
|
| + int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindingCnt];
|
| +
|
| // Some of the auto restore objects assume that no effects are removed during their lifetime.
|
| // This is used to assert that this condition holds.
|
| SkDEBUGCODE(int fBlockEffectRemovalCnt;)
|
|
|