aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-07-20 16:36:01 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-07-20 20:59:52 +0000
commit8761e0c546d9be6db03710edb7b3ff5e86c3af15 (patch)
treefe42eb76c62306fd54f677b21af59c59c73ad245 /src
parent807371c15bd742efb98a9df6e1dee73e8bda8af5 (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.cpp11
-rw-r--r--src/gpu/vk/GrVkSemaphore.cpp2
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;