Minor cleanup of GrResourceAllocator
This also adds a useful debug print out (of the end-of-opList array)
Change-Id: Ia678b6e8d143ca4f851984fb5026c2ec4f998384
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/202706
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrRenderTargetOpList.cpp b/src/gpu/GrRenderTargetOpList.cpp
index bab24ca..66300df 100644
--- a/src/gpu/GrRenderTargetOpList.cpp
+++ b/src/gpu/GrRenderTargetOpList.cpp
@@ -611,7 +611,6 @@
}
void GrRenderTargetOpList::gatherProxyIntervals(GrResourceAllocator* alloc) const {
- unsigned int cur = alloc->numOps();
for (int i = 0; i < fDeferredProxies.count(); ++i) {
SkASSERT(!fDeferredProxies[i]->isInstantiated());
@@ -625,23 +624,25 @@
// Add the interval for all the writes to this opList's target
if (fOpChains.count()) {
+ unsigned int cur = alloc->curOp();
+
alloc->addInterval(fTarget.get(), cur, cur + fOpChains.count() - 1);
} else {
// This can happen if there is a loadOp (e.g., a clear) but no other draws. In this case we
// still need to add an interval for the destination so we create a fake op# for
// the missing clear op.
- alloc->addInterval(fTarget.get());
+ alloc->addInterval(fTarget.get(), alloc->curOp(), alloc->curOp());
alloc->incOps();
}
auto gather = [ alloc SkDEBUGCODE(, this) ] (GrSurfaceProxy* p) {
- alloc->addInterval(p SkDEBUGCODE(, fTarget.get() == p));
+ alloc->addInterval(p, alloc->curOp(), alloc->curOp() SkDEBUGCODE(, fTarget.get() == p));
};
for (const OpChain& recordedOp : fOpChains) {
// 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
+ // Even though the op may have been (re)moved we still need to increment the op count to
// keep all the math consistent.
alloc->incOps();
}
diff --git a/src/gpu/GrResourceAllocator.cpp b/src/gpu/GrResourceAllocator.cpp
index f824023..2142b06 100644
--- a/src/gpu/GrResourceAllocator.cpp
+++ b/src/gpu/GrResourceAllocator.cpp
@@ -353,6 +353,16 @@
*startIndex = fCurOpListIndex;
*stopIndex = fEndOfOpListOpIndices.count();
+#if GR_ALLOCATION_SPEW
+ SkDebugf("assigning opLists %d through %d out of %d numOpLists\n",
+ *startIndex, *stopIndex, fNumOpLists);
+ SkDebugf("EndOfOpListIndices: ");
+ for (int i = 0; i < fEndOfOpListOpIndices.count(); ++i) {
+ SkDebugf("%d ", fEndOfOpListOpIndices[i]);
+ }
+ SkDebugf("\n");
+#endif
+
if (!fResourceProvider->explicitlyAllocateGPUResources()) {
fIntvlList.detachAll(); // arena allocator will clean these up for us
return true;
@@ -445,9 +455,9 @@
#if GR_ALLOCATION_SPEW
void GrResourceAllocator::dumpIntervals() {
-
// Print all the intervals while computing their range
- unsigned int min = fNumOps+1;
+ SkDebugf("------------------------------------------------------------\n");
+ unsigned int min = std::numeric_limits<unsigned int>::max();
unsigned int max = 0;
for(const Interval* cur = fIntvlList.peekHead(); cur; cur = cur->next()) {
SkDebugf("{ %3d,%3d }: [%2d, %2d] - proxyRefs:%d surfaceRefs:%d R:%d W:%d\n",
diff --git a/src/gpu/GrResourceAllocator.h b/src/gpu/GrResourceAllocator.h
index 9453d36..fabaf00 100644
--- a/src/gpu/GrResourceAllocator.h
+++ b/src/gpu/GrResourceAllocator.h
@@ -54,20 +54,12 @@
unsigned int curOp() const { return fNumOps; }
void incOps() { fNumOps++; }
- unsigned int numOps() const { return fNumOps; }
// Add a usage interval from 'start' to 'end' inclusive. This is usually used for renderTargets.
// If an existing interval already exists it will be expanded to include the new range.
void addInterval(GrSurfaceProxy*, unsigned int start, unsigned int end
SkDEBUGCODE(, bool isDirectDstRead = false));
- // Add an interval that spans just the current op. Usually this is for texture uses.
- // If an existing interval already exists it will be expanded to include the new operation.
- void addInterval(GrSurfaceProxy* proxy
- SkDEBUGCODE(, bool isDirectDstRead = false)) {
- this->addInterval(proxy, fNumOps, fNumOps SkDEBUGCODE(, isDirectDstRead));
- }
-
enum class AssignError {
kNoError,
kFailedProxyInstantiation
diff --git a/src/gpu/GrTextureOpList.cpp b/src/gpu/GrTextureOpList.cpp
index ba07add..2d93f77 100644
--- a/src/gpu/GrTextureOpList.cpp
+++ b/src/gpu/GrTextureOpList.cpp
@@ -181,21 +181,22 @@
}
void GrTextureOpList::gatherProxyIntervals(GrResourceAllocator* alloc) const {
- unsigned int cur = alloc->numOps();
// Add the interval for all the writes to this opList's target
if (fRecordedOps.count()) {
+ unsigned int cur = alloc->curOp();
+
alloc->addInterval(fTarget.get(), cur, cur+fRecordedOps.count()-1);
} else {
// This can happen if there is a loadOp (e.g., a clear) but no other draws. In this case we
// still need to add an interval for the destination so we create a fake op# for
// the missing clear op.
- alloc->addInterval(fTarget.get());
+ alloc->addInterval(fTarget.get(), alloc->curOp(), alloc->curOp());
alloc->incOps();
}
auto gather = [ alloc SkDEBUGCODE(, this) ] (GrSurfaceProxy* p) {
- alloc->addInterval(p SkDEBUGCODE(, p == fTarget.get()));
+ alloc->addInterval(p, alloc->curOp(), alloc->curOp() SkDEBUGCODE(, p == fTarget.get()));
};
for (int i = 0; i < fRecordedOps.count(); ++i) {
const GrOp* op = fRecordedOps[i].get(); // only diff from the GrRenderTargetOpList version
@@ -203,7 +204,7 @@
op->visitProxies(gather, GrOp::VisitorType::kAllocatorGather);
}
- // Even though the op may have been moved we still need to increment the op count to
+ // Even though the op may have been (re)moved we still need to increment the op count to
// keep all the math consistent.
alloc->incOps();
}