A render graph (or frame graph) is a system that manages the resources and execution of render passes in a renderer. There are many optimizations that a render graph can bring as well as things that it simplifies for the user such as texture aliasing, async work, memory barriers, pass culling, and resource creation and management.
Pluses:
Minuses:
I focused on just setting up the bare-bones render graph and being able to define render passes that the render graph can go through and build up a directed acyclic graph. After that I use topological sorting (a variation of Kahn’s algorithm) to select the order of render pass execution. For simplicity, I implemented the render graph to work for only one graphics queue and not supporting texture aliasing or compute shaders (in the render graph) yet. I wanted to get a basic version up and running that I can use and iterate on without the complexities of the optimization opportunities that render graphs bring, so that’s what I did. My current implementation supports pass culling, automated memory barriers, automated resource creation, and resource management (like resizing all textures based on the window size when the window is resized and lifetime management)
###