aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/instanced/InstancedRendering.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-03-30 16:48:26 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-31 02:10:25 +0000
commit4fc774060036ef04fbc1d92a018e42df8704ff50 (patch)
tree22071209fee2d5d92c0ec9109bd9264519a5c3f2 /src/gpu/instanced/InstancedRendering.cpp
parent8517b4c87ee5b8c30aa9aa642fd3a7cbf9131688 (diff)
Respect xfer barriers in InstancedRendering::Op
Fixes a bug introduced when this Op stopped storing a GrPipeline. Change-Id: I1a39814cebe18b321ea369f005bb7759f233cfe6 Reviewed-on: https://skia-review.googlesource.com/10804 Commit-Queue: Brian Salomon <bsalomon@google.com> Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/instanced/InstancedRendering.cpp')
-rw-r--r--src/gpu/instanced/InstancedRendering.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/gpu/instanced/InstancedRendering.cpp b/src/gpu/instanced/InstancedRendering.cpp
index ad61eb6dfd..4abaef69b3 100644
--- a/src/gpu/instanced/InstancedRendering.cpp
+++ b/src/gpu/instanced/InstancedRendering.cpp
@@ -234,6 +234,7 @@ InstancedRendering::Op::Op(uint32_t classID, GrPaint&& paint, InstancedRendering
, fInstancedRendering(ir)
, fProcessors(std::move(paint))
, fIsTracked(false)
+ , fRequiresBarrierOnOverlap(false)
, fNumDraws(1)
, fNumChangesInGeometry(0) {
fHeadDraw = fTailDraw = fInstancedRendering->fDrawPool.allocate();
@@ -370,6 +371,7 @@ bool InstancedRendering::Op::xpRequiresDstTexture(const GrCaps& caps, const GrAp
fInfo.fCannotTweakAlphaForCoverage = !analysis.isCompatibleWithCoverageAsAlpha();
fInfo.fUsesLocalCoords = analysis.usesLocalCoords();
+ fRequiresBarrierOnOverlap = analysis.requiresBarrierBetweenOverlappingDraws();
return analysis.requiresDstTexture();
}
@@ -390,6 +392,10 @@ bool InstancedRendering::Op::onCombineIfPossible(GrOp* other, const GrCaps& caps
return false;
}
+ SkASSERT(fRequiresBarrierOnOverlap == that->fRequiresBarrierOnOverlap);
+ if (fRequiresBarrierOnOverlap && this->bounds().intersects(that->bounds())) {
+ return false;
+ }
OpInfo combinedInfo = fInfo | that->fInfo;
if (!combinedInfo.isSimpleRects()) {
// This threshold was chosen with the "shapes_mixed" bench on a MacBook with Intel graphics.