Creating a graphics pipeline requires us to provide lots of parameters. What's more, once set, these parameters can't be changed. Such an approach was taken to improve the performance of our application and present a stable and predictable environment to the driver. But, unfortunately, it is also uncomfortable for developers as they may need to create many pipeline objects with almost identical states that differ only in small details.
To circumvent this problem, dynamic states were introduced. They allow us to control some of the pipeline's parameters dynamically by recording specific functions in command buffers. And in order to do that, we need to specify which parts of the pipeline are dynamic. This is done by specifying pipeline dynamic states.