Improving load times with a pipeline cache
Each time we create a graphics pipeline and, to a lesser extent, a compute pipeline, the driver has to analyze and compile the shaders we have provided. It also has to inspect the state we have defined in the creation structure and translate it into instructions to program the different units of the GPU. This process is quite expensive, and it’s one of the reasons why, in Vulkan we have to define most of the pipeline state upfront.
In this section, we are going to add pipeline caching to our GPU device implementation to improve loading times. If your application has to create thousands of pipelines, it can incur a significant startup time or, for a game, long loading times between levels.
The technique described in this section will help to reduce the time spent creating pipelines. The first change you will notice is that the GpuDevice::create_pipeline
method accepts a new optional parameter that defines the path of a pipeline...