aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrDrawingManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrDrawingManager.cpp')
-rw-r--r--src/gpu/GrDrawingManager.cpp57
1 files changed, 19 insertions, 38 deletions
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 366f285cf3..0df9b34468 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -32,6 +32,11 @@
#include "ccpr/GrCoverageCountingPathRenderer.h"
#include "text/GrTextContext.h"
+// Turn on/off the sorting of opLists at flush time
+#ifndef SK_DISABLE_RENDER_TARGET_SORTING
+ #define SK_DISABLE_RENDER_TARGET_SORTING
+#endif
+
GrDrawingManager::GrDrawingManager(GrContext* context,
const GrPathRendererChain::Options& optionsForPathRendererChain,
const GrTextContext::Options& optionsForTextContext,
@@ -127,11 +132,6 @@ GrSemaphoresSubmitted GrDrawingManager::internalFlush(GrSurfaceProxy*,
fOpLists[i]->makeClosed(*fContext->contextPriv().caps());
}
- if (fSortRenderTargets) {
- SkDEBUGCODE(bool result =) SkTTopoSort<GrOpList, GrOpList::TopoSortTraits>(&fOpLists);
- SkASSERT(result);
- }
-
#ifdef SK_DEBUG
// This block checks for any unnecessary splits in the opLists. If two sequential opLists
// share the same backing GrSurfaceProxy it means the opList was artificially split.
@@ -149,6 +149,11 @@ GrSemaphoresSubmitted GrDrawingManager::internalFlush(GrSurfaceProxy*,
}
#endif
+ if (fSortRenderTargets) {
+ SkDEBUGCODE(bool result =) SkTTopoSort<GrOpList, GrOpList::TopoSortTraits>(&fOpLists);
+ SkASSERT(result);
+ }
+
GrOpFlushState flushState(gpu, fContext->contextPriv().resourceProvider(),
&fTokenTracker);
@@ -273,7 +278,7 @@ bool GrDrawingManager::executeOpLists(int startIndex, int stopIndex, GrOpFlushSt
SkDebugf("Flushing opLists: %d to %d out of [%d, %d]\n",
startIndex, stopIndex, 0, fOpLists.count());
for (int i = startIndex; i < stopIndex; ++i) {
- fOpLists[i]->dump(true);
+ fOpLists[i]->dump(false);
}
#endif
@@ -426,23 +431,11 @@ sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(GrRenderTargetProxy* r
bool managedOpList) {
SkASSERT(fContext);
+ // This is a temporary fix for the partial-MDB world. In that world we're not reordering
+ // so ops that (in the single opList world) would've just glommed onto the end of the single
+ // opList but referred to a far earlier RT need to appear in their own opList.
if (!fOpLists.empty()) {
- if (fSortRenderTargets) {
- // In this case we need to close all the opLists that rely on the current contents of
- // 'rtp'. That is bc we're going to update the content of the proxy so they need to be
- // split in case they use both the old and new content. (This is a bit of an overkill:
- // they really only need to be split if they ever reference proxy's contents again but
- // that is hard to predict/handle).
- if (GrOpList* lastOpList = rtp->getLastOpList()) {
- lastOpList->closeThoseWhoDependOnMe(*fContext->contextPriv().caps());
- }
- } else {
- // This is a temporary fix for the partial-MDB world. In that world we're not
- // reordering so ops that (in the single opList world) would've just glommed onto the
- // end of the single opList but referred to a far earlier RT need to appear in their
- // own opList.
- fOpLists.back()->makeClosed(*fContext->contextPriv().caps());
- }
+ fOpLists.back()->makeClosed(*fContext->contextPriv().caps());
}
auto resourceProvider = fContext->contextPriv().resourceProvider();
@@ -464,23 +457,11 @@ sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(GrRenderTargetProxy* r
sk_sp<GrTextureOpList> GrDrawingManager::newTextureOpList(GrTextureProxy* textureProxy) {
SkASSERT(fContext);
+ // This is a temporary fix for the partial-MDB world. In that world we're not reordering
+ // so ops that (in the single opList world) would've just glommed onto the end of the single
+ // opList but referred to a far earlier RT need to appear in their own opList.
if (!fOpLists.empty()) {
- if (fSortRenderTargets) {
- // In this case we need to close all the opLists that rely on the current contents of
- // 'rtp'. That is bc we're going to update the content of the proxy so they need to be
- // split in case they use both the old and new content. (This is a bit of an overkill:
- // they really only need to be split if they ever reference proxy's contents again but
- // that is hard to predict/handle).
- if (GrOpList* lastOpList = textureProxy->getLastOpList()) {
- lastOpList->closeThoseWhoDependOnMe(*fContext->contextPriv().caps());
- }
- } else {
- // This is a temporary fix for the partial-MDB world. In that world we're not
- // reordering so ops that (in the single opList world) would've just glommed onto the
- // end of the single opList but referred to a far earlier RT need to appear in their
- // own opList.
- fOpLists.back()->makeClosed(*fContext->contextPriv().caps());
- }
+ fOpLists.back()->makeClosed(*fContext->contextPriv().caps());
}
sk_sp<GrTextureOpList> opList(new GrTextureOpList(fContext->contextPriv().resourceProvider(),