aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Robert Phillips <robertphillips@google.com>2017-06-14 16:37:02 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-14 20:45:11 +0000
commit941d1446e0247b3af5d607def3ae87ee66031381 (patch)
tree5f94697ee3d3c5a3ab8a2ca2f021bb344140840c
parent1ec03f33cf493352174c748662d4a3cca29f78fd (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>
-rw-r--r--src/gpu/GrDrawingManager.cpp12
-rw-r--r--src/gpu/GrDrawingManager.h7
-rw-r--r--src/gpu/GrOnFlushResourceProvider.cpp4
-rw-r--r--src/gpu/GrRenderTargetContext.cpp8
-rw-r--r--src/gpu/GrRenderTargetContext.h3
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;
};