Chromium Code Reviews| Index: src/gpu/GrDrawState.h |
| diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h |
| index b894cb5a2922a9c21e766efb019ccc41789ba6b8..334cfadc91fd058efc59a64dc520cef9245653f0 100644 |
| --- a/src/gpu/GrDrawState.h |
| +++ b/src/gpu/GrDrawState.h |
| @@ -876,43 +876,58 @@ public: |
| /////////////////////////////////////////////////////////////////////////// |
| - 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; |
| + /** Return type for CombineIfPossible. */ |
| + enum CombinedState { |
| + /** The GrDrawStates cannot be combined. */ |
| + kIncompatible_CombinedState, |
| + /** Either draw state can be used in place of the other. */ |
| + kAOrB_CombinedState, |
| + /** Use the first draw state. */ |
| + kA_CombinedState, |
| + /** Use the second draw state. */ |
| + kB_CombinedState, |
| + }; |
| + |
|
robertphillips
2014/08/04 21:48:32
This function
bsalomon
2014/08/05 14:04:30
Done.
|
| + /** This functions determines whether the GrDrawStates used for two draws can be combined into |
| + a single GrDrawState. This is used to avoid storing redundant GrDrawStates and to determine |
|
robertphillips
2014/08/04 21:48:32
overlength by a char
bsalomon
2014/08/05 14:04:29
Done.
|
| + if draws can be batched. The return value indicates whether combining is possible and, if so, |
| + which of the two inputs should be used. */ |
| + static CombinedState CombineIfPossible(const GrDrawState& a, const GrDrawState& b) { |
| + if (a.fRenderTarget.get() != b.fRenderTarget.get() || |
| + a.fColorStages.count() != b.fColorStages.count() || |
| + a.fCoverageStages.count() != b.fCoverageStages.count() || |
| + a.fColor != b.fColor || |
| + !a.fViewMatrix.cheapEqualTo(b.fViewMatrix) || |
| + a.fSrcBlend != b.fSrcBlend || |
| + a.fDstBlend != b.fDstBlend || |
| + a.fBlendConstant != b.fBlendConstant || |
| + a.fFlagBits != b.fFlagBits || |
| + a.fVACount != b.fVACount || |
| + memcmp(a.fVAPtr, b.fVAPtr, a.fVACount * sizeof(GrVertexAttrib)) || |
| + a.fStencilSettings != b.fStencilSettings || |
| + a.fCoverage != b.fCoverage || |
| + a.fDrawFace != b.fDrawFace) { |
| + return kIncompatible_CombinedState; |
| } |
| - bool explicitLocalCoords = this->hasLocalCoordAttribute(); |
| - for (int i = 0; i < fColorStages.count(); i++) { |
| - if (!GrEffectStage::AreCompatible(fColorStages[i], that.fColorStages[i], |
| + bool explicitLocalCoords = a.hasLocalCoordAttribute(); |
| + for (int i = 0; i < a.fColorStages.count(); i++) { |
| + if (!GrEffectStage::AreCompatible(a.fColorStages[i], b.fColorStages[i], |
| explicitLocalCoords)) { |
| - return false; |
| + return kIncompatible_CombinedState; |
| } |
| } |
| - for (int i = 0; i < fCoverageStages.count(); i++) { |
| - if (!GrEffectStage::AreCompatible(fCoverageStages[i], that.fCoverageStages[i], |
| + for (int i = 0; i < a.fCoverageStages.count(); i++) { |
| + if (!GrEffectStage::AreCompatible(a.fCoverageStages[i], b.fCoverageStages[i], |
| explicitLocalCoords)) { |
| - return false; |
| + return kIncompatible_CombinedState; |
| } |
| } |
| - SkASSERT(0 == memcmp(fFixedFunctionVertexAttribIndices, |
| - that.fFixedFunctionVertexAttribIndices, |
| - sizeof(fFixedFunctionVertexAttribIndices))); |
| - return true; |
| + SkASSERT(0 == memcmp(a.fFixedFunctionVertexAttribIndices, |
| + b.fFixedFunctionVertexAttribIndices, |
| + sizeof(a.fFixedFunctionVertexAttribIndices))); |
| + return kAOrB_CombinedState; |
| } |
| - bool operator !=(const GrDrawState& s) const { return !(*this == s); } |
| GrDrawState& operator= (const GrDrawState& that) { |
| SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numTotalStages()); |