diff options
author | 2016-09-30 08:39:02 -0700 | |
---|---|---|
committer | 2016-09-30 08:39:03 -0700 | |
commit | 84741b308496409f4ff662658167221fc6801bbe (patch) | |
tree | c2a42e12fdf9083453bbc46c28d561208162d2d7 /src/gpu/vk/GrVkGpu.cpp | |
parent | 714750595581167b965e1530d6aae052818ad52a (diff) |
Add fence support for TransferBuffers
BUG=skia:4604
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2384463003
Review-Url: https://codereview.chromium.org/2384463003
Diffstat (limited to 'src/gpu/vk/GrVkGpu.cpp')
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index c14321937f..60a876373c 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -1888,3 +1888,31 @@ void GrVkGpu::submitSecondaryCommandBuffer(GrVkSecondaryCommandBuffer* buffer, this->didWriteToSurface(target, &bounds); } +GrFence SK_WARN_UNUSED_RESULT GrVkGpu::insertFence() const { + VkFenceCreateInfo createInfo; + memset(&createInfo, 0, sizeof(VkFenceCreateInfo)); + createInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + createInfo.pNext = nullptr; + createInfo.flags = 0; + VkFence fence = VK_NULL_HANDLE; + VkResult result = GR_VK_CALL(this->vkInterface(), CreateFence(this->device(), &createInfo, + nullptr, &fence)); + // TODO: verify that all QueueSubmits before this will finish before this fence signals + if (VK_SUCCESS == result) { + GR_VK_CALL(this->vkInterface(), QueueSubmit(this->queue(), 0, nullptr, fence)); + } + return (GrFence)fence; +} + +bool GrVkGpu::waitFence(GrFence fence, uint64_t timeout) const { + VkResult result = GR_VK_CALL(this->vkInterface(), WaitForFences(this->device(), 1, + (VkFence*)&fence, + VK_TRUE, + timeout)); + return (VK_SUCCESS == result); +} + +void GrVkGpu::deleteFence(GrFence fence) const { + GR_VK_CALL(this->vkInterface(), DestroyFence(this->device(), (VkFence)fence, nullptr)); +} + |