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

Unified Diff: src/gpu/GrOptDrawState.cpp

Issue 746423007: Draft change to start pulling uniform color into GP (Closed) Base URL: https://skia.googlesource.com/skia.git@no_factories
Patch Set: rebase Created 6 years 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/GrOvalRenderer.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 93184b4daa4335ac8ce73735b82959812dd8398f..b5fe8d5b60891c058de809b4a8e5da1423e94e78 100644
--- a/src/gpu/GrOptDrawState.cpp
+++ b/src/gpu/GrOptDrawState.cpp
@@ -32,23 +32,23 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
fPrimitiveProcessor.reset(gp);
} else {
SkASSERT(!gp && pathProc && (GrGpu::IsPathRenderingDrawType(drawType) ||
- GrGpu::kStencilPath_DrawType == drawType));
+ GrGpu::kStencilPath_DrawType == drawType));
fPrimitiveProcessor.reset(pathProc);
}
const GrProcOptInfo& colorPOI = drawState.colorProcInfo(fPrimitiveProcessor);
const GrProcOptInfo& coveragePOI = drawState.coverageProcInfo(fPrimitiveProcessor);
-
- fColor = colorPOI.inputColorToEffectiveStage();
- // TODO fix this when coverage stages work correctly
- // fCoverage = coveragePOI.inputColorToEffectiveStage();
- fCoverage = fPrimitiveProcessor->coverage();
// Create XferProcessor from DS's XPFactory
SkAutoTUnref<GrXferProcessor> xferProcessor(
drawState.getXPFactory()->createXferProcessor(colorPOI, coveragePOI));
+ GrColor overrideColor = GrColor_ILLEGAL;
+ if (colorPOI.firstEffectiveStageIndex() != 0) {
+ overrideColor = colorPOI.inputColorToEffectiveStage();
+ }
+
GrXferProcessor::OptFlags optFlags;
if (xferProcessor) {
fXferProcessor.reset(xferProcessor.get());
@@ -58,8 +58,7 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
drawState.isCoverageDrawing(),
drawState.isColorWriteDisabled(),
drawState.getStencil().doesWrite(),
- &fColor,
- &fCoverage,
+ &overrideColor,
caps);
}
@@ -98,22 +97,14 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
fFlags |= kDither_Flag;
}
- fDescInfo.fHasVertexColor = gp && gp->hasVertexColor();
-
- fDescInfo.fHasVertexCoverage = gp && gp->hasVertexCoverage();
-
+ // TODO move local coords completely into GP
bool hasLocalCoords = gp && gp->hasLocalCoords();
int firstColorStageIdx = colorPOI.firstEffectiveStageIndex();
- fDescInfo.fInputColorIsUsed = colorPOI.inputColorIsUsed();
- if (colorPOI.removeVertexAttrib()) {
- fDescInfo.fHasVertexColor = false;
- }
// TODO: Once we can handle single or four channel input into coverage stages then we can use
// drawState's coverageProcInfo (like color above) to set this initial information.
int firstCoverageStageIdx = 0;
- fDescInfo.fInputCoverageIsUsed = true;
GrXferProcessor::BlendInfo blendInfo;
fXferProcessor->getBlendInfo(&blendInfo);
@@ -138,14 +129,11 @@ GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
}
// let the GP init the batch tracker
- if (gp) {
- GrGeometryProcessor::InitBT init;
- init.fOutputColor = fDescInfo.fInputColorIsUsed;
- init.fOutputCoverage = fDescInfo.fInputCoverageIsUsed;
- init.fColor = this->getColor();
- init.fCoverage = this->getCoverage();
- fGeometryProcessor->initBatchTracker(&fBatchTracker, init);
- }
+ GrGeometryProcessor::InitBT init;
+ init.fColorIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreColor_OptFlag);
+ init.fOverrideColor = init.fColorIgnored ? GrColor_ILLEGAL : overrideColor;
+ init.fCoverageIgnored = SkToBool(optFlags & GrXferProcessor::kIgnoreCoverage_OptFlag);
+ fPrimitiveProcessor->initBatchTracker(&fBatchTracker, init);
}
void GrOptDrawState::adjustProgramFromOptimizations(const GrDrawState& ds,
@@ -157,20 +145,16 @@ void GrOptDrawState::adjustProgramFromOptimizations(const GrDrawState& ds,
fDescInfo.fReadsDst = false;
fDescInfo.fReadsFragPosition = false;
- if (flags & GrXferProcessor::kClearColorStages_OptFlag ||
- flags & GrXferProcessor::kOverrideColor_OptFlag) {
- fDescInfo.fInputColorIsUsed = true;
+ if ((flags & GrXferProcessor::kIgnoreColor_OptFlag) ||
+ (flags & GrXferProcessor::kOverrideColor_OptFlag)) {
*firstColorStageIdx = ds.numColorStages();
- fDescInfo.fHasVertexColor = false;
} else {
fDescInfo.fReadsDst = colorPOI.readsDst();
fDescInfo.fReadsFragPosition = colorPOI.readsFragPosition();
}
- if (flags & GrXferProcessor::kClearCoverageStages_OptFlag) {
- fDescInfo.fInputCoverageIsUsed = true;
+ if (flags & GrXferProcessor::kIgnoreCoverage_OptFlag) {
*firstCoverageStageIdx = ds.numCoverageStages();
- fDescInfo.fHasVertexCoverage = false;
} else {
if (coveragePOI.readsDst()) {
fDescInfo.fReadsDst = true;
@@ -188,15 +172,11 @@ void GrOptDrawState::finalize(GrGpu* gpu) {
////////////////////////////////////////////////////////////////////////////////
-bool GrOptDrawState::operator== (const GrOptDrawState& that) const {
+bool GrOptDrawState::combineIfPossible(const GrOptDrawState& that) {
if (fDescInfo != that.fDescInfo) {
return false;
}
- if (!fDescInfo.fHasVertexColor && this->fColor != that.fColor) {
- return false;
- }
-
if (this->getRenderTarget() != that.getRenderTarget() ||
this->fFragmentStages.count() != that.fFragmentStages.count() ||
this->fNumColorStages != that.fNumColorStages ||
@@ -210,17 +190,9 @@ bool GrOptDrawState::operator== (const GrOptDrawState& that) const {
return false;
}
- if (!fDescInfo.fHasVertexCoverage && this->fCoverage != that.fCoverage) {
- return false;
- }
-
- if (this->hasGeometryProcessor()) {
- if (!that.hasGeometryProcessor()) {
- return false;
- } else if (!this->getGeometryProcessor()->isEqual(*that.getGeometryProcessor())) {
- return false;
- }
- } else if (that.hasGeometryProcessor()) {
+ if (!this->getPrimitiveProcessor()->canMakeEqual(fBatchTracker,
+ *that.getPrimitiveProcessor(),
+ that.getBatchTracker())) {
return false;
}
@@ -236,6 +208,9 @@ bool GrOptDrawState::operator== (const GrOptDrawState& that) const {
return false;
}
}
+
+ // Now update the GrPrimitiveProcessor's batch tracker
+ fPrimitiveProcessor->makeEqual(&fBatchTracker, that.getBatchTracker());
return true;
}
« no previous file with comments | « src/gpu/GrOptDrawState.h ('k') | src/gpu/GrOvalRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698