Add option for client to own semaphores after telling to skia to wait.
Bug: chromium:1004772
Change-Id: Ifdad0b12925d13d3e896f6321c35312f9daa330c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/301216
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp
index c91065c..1fbdcdc 100644
--- a/src/gpu/GrRenderTargetContext.cpp
+++ b/src/gpu/GrRenderTargetContext.cpp
@@ -1705,7 +1705,8 @@
}
bool GrRenderTargetContext::waitOnSemaphores(int numSemaphores,
- const GrBackendSemaphore waitSemaphores[]) {
+ const GrBackendSemaphore waitSemaphores[],
+ bool deleteSemaphoresAfterWait) {
ASSERT_SINGLE_OWNER
RETURN_FALSE_IF_ABANDONED
SkDEBUGCODE(this->validate();)
@@ -1724,12 +1725,14 @@
auto resourceProvider = direct->priv().resourceProvider();
+ GrWrapOwnership ownership =
+ deleteSemaphoresAfterWait ? kAdopt_GrWrapOwnership : kBorrow_GrWrapOwnership;
+
std::unique_ptr<std::unique_ptr<GrSemaphore>[]> grSemaphores(
new std::unique_ptr<GrSemaphore>[numSemaphores]);
for (int i = 0; i < numSemaphores; ++i) {
grSemaphores[i] = resourceProvider->wrapBackendSemaphore(
- waitSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillWait,
- kAdopt_GrWrapOwnership);
+ waitSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillWait, ownership);
}
this->drawingManager()->newWaitRenderTask(this->asSurfaceProxyRef(), std::move(grSemaphores),
numSemaphores);