diff options
author | Robert Phillips <robertphillips@google.com> | 2017-06-14 16:37:02 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-14 20:45:11 +0000 |
commit | 941d1446e0247b3af5d607def3ae87ee66031381 (patch) | |
tree | 5f94697ee3d3c5a3ab8a2ca2f021bb344140840c /src/gpu | |
parent | 1ec03f33cf493352174c748662d4a3cca29f78fd (diff) |
Prevent onFlushCB created opLists from being grouped with the normal ones (new)
Change-Id: I8ee04bb40a51f5b432b4c896a0c3e50559977463
Reviewed-on: https://skia-review.googlesource.com/19902
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrDrawingManager.cpp | 12 | ||||
-rw-r--r-- | src/gpu/GrDrawingManager.h | 7 | ||||
-rw-r--r-- | src/gpu/GrOnFlushResourceProvider.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetContext.cpp | 8 | ||||
-rw-r--r-- | src/gpu/GrRenderTargetContext.h | 3 |
5 files changed, 22 insertions, 12 deletions
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp index cb052ef666..99a097ac3c 100644 --- a/src/gpu/GrDrawingManager.cpp +++ b/src/gpu/GrDrawingManager.cpp @@ -224,7 +224,8 @@ void GrDrawingManager::addOnFlushCallbackObject(GrOnFlushCallbackObject* onFlush fOnFlushCBObjects.push_back(onFlushCBObject); } -sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(GrRenderTargetProxy* rtp) { +sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(GrRenderTargetProxy* rtp, + bool managedOpList) { SkASSERT(fContext); // This is a temporary fix for the partial-MDB world. In that world we're not reordering @@ -239,7 +240,9 @@ sk_sp<GrRenderTargetOpList> GrDrawingManager::newRTOpList(GrRenderTargetProxy* r fContext->getAuditTrail())); SkASSERT(rtp->getLastOpList() == opList.get()); - fOpLists.push_back() = opList; + if (managedOpList) { + fOpLists.push_back() = opList; + } return opList; } @@ -306,7 +309,8 @@ GrPathRenderer* GrDrawingManager::getPathRenderer(const GrPathRenderer::CanDrawP sk_sp<GrRenderTargetContext> GrDrawingManager::makeRenderTargetContext( sk_sp<GrSurfaceProxy> sProxy, sk_sp<SkColorSpace> colorSpace, - const SkSurfaceProps* surfaceProps) { + const SkSurfaceProps* surfaceProps, + bool managedOpList) { if (this->wasAbandoned() || !sProxy->asRenderTargetProxy()) { return nullptr; } @@ -347,7 +351,7 @@ sk_sp<GrRenderTargetContext> GrDrawingManager::makeRenderTargetContext( std::move(colorSpace), surfaceProps, fContext->getAuditTrail(), - fSingleOwner)); + fSingleOwner, managedOpList)); } sk_sp<GrTextureContext> GrDrawingManager::makeTextureContext(sk_sp<GrSurfaceProxy> sProxy, diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h index 15211eff5b..51c698ddfb 100644 --- a/src/gpu/GrDrawingManager.h +++ b/src/gpu/GrDrawingManager.h @@ -42,12 +42,15 @@ public: sk_sp<GrRenderTargetContext> makeRenderTargetContext(sk_sp<GrSurfaceProxy>, sk_sp<SkColorSpace>, - const SkSurfaceProps*); + const SkSurfaceProps*, + bool managedOpList = true); sk_sp<GrTextureContext> makeTextureContext(sk_sp<GrSurfaceProxy>, sk_sp<SkColorSpace>); // The caller automatically gets a ref on the returned opList. It must // be balanced by an unref call. - sk_sp<GrRenderTargetOpList> newRTOpList(GrRenderTargetProxy* rtp); + // A managed opList is controlled by the drawing manager (i.e., sorted & flushed with the + // other). An unmanaged one is created and used by the onFlushCallback. + sk_sp<GrRenderTargetOpList> newRTOpList(GrRenderTargetProxy* rtp, bool managedOpList); sk_sp<GrTextureOpList> newTextureOpList(GrTextureProxy* textureProxy); GrContext* getContext() { return fContext; } diff --git a/src/gpu/GrOnFlushResourceProvider.cpp b/src/gpu/GrOnFlushResourceProvider.cpp index 8b031f4e32..7ecf63a54f 100644 --- a/src/gpu/GrOnFlushResourceProvider.cpp +++ b/src/gpu/GrOnFlushResourceProvider.cpp @@ -33,7 +33,7 @@ sk_sp<GrRenderTargetContext> GrOnFlushResourceProvider::makeRenderTargetContext( sk_sp<GrRenderTargetContext> renderTargetContext( fDrawingMgr->makeRenderTargetContext(std::move(proxy), std::move(colorSpace), - props)); + props, false)); if (!renderTargetContext) { return nullptr; @@ -53,7 +53,7 @@ sk_sp<GrRenderTargetContext> GrOnFlushResourceProvider::makeRenderTargetContext( sk_sp<GrRenderTargetContext> renderTargetContext( fDrawingMgr->makeRenderTargetContext(std::move(proxy), std::move(colorSpace), - props)); + props, false)); if (!renderTargetContext) { return nullptr; diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 601d16b841..7d752b43c7 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -106,13 +106,15 @@ GrRenderTargetContext::GrRenderTargetContext(GrContext* context, sk_sp<SkColorSpace> colorSpace, const SkSurfaceProps* surfaceProps, GrAuditTrail* auditTrail, - GrSingleOwner* singleOwner) + GrSingleOwner* singleOwner, + bool managedOpList) : GrSurfaceContext(context, drawingMgr, std::move(colorSpace), auditTrail, singleOwner) , fRenderTargetProxy(std::move(rtp)) , fOpList(sk_ref_sp(fRenderTargetProxy->getLastRenderTargetOpList())) , fInstancedPipelineInfo(fRenderTargetProxy.get()) , fColorXformFromSRGB(nullptr) - , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) { + , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) + , fManagedOpList(managedOpList) { if (fColorSpace) { // sRGB sources are very common (SkColor, etc...), so we cache that gamut transformation auto srgbColorSpace = SkColorSpace::MakeSRGB(); @@ -154,7 +156,7 @@ GrRenderTargetOpList* GrRenderTargetContext::getOpList() { SkDEBUGCODE(this->validate();) if (!fOpList || fOpList->isClosed()) { - fOpList = this->drawingManager()->newRTOpList(fRenderTargetProxy.get()); + fOpList = this->drawingManager()->newRTOpList(fRenderTargetProxy.get(), fManagedOpList); } return fOpList.get(); diff --git a/src/gpu/GrRenderTargetContext.h b/src/gpu/GrRenderTargetContext.h index 922482cdea..c471eacdde 100644 --- a/src/gpu/GrRenderTargetContext.h +++ b/src/gpu/GrRenderTargetContext.h @@ -351,7 +351,7 @@ public: protected: GrRenderTargetContext(GrContext*, GrDrawingManager*, sk_sp<GrRenderTargetProxy>, sk_sp<SkColorSpace>, const SkSurfaceProps*, GrAuditTrail*, - GrSingleOwner*); + GrSingleOwner*, bool managedOpList = true); SkDEBUGCODE(void validate() const;) @@ -431,6 +431,7 @@ private: sk_sp<GrColorSpaceXform> fColorXformFromSRGB; SkSurfaceProps fSurfaceProps; + bool fManagedOpList; typedef GrSurfaceContext INHERITED; }; |