Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: src/gpu/GrOptDrawState.cpp

Issue 504203004: Attach GrOptDrawState into shader building pipeline (Closed) Base URL: https://skia.googlesource.com/skia.git@opt2
Patch Set: Rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/GrOptDrawState.h ('k') | src/gpu/GrRODrawState.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrOptDrawState.cpp
diff --git a/src/gpu/GrOptDrawState.cpp b/src/gpu/GrOptDrawState.cpp
index 83546ba3b789aa556caefafd166baee52b38bef7..5f352966b8a3441d5faf603c6234788dc2e23db6 100644
--- a/src/gpu/GrOptDrawState.cpp
+++ b/src/gpu/GrOptDrawState.cpp
@@ -9,7 +9,10 @@
#include "GrDrawState.h"
-GrOptDrawState::GrOptDrawState(const GrDrawState& drawState) : INHERITED(drawState) {
+GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
+ BlendOptFlags blendOptFlags,
+ GrBlendCoeff optSrcCoeff,
+ GrBlendCoeff optDstCoeff) : INHERITED(drawState) {
fColor = drawState.getColor();
fCoverage = drawState.getCoverage();
fViewMatrix = drawState.getViewMatrix();
@@ -20,13 +23,15 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState) : INHERITED(drawSta
fVAStride = drawState.getVertexStride();
fStencilSettings = drawState.getStencil();
fDrawFace = drawState.getDrawFace();
-
- fBlendOptFlags = drawState.getBlendOpts(false, &fSrcBlend, &fDstBlend);
+ fBlendOptFlags = blendOptFlags;
+ fSrcBlend = optSrcCoeff;
+ fDstBlend = optDstCoeff;
memcpy(fFixedFunctionVertexAttribIndices,
drawState.getFixedFunctionVertexAttribIndices(),
sizeof(fFixedFunctionVertexAttribIndices));
+
fInputColorIsUsed = true;
fInputCoverageIsUsed = true;
@@ -38,8 +43,40 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState) : INHERITED(drawSta
this->copyEffectiveColorStages(drawState);
this->copyEffectiveCoverageStages(drawState);
+ this->adjustFromBlendOpts();
};
+void GrOptDrawState::adjustFromBlendOpts() {
+
+ switch (fBlendOptFlags) {
+ case kNone_BlendOpt:
+ case kSkipDraw_BlendOptFlag:
+ break;
+ case kCoverageAsAlpha_BlendOptFlag:
+ fFlagBits |= kCoverageDrawing_StateBit;
+ break;
+ case kEmitCoverage_BlendOptFlag:
+ fColor = 0xffffffff;
+ fInputColorIsUsed = true;
+ fColorStages.reset();
+ this->removeFixedFunctionVertexAttribs(0x1 << kColor_GrVertexAttribBinding);
+ break;
+ case kEmitTransBlack_BlendOptFlag:
+ fColor = 0;
+ fCoverage = 0xff;
+ fInputColorIsUsed = true;
+ fInputCoverageIsUsed = true;
+ fColorStages.reset();
+ fCoverageStages.reset();
+ this->removeFixedFunctionVertexAttribs(0x1 << kColor_GrVertexAttribBinding |
+ 0x1 << kCoverage_GrVertexAttribBinding);
+ break;
+ default:
+ SkFAIL("Unknown BlendOptFlag");
+
+ }
+}
+
void GrOptDrawState::removeFixedFunctionVertexAttribs(uint8_t removeVAFlag) {
int numToRemove = 0;
uint8_t maskCheck = 0x1;
@@ -50,6 +87,7 @@ void GrOptDrawState::removeFixedFunctionVertexAttribs(uint8_t removeVAFlag) {
}
maskCheck <<= 1;
}
+
fOptVA.reset(fVACount - numToRemove);
GrVertexAttrib* dst = fOptVA.get();
@@ -64,9 +102,9 @@ void GrOptDrawState::removeFixedFunctionVertexAttribs(uint8_t removeVAFlag) {
fFixedFunctionVertexAttribIndices[currAttrib.fBinding] = -1;
continue;
}
+ fFixedFunctionVertexAttribIndices[currAttrib.fBinding] = newIdx;
}
memcpy(dst, src, sizeof(GrVertexAttrib));
- fFixedFunctionVertexAttribIndices[currAttrib.fBinding] = newIdx;
++newIdx;
++dst;
}
« no previous file with comments | « src/gpu/GrOptDrawState.h ('k') | src/gpu/GrRODrawState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698