diff options
author | Brian Salomon <bsalomon@google.com> | 2018-09-17 15:48:20 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-09-17 20:10:27 +0000 |
commit | c525d4f7101715d728fca1b7fd7f170115994646 (patch) | |
tree | abed7970ab83e754708c6dcb5a5537d3420b51c5 /src | |
parent | 9d289e277512f564571fe5322bb3a11303226dff (diff) | |
download | platform_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.cpp | 10 | ||||
-rw-r--r-- | src/gpu/ops/GrOp.cpp | 3 |
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; } |