diff options
author | Greg Daniel <egdaniel@google.com> | 2018-01-22 16:11:35 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-01-22 21:41:45 +0000 |
commit | 48661b868fbbf7a6193ef49bb6a05a0df61e7c45 (patch) | |
tree | 13582c20667d91e8989f76c224d99f2231714730 /src/gpu/vk/GrVkSemaphore.cpp | |
parent | 2e6feed858c2b14b9083cf7d2b040a177dcb62ea (diff) |
Make use of VkSemaphores thread safe assuming use of the same VkQueue.
This allows us to re-enable support for multiple GrContexts in
GrBackendTextureImageGenerator.
Bug: skia:
Change-Id: Ifd6ac1ad81cdfbd1fd986467d8beb359399d6588
Reviewed-on: https://skia-review.googlesource.com/98340
Reviewed-by: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/vk/GrVkSemaphore.cpp')
-rw-r--r-- | src/gpu/vk/GrVkSemaphore.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/gpu/vk/GrVkSemaphore.cpp b/src/gpu/vk/GrVkSemaphore.cpp index 38946f4566..4a23c43eea 100644 --- a/src/gpu/vk/GrVkSemaphore.cpp +++ b/src/gpu/vk/GrVkSemaphore.cpp @@ -16,6 +16,8 @@ #undef CreateSemaphore #endif +SkMutex GrVkSemaphore::Resource::gMutex; + sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu, bool isOwned) { VkSemaphoreCreateInfo createInfo; memset(&createInfo, 0, sizeof(VkSemaphoreCreateInfo)); @@ -26,22 +28,26 @@ sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu, bool isOwned) { GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateSemaphore(gpu->device(), &createInfo, nullptr, &semaphore)); - return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, isOwned)); + return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, false, false, isOwned)); } sk_sp<GrVkSemaphore> GrVkSemaphore::MakeWrapped(const GrVkGpu* gpu, VkSemaphore semaphore, + WrapType wrapType, GrWrapOwnership ownership) { if (VK_NULL_HANDLE == semaphore) { return nullptr; } - return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, + bool prohibitSignal = WrapType::kWillWait == wrapType; + bool prohibitWait = WrapType::kWillSignal == wrapType; + return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, prohibitSignal, prohibitWait, kBorrow_GrWrapOwnership != ownership)); } -GrVkSemaphore::GrVkSemaphore(const GrVkGpu* gpu, VkSemaphore semaphore, bool isOwned) +GrVkSemaphore::GrVkSemaphore(const GrVkGpu* gpu, VkSemaphore semaphore, bool prohibitSignal, + bool prohibitWait, bool isOwned) : INHERITED(gpu) { - fResource = new Resource(semaphore, isOwned); + fResource = new Resource(semaphore, prohibitSignal, prohibitWait, isOwned); } GrVkSemaphore::~GrVkSemaphore() { |