diff options
Diffstat (limited to 'src/gpu/vk/GrVkSemaphore.cpp')
-rw-r--r-- | src/gpu/vk/GrVkSemaphore.cpp | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/gpu/vk/GrVkSemaphore.cpp b/src/gpu/vk/GrVkSemaphore.cpp index d84635f85e..d201458b27 100644 --- a/src/gpu/vk/GrVkSemaphore.cpp +++ b/src/gpu/vk/GrVkSemaphore.cpp @@ -7,6 +7,7 @@ #include "GrVkSemaphore.h" +#include "GrBackendSemaphore.h" #include "GrVkGpu.h" #include "GrVkUtil.h" @@ -15,7 +16,7 @@ #undef CreateSemaphore #endif -sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu) { +sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu, bool isOwned) { VkSemaphoreCreateInfo createInfo; memset(&createInfo, 0, sizeof(VkFenceCreateInfo)); createInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; @@ -25,11 +26,22 @@ sk_sp<GrVkSemaphore> GrVkSemaphore::Make(const GrVkGpu* gpu) { GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateSemaphore(gpu->device(), &createInfo, nullptr, &semaphore)); - return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore)); + return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, isOwned)); } -GrVkSemaphore::GrVkSemaphore(const GrVkGpu* gpu, VkSemaphore semaphore) : INHERITED(gpu) { - fResource = new Resource(semaphore); +sk_sp<GrVkSemaphore> GrVkSemaphore::MakeWrapped(const GrVkGpu* gpu, + VkSemaphore semaphore, + GrWrapOwnership ownership) { + if (VK_NULL_HANDLE == semaphore) { + return nullptr; + } + return sk_sp<GrVkSemaphore>(new GrVkSemaphore(gpu, semaphore, + kBorrow_GrWrapOwnership != ownership)); +} + +GrVkSemaphore::GrVkSemaphore(const GrVkGpu* gpu, VkSemaphore semaphore, bool isOwned) + : INHERITED(gpu) { + fResource = new Resource(semaphore, isOwned); } GrVkSemaphore::~GrVkSemaphore() { @@ -41,7 +53,13 @@ GrVkSemaphore::~GrVkSemaphore() { } void GrVkSemaphore::Resource::freeGPUData(const GrVkGpu* gpu) const { - GR_VK_CALL(gpu->vkInterface(), - DestroySemaphore(gpu->device(), fSemaphore, nullptr)); + if (fIsOwned) { + GR_VK_CALL(gpu->vkInterface(), + DestroySemaphore(gpu->device(), fSemaphore, nullptr)); + } +} + +void GrVkSemaphore::setBackendSemaphore(GrBackendSemaphore* backendSemaphore) const { + backendSemaphore->initVulkan(fResource->semaphore()); } |