In Simple Engine, we apply this principle of barrier batching in our Renderer::Render loop. For example, during the Opaque Pass to Post-Processing transition, we collect all necessary image barriers—including those for the scene color and the depth buffer—into a single vk::DependencyInfo.
One optimization we plan for a future version of Simple Engine is to centralize this further. By implementing a "Barrier Manager" that collects barriers across all systems (Renderer, Physics, Audio), we can reduce our total number of pipelineBarrier2 calls per frame. This is a critical part of our roadmap toward a full Render Graph system, where all synchronization is calculated globally for each frame, ensuring that we never emit redundant barriers and that all transitions are batched for maximum hardware performance.