15#include <vsg/core/Object.h>
16#include <vsg/vk/Fence.h>
17#include <vsg/vk/Queue.h>
26 VkResult submitCommandsToQueue(
CommandPool* commandPool,
Fence* fence, uint64_t timeout,
Queue* queue, F function)
28 VkResult result = VK_SUCCESS;
30 auto commandBuffer = commandPool->allocate();
32 VkCommandBufferBeginInfo beginInfo = {};
33 beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
34 beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
36 vkBeginCommandBuffer(*commandBuffer, &beginInfo);
38 function(*commandBuffer);
40 vkEndCommandBuffer(*commandBuffer);
42 VkSubmitInfo submitInfo = {};
43 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
44 submitInfo.commandBufferCount = 1;
45 submitInfo.pCommandBuffers = commandBuffer->data();
50 result = queue->submit(submitInfo, fence);
51 if (result == VK_SUCCESS && timeout > 0)
53 result = fence->wait(timeout);
58 result = queue->submit(submitInfo, VK_NULL_HANDLE);
59 if (result == VK_SUCCESS)
61 result = queue->waitIdle();
69 VkResult submitCommandsToQueue(
CommandPool* commandPool,
Queue* queue, F function)
71 return submitCommandsToQueue(commandPool,
nullptr, 0, queue, function);
Definition CommandPool.h:25
Queue encapsulates a single vkQueue, used to submit vulkan commands for processing.
Definition Queue.h:28