Replacing multiple fences with a single timeline semaphore
In this section, we are going to explain how fences and semaphores are currently used in our renderer and how to reduce the number of objects we must use by taking advantage of timeline semaphores.
Our engine already supports rendering multiple frames in parallel using fences. Fences must be used to ensure the GPU has finished using resources for a given frame. This is accomplished by waiting on the CPU before submitting a new batch of commands to the GPU.
Figure 5.1 – The CPU is working on the current frame while the GPU is rendering the previous frame
There is a downside, however; we need to create a fence for each frame in flight. This means we will have to manage at least two fences for double buffering and three if we want to support triple buffering.
We also need multiple semaphores to ensure the GPU waits for certain operations to complete before moving on. For instance, we...