15#include <vsg/core/Object.h>
16#include <vsg/vk/Fence.h>
17#include <vsg/vk/Queue.h>
18#include <vsg/vk/State.h>
27 VkResult submitCommandsToQueue(
CommandPool* commandPool,
Fence* fence, uint64_t timeout,
Queue* queue, F function)
29 VkResult result = VK_SUCCESS;
31 auto commandBuffer = commandPool->allocate();
32 auto state = State::create(
Slots{4, 4});
33 state->connect(commandBuffer);
35 VkCommandBufferBeginInfo beginInfo = {};
36 beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
37 beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
39 vkBeginCommandBuffer(*commandBuffer, &beginInfo);
41 function(*commandBuffer);
43 vkEndCommandBuffer(*commandBuffer);
45 VkSubmitInfo submitInfo = {};
46 submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
47 submitInfo.commandBufferCount = 1;
48 submitInfo.pCommandBuffers = commandBuffer->data();
53 result = queue->submit(submitInfo, fence);
54 if (result == VK_SUCCESS && timeout > 0)
56 result = fence->wait(timeout);
61 result = queue->submit(submitInfo, VK_NULL_HANDLE);
62 if (result == VK_SUCCESS)
64 result = queue->waitIdle();
72 VkResult submitCommandsToQueue(
CommandPool* commandPool,
Queue* queue, F function)
74 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
max slot values used for general state and view state related State::stateStacks
Definition Slots.h:22