diff options
author | Greg Daniel <egdaniel@google.com> | 2017-07-20 16:36:01 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-20 20:59:52 +0000 |
commit | 8761e0c546d9be6db03710edb7b3ff5e86c3af15 (patch) | |
tree | fe42eb76c62306fd54f677b21af59c59c73ad245 /src | |
parent | 807371c15bd742efb98a9df6e1dee73e8bda8af5 (diff) |
Add ability to pre-initialize vulkan semaphores when flushing surfaces
Bug: skia:
Change-Id: I2d3eb68d2ac6045fe3e30350fdd21140e22861d7
Reviewed-on: https://skia-review.googlesource.com/24645
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
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; |