Add Frame Graph Feature
Currently, it's difficult to add new workloads to the GPU and add new render passes in the Vulkan engine. Currently, render passes are in one big function called
renderFrame() inside of imstkVulkanRenderer.cpp. This is getting messy, especially with ensuring correct image layout transitions.
This is also problematic with compute shaders. The compute shader MR currently is asynchronous (async compute) with the render graph, but it only allows CPU read-back. I want to add support for Compute->Graphics transfer to easily allow for GPU physics.
The frame graph concept allows GPU workloads to be scheduled automatically and handle resource transitions/synchronization, particularly for explicit graphics APIs (Vulkan, DirectX 12, Metal, etc.). This is a relatively new (2017) idea for structuring a renderer: https://www.gdcvault.com/play/1024612/FrameGraph-Extensible-Rendering-Architecture-in
This feature will be slowly integrated into the Vulkan renderer.