diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrRenderTargetContext.cpp | 11 | ||||
-rw-r--r-- | src/gpu/vk/GrVkSemaphore.cpp | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index 65f19e3c5c..c9898c7480 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -1426,7 +1426,12 @@ bool GrRenderTargetContext::prepareForExternalIO(int numSemaphores, SkTArray<sk_sp<GrSemaphore>> semaphores(numSemaphores); for (int i = 0; i < numSemaphores; ++i) { - semaphores.push_back(fContext->resourceProvider()->makeSemaphore(false)); + if (backendSemaphores[i].isInitialized()) { + semaphores.push_back(fContext->resourceProvider()->wrapBackendSemaphore( + backendSemaphores[i], kBorrow_GrWrapOwnership)); + } else { + semaphores.push_back(fContext->resourceProvider()->makeSemaphore(false)); + } // Create signal semaphore ops and force the final one to call flush. bool forceFlush = (i == (numSemaphores - 1)); std::unique_ptr<GrOp> signalOp(GrSemaphoreOp::MakeSignal(semaphores.back(), @@ -1438,7 +1443,9 @@ bool GrRenderTargetContext::prepareForExternalIO(int numSemaphores, this->drawingManager()->prepareSurfaceForExternalIO(fRenderTargetProxy.get()); for (int i = 0; i < numSemaphores; ++i) { - semaphores[i]->setBackendSemaphore(&backendSemaphores[i]); + if (!backendSemaphores[i].isInitialized()) { + semaphores[i]->setBackendSemaphore(&backendSemaphores[i]); + } } return true; } diff --git a/src/gpu/vk/GrVkSemaphore.cpp b/src/gpu/vk/GrVkSemaphore.cpp index d201458b27..38946f4566 100644 --- a/src/gpu/vk/GrVkSemaphore.cpp +++ b/src/gpu/vk/GrVkSemaphore.cpp @@ -18,7 +18,7 @@ sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu, bool isOwned) { VkSemaphoreCreateInfo createInfo; - memset(&createInfo, 0, sizeof(VkFenceCreateInfo)); + memset(&createInfo, 0, sizeof(VkSemaphoreCreateInfo)); createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; createInfo.pNext = nullptr; createInfo.flags = 0; |