Существует несколько способов обработки синхронизации в Vulkan. Вот как я это понимаю:
- Заборы - это GPU для синхронизации процессора.
- Семафоры - это графические процессоры GPU, они используются для синхронизации очереди (в тех же или разных очередях).
- События более общие, reset и отмечены как на CPU, так и на GPU.
- Барьеры используются для синхронизации внутри командного буфера.
В моем случае у меня есть два командных буфера. И я хочу, чтобы второй буфер команды выполнялся после первого.
submitInfo.pCommandBuffers = &firstCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
// wait for first command buffer to finish
submitInfo.pCommandBuffers = &secondCommandBuffer;
vkQueueSubmit(queue, 1, &submitInfo, VK_NULL_HANDLE);
Какая синхронизация лучше всего подходит для этого?
Если я использую vkQueueWaitIdle(queue)),
, это то же самое, что использовать забор, или я должен использовать для этого события или семафоры?
Если я посылаю несколько командных буферов в очередь в одно и то же время:
std::vector<VkCommandBuffer> submitCmdBuffers = {
firstCommandBuffer,
secondCommandBuffer
};
submitInfo.commandBufferCount = submitCmdBuffers.size();
submitInfo.pCommandBuffers = submitCmdBuffers.data();
Есть ли способ синхронизации между первым и вторым?