| Index: src/gpu/GrOptDrawState.cpp
|
| diff --git a/src/gpu/GrOptDrawState.cpp b/src/gpu/GrOptDrawState.cpp
|
| index 8653a8bd2c480ed528d088c57a375f07eb04f059..98a5689d534b72425a5df85f6409b64fd0f11dc6 100644
|
| --- a/src/gpu/GrOptDrawState.cpp
|
| +++ b/src/gpu/GrOptDrawState.cpp
|
| @@ -15,7 +15,9 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
|
| BlendOptFlags blendOptFlags,
|
| GrBlendCoeff optSrcCoeff,
|
| GrBlendCoeff optDstCoeff,
|
| - const GrDrawTargetCaps& caps) : INHERITED(drawState) {
|
| + const GrDrawTargetCaps& caps) {
|
| + fRenderTarget.set(SkSafeRef(drawState.getRenderTarget()),
|
| + GrIORef::kWrite_IOType);
|
| fColor = drawState.getColor();
|
| fCoverage = drawState.getCoverage();
|
| fViewMatrix = drawState.getViewMatrix();
|
| @@ -25,14 +27,14 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
|
| fVACount = drawState.getVertexAttribCount();
|
| fVAStride = drawState.getVertexStride();
|
| fStencilSettings = drawState.getStencil();
|
| - fDrawFace = drawState.getDrawFace();
|
| + fDrawFace = (DrawFace)drawState.getDrawFace();
|
| fBlendOptFlags = blendOptFlags;
|
| fSrcBlend = optSrcCoeff;
|
| fDstBlend = optDstCoeff;
|
|
|
| memcpy(fFixedFunctionVertexAttribIndices,
|
| - drawState.getFixedFunctionVertexAttribIndices(),
|
| - sizeof(fFixedFunctionVertexAttribIndices));
|
| + drawState.getFixedFunctionVertexAttribIndices(),
|
| + sizeof(fFixedFunctionVertexAttribIndices));
|
|
|
|
|
| fInputColorIsUsed = true;
|
| @@ -262,7 +264,76 @@ void GrOptDrawState::getStageStats() {
|
| }
|
| }
|
|
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +
|
| bool GrOptDrawState::operator== (const GrOptDrawState& that) const {
|
| return this->isEqual(that);
|
| }
|
|
|
| +bool GrOptDrawState::isEqual(const GrOptDrawState& that) const {
|
| + bool usingVertexColors = this->hasColorVertexAttribute();
|
| + if (!usingVertexColors && this->fColor != that.fColor) {
|
| + return false;
|
| + }
|
| +
|
| + if (this->getRenderTarget() != that.getRenderTarget() ||
|
| + this->fColorStages.count() != that.fColorStages.count() ||
|
| + this->fCoverageStages.count() != that.fCoverageStages.count() ||
|
| + !this->fViewMatrix.cheapEqualTo(that.fViewMatrix) ||
|
| + this->fSrcBlend != that.fSrcBlend ||
|
| + this->fDstBlend != that.fDstBlend ||
|
| + this->fBlendConstant != that.fBlendConstant ||
|
| + this->fFlagBits != that.fFlagBits ||
|
| + this->fVACount != that.fVACount ||
|
| + this->fVAStride != that.fVAStride ||
|
| + memcmp(this->fVAPtr, that.fVAPtr, this->fVACount * sizeof(GrVertexAttrib)) ||
|
| + this->fStencilSettings != that.fStencilSettings ||
|
| + this->fDrawFace != that.fDrawFace ||
|
| + this->fInputColorIsUsed != that.fInputColorIsUsed ||
|
| + this->fInputCoverageIsUsed != that.fInputCoverageIsUsed ||
|
| + this->fReadsDst != that.fReadsDst ||
|
| + this->fReadsFragPosition != that.fReadsFragPosition ||
|
| + this->fRequiresLocalCoordAttrib != that.fRequiresLocalCoordAttrib ||
|
| + this->fPrimaryOutputType != that.fPrimaryOutputType ||
|
| + this->fSecondaryOutputType != that.fSecondaryOutputType) {
|
| + return false;
|
| + }
|
| +
|
| + bool usingVertexCoverage = this->hasCoverageVertexAttribute();
|
| + if (!usingVertexCoverage && this->fCoverage != that.fCoverage) {
|
| + return false;
|
| + }
|
| +
|
| + bool explicitLocalCoords = this->hasLocalCoordAttribute();
|
| + if (this->hasGeometryProcessor()) {
|
| + if (!that.hasGeometryProcessor()) {
|
| + return false;
|
| + } else if (!GrProcessorStage::AreCompatible(*this->getGeometryProcessor(),
|
| + *that.getGeometryProcessor(),
|
| + explicitLocalCoords)) {
|
| + return false;
|
| + }
|
| + } else if (that.hasGeometryProcessor()) {
|
| + return false;
|
| + }
|
| +
|
| + for (int i = 0; i < this->numColorStages(); i++) {
|
| + if (!GrProcessorStage::AreCompatible(this->getColorStage(i), that.getColorStage(i),
|
| + explicitLocalCoords)) {
|
| + return false;
|
| + }
|
| + }
|
| + for (int i = 0; i < this->numCoverageStages(); i++) {
|
| + if (!GrProcessorStage::AreCompatible(this->getCoverageStage(i), that.getCoverageStage(i),
|
| + explicitLocalCoords)) {
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + SkASSERT(0 == memcmp(this->fFixedFunctionVertexAttribIndices,
|
| + that.fFixedFunctionVertexAttribIndices,
|
| + sizeof(this->fFixedFunctionVertexAttribIndices)));
|
| +
|
| + return true;
|
| +}
|
| +
|
|
|