Up until now we were using a VkFence for GPU-to-CPU synchronization. This has some limitations that become a blocker when trying to have multiple command buffers in flight at once (e.g. for multi-output). It's desirable to implement a command buffer pool 1, but VkFence cannot be used to track command buffer completion for individual subpasses.
Let's just switch to timeline semaphores 2, which fix this issue, make synchronization a lot more ergonomic and are a core Vulkan 1.2 feature.