Recording commands on multiple threads
To record commands using multiple threads, it is necessary to use different command buffers, at least one on each thread, to record the commands and then submit them to the main queue. To be more precise, in Vulkan, any kind of pool needs to be externally synchronized by the user; thus, the best option is to have an association between a thread and a pool.
In the case of command buffers, they are allocated from the associated pool and commands registered in it. Pools can be CommandPools
, DescriptorSetPools
, and QueryPools
(for time and occlusion queries), and once associated with a thread, they can be used freely inside that thread of execution.
The execution order of the command buffers is based on the order of the array submitted to the main queue – thus, from a Vulkan perspective, sorting can be performed on a command buffer level.
We will see how important the allocation strategy for command buffers is and how easy it is to...