A dissemination of pipeline stages and how they interract with barriers and other sync operations in Vulkan™.
In my understanding of pipeline stages they are units of execution that run semi-independently. The vkCmd* commands operate on one or more stages. Copy and clear operations for example run on the TRANSFER
stage. Each stage can however can work on multiple commands at a time.
When a synchronization operation is issued like vkCmdPipelineBarrier
or vkCmdSetEvent
and in subpass dependencies you need to specify a srcStageMask
. This signifies which pipeline stages to wait on before doing the sync, in case of vkCmdSetEvent
setting the event to signaled. This allows the sync to only wait on certain stages.
The dstStageMask
on the other hand specifies which stages need to wait on the sync operation (plus any layout transitions and cache flushes) to complete, the other stages will continue executing. In vkSubmitInfo
and vkCmdWaitEvent
the mask indicates which stages wait on the semaphore