aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Salomon <bsalomon@google.com>2018-09-17 15:48:20 -0400
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2018-09-17 20:10:27 +0000
commitc525d4f7101715d728fca1b7fd7f170115994646 (patch)
treeabed7970ab83e754708c6dcb5a5537d3420b51c5 /src
parent9d289e277512f564571fe5322bb3a11303226dff (diff)
downloadplatform_external_skqp-c525d4f7101715d728fca1b7fd7f170115994646.tar.gz
platform_external_skqp-c525d4f7101715d728fca1b7fd7f170115994646.tar.bz2
platform_external_skqp-c525d4f7101715d728fca1b7fd7f170115994646.zip
When merging into an already chained op update the head's op bounds.
Also assert in GrRenderTargetOpList that chained ops' bounds are contained in head op's bounds. Change-Id: I70303ecfbb314d7d04d03f6ae6eae27e9956a7ce Reviewed-on: https://skia-review.googlesource.com/154981 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/gpu/GrRenderTargetOpList.cpp10
-rw-r--r--src/gpu/ops/GrOp.cpp3
2 files changed, 12 insertions, 1 deletions
diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp
index d7ace8f5d4..6ca4936fcd 100644
--- a/src/gpu/GrRenderTargetOpList.cpp
+++ b/src/gpu/GrRenderTargetOpList.cpp
@@ -78,6 +78,14 @@ void GrRenderTargetOpList::visitProxies_debugOnly(const GrOp::VisitProxyFunc& fu
recordedOp.visitProxies(func);
}
}
+
+static void assert_chain_bounds(const GrOp* op) {
+ SkASSERT(op->isChainHead());
+ auto headBounds = op->bounds();
+ while ((op = op->nextInChain())) {
+ SkASSERT(headBounds.contains(op->bounds()));
+ }
+}
#endif
void GrRenderTargetOpList::onPrepare(GrOpFlushState* flushState) {
@@ -99,7 +107,7 @@ void GrRenderTargetOpList::onPrepare(GrOpFlushState* flushState) {
fRecordedOps[i].fAppliedClip,
fRecordedOps[i].fDstProxy
};
-
+ SkDEBUGCODE(assert_chain_bounds(opArgs.fOp));
flushState->setOpArgs(&opArgs);
fRecordedOps[i].fOp->prepare(flushState);
flushState->setOpArgs(nullptr);
diff --git a/src/gpu/ops/GrOp.cpp b/src/gpu/ops/GrOp.cpp
index ed94d9902c..a5f6b172da 100644
--- a/src/gpu/ops/GrOp.cpp
+++ b/src/gpu/ops/GrOp.cpp
@@ -41,6 +41,9 @@ GrOp::CombineResult GrOp::combineIfPossible(GrOp* that, const GrCaps& caps) {
auto result = this->onCombineIfPossible(that, caps);
// Merging a chained 'that' would cause problems given the way op lists currently manage chains.
SkASSERT(!(thatWasChained && result == CombineResult::kMerged));
+ if (fChainHead) {
+ fChainHead->joinBounds(*that);
+ }
return result;
}