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