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/GrDrawState.cpp

Issue 845103005: GrBatchPrototype (Closed) Base URL: https://skia.googlesource.com/skia.git@lc2
Patch Set: cleanup Created 5 years, 11 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
Index: src/gpu/GrDrawState.cpp
diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
index 36042e19ab21fb1b224406481ee41635ffdecc02..604f309714e2aa7fa98a508e09300192507f5c70 100644
--- a/src/gpu/GrDrawState.cpp
+++ b/src/gpu/GrDrawState.cpp
@@ -59,6 +59,8 @@ GrDrawState& GrDrawState::operator=(const GrDrawState& that) {
fCoverageCache = that.fCoverageCache;
fColorPrimProc = that.fColorPrimProc;
fCoveragePrimProc = that.fCoveragePrimProc;
+ fColorBatch = that.fColorBatch;
+ fCoverageBatch = that.fCoverageBatch;
if (fColorProcInfoValid) {
fColorProcInfo = that.fColorProcInfo;
}
@@ -88,6 +90,9 @@ void GrDrawState::onReset() {
fColorPrimProc = NULL;
fCoveragePrimProc = NULL;
+
+ fColorBatch = NULL;
+ fCoverageBatch = NULL;
}
void GrDrawState::setFromPaint(const GrPaint& paint, GrRenderTarget* rt) {
@@ -127,6 +132,9 @@ void GrDrawState::setFromPaint(const GrPaint& paint, GrRenderTarget* rt) {
fColorPrimProc = NULL;
fCoveragePrimProc = NULL;
+
+ fColorBatch = NULL;
+ fCoverageBatch = NULL;
}
////////////////////////////////////////////////////////////////////////////////
@@ -154,6 +162,14 @@ bool GrDrawState::willEffectReadDstColor(const GrPrimitiveProcessor* pp) const {
return fXPFactory->willReadDst(fColorProcInfo, fCoverageProcInfo);
}
+bool GrDrawState::willEffectReadDstColor(const GrBatch* batch) const {
+ this->calcColorInvariantOutput(batch);
+ this->calcCoverageInvariantOutput(batch);
+
+ return fXPFactory->willReadDst(fColorProcInfo, fCoverageProcInfo);
+}
+
+
void GrDrawState::AutoRestoreEffects::set(GrDrawState* ds) {
if (fDrawState) {
int m = fDrawState->numColorStages() - fColorEffectCnt;
@@ -219,6 +235,29 @@ void GrDrawState::calcCoverageInvariantOutput(const GrPrimitiveProcessor* pp) co
}
}
+void GrDrawState::calcColorInvariantOutput(const GrBatch* batch) const {
+ if (!fColorProcInfoValid || fColorBatch != batch) {
bsalomon 2015/01/20 16:14:02 all this storing of mutable ptrs seems very fragil
joshualitt 2015/01/20 17:03:08 How could we assign a uniqueID to each batch witho
bsalomon 2015/01/20 20:49:58 I mean its fragile because two batches that exist
+ GrBatchOpt batchOpt;
+ batchOpt.fCanTweakAlphaForCoverage = this->canTweakAlphaForCoverage();
+ fColorProcInfo.calcColorWithBatch(batch, batchOpt, fColorStages.begin(),
+ this->numColorStages());
+ fColorProcInfoValid = true;
+ fColorBatch = batch;
+ }
+}
+
+void GrDrawState::calcCoverageInvariantOutput(const GrBatch* batch) const {
+ if (!fCoverageProcInfoValid || fCoverageBatch != batch) {
+ GrBatchOpt batchOpt;
+ batchOpt.fCanTweakAlphaForCoverage = this->canTweakAlphaForCoverage();
+ fCoverageProcInfo.calcCoverageWithBatch(batch, batchOpt, fCoverageStages.begin(),
+ this->numCoverageStages());
+ fCoverageProcInfoValid = true;
+ fCoverageBatch = batch;
+ }
+}
+
+
void GrDrawState::calcColorInvariantOutput(GrColor color) const {
if (!fColorProcInfoValid || color != fColorCache) {
GrColorComponentFlags flags = kRGBA_GrColorComponentFlags;

Powered by Google App Engine
This is Rietveld 408576698