From f1fe33f37ff9dc603c7d493ac299f85117bc6f0b Mon Sep 17 00:00:00 2001 From: saschawillems Date: Wed, 10 Aug 2016 20:55:12 +0200 Subject: [PATCH] Fence for text overlay command buffer submission --- base/vulkantextoverlay.hpp | 12 +++++++++--- base/vulkantools.h | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/base/vulkantextoverlay.hpp b/base/vulkantextoverlay.hpp index 107524f1..7aecd00c 100644 --- a/base/vulkantextoverlay.hpp +++ b/base/vulkantextoverlay.hpp @@ -66,6 +66,7 @@ private: VkCommandPool commandPool; std::vector frameBuffers; std::vector shaderStages; + VkFence fence; // Used during text updates glm::vec4 *mappedLocal = nullptr; @@ -138,7 +139,7 @@ public: vkDestroyRenderPass(vulkanDevice->logicalDevice, renderPass, nullptr); vkFreeCommandBuffers(vulkanDevice->logicalDevice, commandPool, static_cast(cmdBuffers.size()), cmdBuffers.data()); vkDestroyCommandPool(vulkanDevice->logicalDevice, commandPool, nullptr); - vkDestroyFence(vulkanDevice->logicalDevice, waitFence, nullptr); + vkDestroyFence(vulkanDevice->logicalDevice, fence, nullptr); } /** @@ -346,6 +347,10 @@ public: VkPipelineCacheCreateInfo pipelineCacheCreateInfo = {}; pipelineCacheCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO; VK_CHECK_RESULT(vkCreatePipelineCache(vulkanDevice->logicalDevice, &pipelineCacheCreateInfo, nullptr, &pipelineCache)); + + // Command buffer execution fence + VkFenceCreateInfo fenceCreateInfo = vkTools::initializers::fenceCreateInfo(); + VK_CHECK_RESULT(vkCreateFence(vulkanDevice->logicalDevice, &fenceCreateInfo, nullptr, &fence)); } /** @@ -688,9 +693,10 @@ public: submitInfo.pCommandBuffers = &cmdBuffers[bufferindex]; submitInfo.commandBufferCount = 1; - VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE)); + VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence)); - //todo: fence + VK_CHECK_RESULT(vkWaitForFences(vulkanDevice->logicalDevice, 1, &fence, VK_TRUE, UINT64_MAX)); + VK_CHECK_RESULT(vkResetFences(vulkanDevice->logicalDevice, 1, &fence)); } /** diff --git a/base/vulkantools.h b/base/vulkantools.h index 6953e867..0506488c 100644 --- a/base/vulkantools.h +++ b/base/vulkantools.h @@ -145,7 +145,7 @@ namespace vkTools VkFramebufferCreateInfo framebufferCreateInfo(); VkSemaphoreCreateInfo semaphoreCreateInfo(); - VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags); + VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags = VK_FLAGS_NONE); VkEventCreateInfo eventCreateInfo(); VkSubmitInfo submitInfo();