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

Unified Diff: src/gpu/GrOptDrawState.cpp

Issue 699023003: remove separate color from coverage (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 1 month 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/gl/GrGLProgramDesc.cpp » ('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 c764b432a17abcff1e4dc6f0b25ce13ada6ff0eb..79eef0c02499153e642c084e62ea706db0ebcacb 100644
--- a/src/gpu/GrOptDrawState.cpp
+++ b/src/gpu/GrOptDrawState.cpp
@@ -44,7 +44,6 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
int firstColorStageIdx = 0;
int firstCoverageStageIdx = 0;
- bool separateCoverageFromColor;
uint8_t fixedFunctionVAToRemove = 0;
@@ -58,8 +57,6 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
this->removeFixedFunctionVertexAttribs(fixedFunctionVAToRemove, &descInfo);
}
this->getStageStats(drawState, firstColorStageIdx, firstCoverageStageIdx, &descInfo);
- this->setOutputStateInfo(drawState, *gpu->caps(), firstCoverageStageIdx, &descInfo,
- &separateCoverageFromColor);
// Copy GeometryProcesssor from DS or ODS
if (drawState.hasGeometryProcessor()) {
@@ -86,11 +83,10 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
if (firstCoverageStageIdx < drawState.numCoverageStages()) {
fFragmentStages.push_back_n(drawState.numCoverageStages() - firstCoverageStageIdx,
&drawState.getCoverageStage(firstCoverageStageIdx));
- if (!separateCoverageFromColor) {
- fNumColorStages = fFragmentStages.count();
- }
}
+ this->setOutputStateInfo(drawState, *gpu->caps(), &descInfo);
+
// now create a key
gpu->buildProgramDesc(*this, descInfo, drawType, dstCopy, &fDesc);
};
@@ -120,42 +116,35 @@ GrOptDrawState* GrOptDrawState::Create(const GrDrawState& drawState,
void GrOptDrawState::setOutputStateInfo(const GrDrawState& ds,
const GrDrawTargetCaps& caps,
- int firstCoverageStageIdx,
- GrProgramDesc::DescInfo* descInfo,
- bool* separateCoverageFromColor) {
+ GrProgramDesc::DescInfo* descInfo) {
// Set this default and then possibly change our mind if there is coverage.
descInfo->fPrimaryOutputType = GrProgramDesc::kModulate_PrimaryOutputType;
descInfo->fSecondaryOutputType = GrProgramDesc::kNone_SecondaryOutputType;
- // If we do have coverage determine whether it matters.
- *separateCoverageFromColor = this->hasGeometryProcessor();
- if (!this->isCoverageDrawing() &&
- (ds.numCoverageStages() - firstCoverageStageIdx > 0 ||
- ds.hasGeometryProcessor() ||
- descInfo->hasCoverageVertexAttribute())) {
-
+ // If we do have coverage determine whether it matters. Dual source blending is expensive so
+ // we don't do it if we are doing coverage drawing. If we aren't then We always do dual source
+ // blending if we have any effective coverage stages OR the geometry processor doesn't emits
+ // solid coverage.
+ // TODO move the gp logic into the GP base class
+ if (!this->isCoverageDrawing() && !ds.hasSolidCoverage()) {
if (caps.dualSourceBlendingSupport()) {
if (kZero_GrBlendCoeff == fDstBlend) {
// write the coverage value to second color
descInfo->fSecondaryOutputType = GrProgramDesc::kCoverage_SecondaryOutputType;
- *separateCoverageFromColor = true;
fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff;
} else if (kSA_GrBlendCoeff == fDstBlend) {
// SA dst coeff becomes 1-(1-SA)*coverage when dst is partially covered.
descInfo->fSecondaryOutputType = GrProgramDesc::kCoverageISA_SecondaryOutputType;
- *separateCoverageFromColor = true;
fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff;
} else if (kSC_GrBlendCoeff == fDstBlend) {
// SA dst coeff becomes 1-(1-SA)*coverage when dst is partially covered.
descInfo->fSecondaryOutputType = GrProgramDesc::kCoverageISC_SecondaryOutputType;
- *separateCoverageFromColor = true;
fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff;
}
} else if (descInfo->fReadsDst &&
kOne_GrBlendCoeff == fSrcBlend &&
kZero_GrBlendCoeff == fDstBlend) {
descInfo->fPrimaryOutputType = GrProgramDesc::kCombineWithDst_PrimaryOutputType;
- *separateCoverageFromColor = true;
}
}
}
« no previous file with comments | « src/gpu/GrOptDrawState.h ('k') | src/gpu/gl/GrGLProgramDesc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698