Reflect the DDLTask's ref on its target in its factory
Change-Id: I8eec3b816ee422922f1205b0eb9dca30cd3d00c9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/352119
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/GrDirectContextPriv.cpp b/src/gpu/GrDirectContextPriv.cpp
index f0d15c7..9d03432 100644
--- a/src/gpu/GrDirectContextPriv.cpp
+++ b/src/gpu/GrDirectContextPriv.cpp
@@ -66,9 +66,9 @@
}
void GrDirectContextPriv::createDDLTask(sk_sp<const SkDeferredDisplayList> ddl,
- GrRenderTargetProxy* newDest,
+ sk_sp<GrRenderTargetProxy> newDest,
SkIPoint offset) {
- fContext->drawingManager()->createDDLTask(std::move(ddl), newDest, offset);
+ fContext->drawingManager()->createDDLTask(std::move(ddl), std::move(newDest), offset);
}
bool GrDirectContextPriv::compile(const GrProgramDesc& desc, const GrProgramInfo& info) {
diff --git a/src/gpu/GrDirectContextPriv.h b/src/gpu/GrDirectContextPriv.h
index 5fc9c2d..0c4dc15 100644
--- a/src/gpu/GrDirectContextPriv.h
+++ b/src/gpu/GrDirectContextPriv.h
@@ -131,7 +131,8 @@
return fContext->onGetSmallPathAtlasMgr();
}
- void createDDLTask(sk_sp<const SkDeferredDisplayList>, GrRenderTargetProxy* newDest,
+ void createDDLTask(sk_sp<const SkDeferredDisplayList>,
+ sk_sp<GrRenderTargetProxy> newDest,
SkIPoint offset);
bool compile(const GrProgramDesc&, const GrProgramInfo&);
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index c4ed592..ccc1ea7 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -616,7 +616,7 @@
}
void GrDrawingManager::createDDLTask(sk_sp<const SkDeferredDisplayList> ddl,
- GrRenderTargetProxy* newDest,
+ sk_sp<GrRenderTargetProxy> newDest,
SkIPoint offset) {
SkDEBUGCODE(this->validate());
@@ -641,7 +641,7 @@
// Here we jam the proxy that backs the current replay SkSurface into the LazyProxyData.
// The lazy proxy that references it (in the DDL opsTasks) will then steal its GrTexture.
- ddl->fLazyProxyData->fReplayDest = newDest;
+ ddl->fLazyProxyData->fReplayDest = newDest.get();
if (ddl->fPendingPaths.size()) {
GrCoverageCountingPathRenderer* ccpr = this->getCoverageCountingPathRenderer();
@@ -651,7 +651,7 @@
// Add a task to handle drawing and lifetime management of the DDL.
SkDEBUGCODE(auto ddlTask =) this->appendTask(sk_make_sp<GrDDLTask>(this,
- sk_ref_sp(newDest),
+ std::move(newDest),
std::move(ddl),
offset));
SkASSERT(ddlTask->isClosed());
diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h
index 5dadc5e..19c5154 100644
--- a/src/gpu/GrDrawingManager.h
+++ b/src/gpu/GrDrawingManager.h
@@ -116,7 +116,8 @@
void setLastRenderTask(const GrSurfaceProxy*, GrRenderTask*);
void moveRenderTasksToDDL(SkDeferredDisplayList* ddl);
- void createDDLTask(sk_sp<const SkDeferredDisplayList>, GrRenderTargetProxy* newDest,
+ void createDDLTask(sk_sp<const SkDeferredDisplayList>,
+ sk_sp<GrRenderTargetProxy> newDest,
SkIPoint offset);
private:
diff --git a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
index 6016abc..567f47c 100644
--- a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
+++ b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp
@@ -190,7 +190,7 @@
return false;
}
- direct->priv().createDDLTask(std::move(ddl), sdc->asRenderTargetProxy(), {0, 0});
+ direct->priv().createDDLTask(std::move(ddl), sdc->asRenderTargetProxyRef(), {0, 0});
return true;
}
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 43ec497..ccc7ab7 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -384,7 +384,7 @@
return false;
}
- direct->priv().createDDLTask(std::move(ddl), sdc->asRenderTargetProxy(), offset);
+ direct->priv().createDDLTask(std::move(ddl), sdc->asRenderTargetProxyRef(), offset);
return true;
}