Skip visiting for allocator gathering in GrTextureOp when all proxies
are not recyclable.
Change-Id: I5ff9c48b3d7b37531a3f052bd5188a8afcacf3cb
Reviewed-on: https://skia-review.googlesource.com/c/161860
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp
index 9857ff9..6346c45 100644
--- a/gm/beziereffects.cpp
+++ b/gm/beziereffects.cpp
@@ -34,7 +34,7 @@
return analysis.requiresDstTexture() ? RequiresDstTexture::kYes : RequiresDstTexture::kNo;
}
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fProcessorSet.visitProxies(func);
}
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index b3c2d19..4e237d8 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -51,7 +51,7 @@
const char* name() const override { return "PolyBoundsOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fProcessors.visitProxies(func);
}
diff --git a/include/private/GrSurfaceProxy.h b/include/private/GrSurfaceProxy.h
index f18a77d..980f983 100644
--- a/include/private/GrSurfaceProxy.h
+++ b/include/private/GrSurfaceProxy.h
@@ -324,6 +324,12 @@
void deInstantiate();
/**
+ * Proxies that are already instantiated and whose backing surface cannot be recycled to
+ * instantiate other proxies do not need to be considered by GrResourceAllocator.
+ */
+ bool canSkipResourceAllocator() const;
+
+ /**
* @return the texture proxy associated with the surface proxy, may be NULL.
*/
virtual GrTextureProxy* asTextureProxy() { return nullptr; }
diff --git a/src/atlastext/SkAtlasTextTarget.cpp b/src/atlastext/SkAtlasTextTarget.cpp
index 1eaba05..2a59790 100644
--- a/src/atlastext/SkAtlasTextTarget.cpp
+++ b/src/atlastext/SkAtlasTextTarget.cpp
@@ -188,7 +188,6 @@
break;
}
}
- op->visitProxies([](GrSurfaceProxy*) {});
fOps.emplace_back(std::move(op));
}
diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp
index 6ca4936..8215df7 100644
--- a/src/gpu/GrRenderTargetOpList.cpp
+++ b/src/gpu/GrRenderTargetOpList.cpp
@@ -75,7 +75,7 @@
void GrRenderTargetOpList::visitProxies_debugOnly(const GrOp::VisitProxyFunc& func) const {
for (const RecordedOp& recordedOp : fRecordedOps) {
- recordedOp.visitProxies(func);
+ recordedOp.visitProxies(func, GrOp::VisitorType::kOther);
}
}
@@ -267,7 +267,7 @@
for (RecordedOp& recordedOp : fRecordedOps) {
hasUninstantiatedProxy = false;
if (recordedOp.fOp) {
- recordedOp.visitProxies(checkInstantiation);
+ recordedOp.visitProxies(checkInstantiation, GrOp::VisitorType::kOther);
}
if (hasUninstantiatedProxy) {
// When instantiation of the proxy fails we drop the Op
@@ -304,7 +304,8 @@
alloc->addInterval(p SkDEBUGCODE(, fTarget.get() == p));
};
for (const RecordedOp& recordedOp : fRecordedOps) {
- recordedOp.visitProxies(gather); // only diff from the GrTextureOpList version
+ // only diff from the GrTextureOpList version
+ recordedOp.visitProxies(gather, GrOp::VisitorType::kAllocatorGather);
// Even though the op may have been moved we still need to increment the op count to
// keep all the math consistent.
diff --git a/src/gpu/GrRenderTargetOpList.h b/src/gpu/GrRenderTargetOpList.h
index e74a25c..08f5068 100644
--- a/src/gpu/GrRenderTargetOpList.h
+++ b/src/gpu/GrRenderTargetOpList.h
@@ -143,9 +143,9 @@
void deleteOp(GrOpMemoryPool* opMemoryPool);
- void visitProxies(const GrOp::VisitProxyFunc& func) const {
+ void visitProxies(const GrOp::VisitProxyFunc& func, GrOp::VisitorType visitor) const {
if (fOp) {
- fOp->visitProxies(func);
+ fOp->visitProxies(func, visitor);
}
if (fDstProxy.proxy()) {
func(fDstProxy.proxy());
diff --git a/src/gpu/GrSurfaceProxy.cpp b/src/gpu/GrSurfaceProxy.cpp
index d46480a..c0e65c0 100644
--- a/src/gpu/GrSurfaceProxy.cpp
+++ b/src/gpu/GrSurfaceProxy.cpp
@@ -179,6 +179,16 @@
return surface;
}
+bool GrSurfaceProxy::canSkipResourceAllocator() const {
+ auto peek = this->peekSurface();
+ if (!peek) {
+ return false;
+ }
+ // If this resource is already allocated and not recyclable then the resource allocator does
+ // not need to do anything with it.
+ return !peek->resourcePriv().getScratchKey().isValid();
+}
+
void GrSurfaceProxy::assign(sk_sp<GrSurface> surface) {
SkASSERT(!fTarget && surface);
diff --git a/src/gpu/GrTextureOpList.cpp b/src/gpu/GrTextureOpList.cpp
index df43bcb..a4c6068 100644
--- a/src/gpu/GrTextureOpList.cpp
+++ b/src/gpu/GrTextureOpList.cpp
@@ -197,7 +197,7 @@
for (int i = 0; i < fRecordedOps.count(); ++i) {
const GrOp* op = fRecordedOps[i].get(); // only diff from the GrRenderTargetOpList version
if (op) {
- op->visitProxies(gather);
+ op->visitProxies(gather, GrOp::VisitorType::kAllocatorGather);
}
// Even though the op may have been moved we still need to increment the op count to
diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.h b/src/gpu/ccpr/GrCCDrawPathsOp.h
index 0faa253..1d17a9f 100644
--- a/src/gpu/ccpr/GrCCDrawPathsOp.h
+++ b/src/gpu/ccpr/GrCCDrawPathsOp.h
@@ -37,7 +37,9 @@
FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; }
RequiresDstTexture finalize(const GrCaps&, const GrAppliedClip*) override;
CombineResult onCombineIfPossible(GrOp*, const GrCaps&) override;
- void visitProxies(const VisitProxyFunc& fn) const override { fProcessors.visitProxies(fn); }
+ void visitProxies(const VisitProxyFunc& fn, VisitorType) const override {
+ fProcessors.visitProxies(fn);
+ }
void onPrepare(GrOpFlushState*) override {}
void wasRecorded(sk_sp<GrCCPerOpListPaths> owningPerOpListPaths);
diff --git a/src/gpu/ccpr/GrCCPerFlushResources.cpp b/src/gpu/ccpr/GrCCPerFlushResources.cpp
index 29de715..61d1e9b 100644
--- a/src/gpu/ccpr/GrCCPerFlushResources.cpp
+++ b/src/gpu/ccpr/GrCCPerFlushResources.cpp
@@ -66,7 +66,9 @@
}
const char* name() const override { return "CopyAtlasOp (CCPR)"; }
- void visitProxies(const VisitProxyFunc& fn) const override { fn(fStashedAtlasProxy.get()); }
+ void visitProxies(const VisitProxyFunc& fn, VisitorType) const override {
+ fn(fStashedAtlasProxy.get());
+ }
void onExecute(GrOpFlushState* flushState) override {
SkASSERT(fStashedAtlasProxy);
diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp
index cef10cc..ac2f6d6 100644
--- a/src/gpu/ops/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp
@@ -775,7 +775,7 @@
const char* name() const override { return "AAConvexPathOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAAFillRectOp.cpp b/src/gpu/ops/GrAAFillRectOp.cpp
index 9d66299..120f714 100644
--- a/src/gpu/ops/GrAAFillRectOp.cpp
+++ b/src/gpu/ops/GrAAFillRectOp.cpp
@@ -207,7 +207,7 @@
const char* name() const override { return "AAFillRectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
index 9bbcaf1..50bc406 100644
--- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp
+++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp
@@ -822,7 +822,7 @@
const char* name() const override { return "AAHairlineOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
index c40aa71..4029b3d 100644
--- a/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
+++ b/src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp
@@ -185,7 +185,7 @@
const char* name() const override { return "AAFlatteningConvexPathOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAAStrokeRectOp.cpp b/src/gpu/ops/GrAAStrokeRectOp.cpp
index 0362946..248f502 100644
--- a/src/gpu/ops/GrAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrAAStrokeRectOp.cpp
@@ -182,7 +182,7 @@
const char* name() const override { return "AAStrokeRect"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp
index b45b2cf..b616c29 100644
--- a/src/gpu/ops/GrAtlasTextOp.cpp
+++ b/src/gpu/ops/GrAtlasTextOp.cpp
@@ -113,7 +113,7 @@
this->setBounds(bounds, HasAABloat::kNo, IsZeroArea::kNo);
}
-void GrAtlasTextOp::visitProxies(const VisitProxyFunc& func) const {
+void GrAtlasTextOp::visitProxies(const VisitProxyFunc& func, VisitorType) const {
fProcessors.visitProxies(func);
}
diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h
index 174f04c..df2f11c 100644
--- a/src/gpu/ops/GrAtlasTextOp.h
+++ b/src/gpu/ops/GrAtlasTextOp.h
@@ -68,7 +68,7 @@
const char* name() const override { return "AtlasTextOp"; }
- void visitProxies(const VisitProxyFunc& func) const override;
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override;
SkString dumpInfo() const override;
diff --git a/src/gpu/ops/GrCopySurfaceOp.h b/src/gpu/ops/GrCopySurfaceOp.h
index b93cbb7..c0760ec 100644
--- a/src/gpu/ops/GrCopySurfaceOp.h
+++ b/src/gpu/ops/GrCopySurfaceOp.h
@@ -23,9 +23,7 @@
const char* name() const override { return "CopySurface"; }
- void visitProxies(const VisitProxyFunc& func) const override {
- func(fSrc.get());
- }
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override { func(fSrc.get()); }
SkString dumpInfo() const override {
SkString string;
diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp
index 7a53a62..08ca0f0 100644
--- a/src/gpu/ops/GrDashOp.cpp
+++ b/src/gpu/ops/GrDashOp.cpp
@@ -279,7 +279,7 @@
const char* name() const override { return "DashOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fProcessorSet.visitProxies(func);
}
diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp
index 4e038df..a653941 100644
--- a/src/gpu/ops/GrDefaultPathRenderer.cpp
+++ b/src/gpu/ops/GrDefaultPathRenderer.cpp
@@ -357,7 +357,7 @@
const char* name() const override { return "DefaultPathOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrDrawAtlasOp.h b/src/gpu/ops/GrDrawAtlasOp.h
index d15bd3c..fdb3476 100644
--- a/src/gpu/ops/GrDrawAtlasOp.h
+++ b/src/gpu/ops/GrDrawAtlasOp.h
@@ -38,7 +38,7 @@
const char* name() const override { return "DrawAtlasOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrDrawPathOp.h b/src/gpu/ops/GrDrawPathOp.h
index 3016fd7..cdd955e 100644
--- a/src/gpu/ops/GrDrawPathOp.h
+++ b/src/gpu/ops/GrDrawPathOp.h
@@ -34,7 +34,7 @@
? RequiresDstTexture::kYes : RequiresDstTexture::kNo;
}
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fProcessorSet.visitProxies(func);
}
diff --git a/src/gpu/ops/GrDrawVerticesOp.h b/src/gpu/ops/GrDrawVerticesOp.h
index fd40e461..79a8309 100644
--- a/src/gpu/ops/GrDrawVerticesOp.h
+++ b/src/gpu/ops/GrDrawVerticesOp.h
@@ -51,7 +51,7 @@
const char* name() const override { return "DrawVerticesOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp
index 7c3d4bf..6d7345b 100644
--- a/src/gpu/ops/GrLatticeOp.cpp
+++ b/src/gpu/ops/GrLatticeOp.cpp
@@ -172,7 +172,7 @@
const char* name() const override { return "NonAALatticeOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
func(fProxy.get());
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrNonAAFillRectOp.cpp b/src/gpu/ops/GrNonAAFillRectOp.cpp
index fd8a9b3..9e5a8e2 100644
--- a/src/gpu/ops/GrNonAAFillRectOp.cpp
+++ b/src/gpu/ops/GrNonAAFillRectOp.cpp
@@ -149,7 +149,7 @@
const char* name() const override { return "NonAAFillRectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
@@ -279,7 +279,7 @@
const char* name() const override { return "NonAAFillRectPerspectiveOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrNonAAStrokeRectOp.cpp b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
index 500b2eb..e7b2b17 100644
--- a/src/gpu/ops/GrNonAAStrokeRectOp.cpp
+++ b/src/gpu/ops/GrNonAAStrokeRectOp.cpp
@@ -63,7 +63,7 @@
const char* name() const override { return "NonAAStrokeRectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrOp.h b/src/gpu/ops/GrOp.h
index d23f781..018de66 100644
--- a/src/gpu/ops/GrOp.h
+++ b/src/gpu/ops/GrOp.h
@@ -68,7 +68,22 @@
typedef std::function<void(GrSurfaceProxy*)> VisitProxyFunc;
- virtual void visitProxies(const VisitProxyFunc&) const {
+ /**
+ * Knowning the type of visitor may enable an op to be more efficient by skipping irrelevant
+ * proxies on visitProxies.
+ */
+ enum class VisitorType : unsigned {
+ /**
+ * Ops *may* skip proxy visitation for allocation for proxies that have the
+ * canSkipResourceAllocator() property.
+ */
+ kAllocatorGather,
+ /**
+ * Ops should visit all proxies.
+ */
+ kOther,
+ };
+ virtual void visitProxies(const VisitProxyFunc&, VisitorType = VisitorType::kOther) const {
// This default implementation assumes the op has no proxies
}
diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp
index 0f36c1b..d8809b0 100644
--- a/src/gpu/ops/GrOvalOpFactory.cpp
+++ b/src/gpu/ops/GrOvalOpFactory.cpp
@@ -1137,7 +1137,7 @@
const char* name() const override { return "CircleOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
@@ -1650,7 +1650,9 @@
const char* name() const override { return "ButtCappedDashedCircleOp"; }
- void visitProxies(const VisitProxyFunc& func) const override { fHelper.visitProxies(func); }
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
+ fHelper.visitProxies(func);
+ }
SkString dumpInfo() const override {
SkString string;
@@ -1962,7 +1964,7 @@
const char* name() const override { return "EllipseOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
@@ -2199,7 +2201,7 @@
const char* name() const override { return "DIEllipseOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
@@ -2532,7 +2534,7 @@
const char* name() const override { return "CircularRRectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
@@ -2896,7 +2898,7 @@
const char* name() const override { return "EllipticalRRectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrRegionOp.cpp b/src/gpu/ops/GrRegionOp.cpp
index b876295..f78fa94 100644
--- a/src/gpu/ops/GrRegionOp.cpp
+++ b/src/gpu/ops/GrRegionOp.cpp
@@ -85,7 +85,7 @@
const char* name() const override { return "GrRegionOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp
index 220b219..9ade557 100644
--- a/src/gpu/ops/GrSmallPathRenderer.cpp
+++ b/src/gpu/ops/GrSmallPathRenderer.cpp
@@ -271,7 +271,7 @@
const char* name() const override { return "SmallPathOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
const sk_sp<GrTextureProxy>* proxies = fAtlas->getProxies();
diff --git a/src/gpu/ops/GrTessellatingPathRenderer.cpp b/src/gpu/ops/GrTessellatingPathRenderer.cpp
index 75620d3..9235cce 100644
--- a/src/gpu/ops/GrTessellatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTessellatingPathRenderer.cpp
@@ -184,7 +184,7 @@
const char* name() const override { return "TessellatingPathOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp
index ee1af7c..12fe7ad 100644
--- a/src/gpu/ops/GrTextureOp.cpp
+++ b/src/gpu/ops/GrTextureOp.cpp
@@ -618,7 +618,10 @@
const char* name() const override { return "TextureOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType visitor) const override {
+ if (visitor == VisitorType::kAllocatorGather && fCanSkipAllocatorGather) {
+ return;
+ }
for (unsigned p = 0; p < fProxyCnt; ++p) {
func(fProxies[p].fProxy);
}
@@ -733,6 +736,8 @@
fProxies[0] = {proxy.release(), 1};
this->setBounds(bounds, HasAABloat(this->aaType() == GrAAType::kCoverage), IsZeroArea::kNo);
fDomain = static_cast<unsigned>(draw.domain());
+ fCanSkipAllocatorGather =
+ static_cast<unsigned>(fProxies[0].fProxy->canSkipResourceAllocator());
}
TextureOp(const GrRenderTargetContext::TextureSetEntry set[], int cnt,
GrSamplerState::Filter filter, GrColor color, GrAAType aaType,
@@ -748,11 +753,15 @@
fProxyCnt = SkToUInt(cnt);
SkRect bounds = SkRectPriv::MakeLargestInverted();
bool aa = false;
+ fCanSkipAllocatorGather = static_cast<unsigned>(true);
for (unsigned p = 0; p < fProxyCnt; ++p) {
fProxies[p].fProxy = SkRef(set[p].fProxy.get());
fProxies[p].fQuadCnt = 1;
SkASSERT(fProxies[p].fProxy->textureType() == fProxies[0].fProxy->textureType());
SkASSERT(fProxies[p].fProxy->config() == fProxies[0].fProxy->config());
+ if (!fProxies[p].fProxy->canSkipResourceAllocator()) {
+ fCanSkipAllocatorGather = static_cast<unsigned>(false);
+ }
auto quad = GrPerspQuad(set[p].fDstRect, viewMatrix);
bounds.joinPossiblyEmptyRect(quad.bounds());
GrQuadAAFlags aaFlags = set[p].fAAFlags;
@@ -1003,7 +1012,8 @@
unsigned fDomain : 1;
// Used to track whether fProxy is ref'ed or has a pending IO after finalize() is called.
unsigned fFinalized : 1;
- unsigned fProxyCnt : 32 - 5;
+ unsigned fCanSkipAllocatorGather : 1;
+ unsigned fProxyCnt : 32 - 6;
Proxy fProxies[1];
typedef GrMeshDrawOp INHERITED;
diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp
index e6516aa..4bb2c98 100644
--- a/tests/LazyProxyTest.cpp
+++ b/tests/LazyProxyTest.cpp
@@ -64,7 +64,7 @@
return pool->allocate<Op>(proxyProvider, test, nullTexture);
}
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
func(fProxy.get());
}
@@ -282,7 +282,7 @@
shouldFailInstantiation);
}
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
func(fLazyProxy.get());
}
@@ -378,7 +378,7 @@
return pool->allocate<LazyUninstantiateTestOp>(std::move(proxy));
}
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
func(fLazyProxy.get());
}
diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp
index c96f197..7dae0ed 100644
--- a/tests/OnFlushCallbackTest.cpp
+++ b/tests/OnFlushCallbackTest.cpp
@@ -66,7 +66,7 @@
const char* name() const override { return "NonAARectOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fHelper.visitProxies(func);
}
diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp
index d89a106..6b6b6d5 100644
--- a/tests/ProcessorTest.cpp
+++ b/tests/ProcessorTest.cpp
@@ -38,7 +38,7 @@
const char* name() const override { return "TestOp"; }
- void visitProxies(const VisitProxyFunc& func) const override {
+ void visitProxies(const VisitProxyFunc& func, VisitorType) const override {
fProcessors.visitProxies(func);
}