In modern computer graphics, most of the rendering and processing of image data (such as vertices, pixels, or fragments) is done with a programmable pipeline and shaders. Shaders, to operate properly and to generate appropriate results, need to access additional data sources such as textures, samplers, buffers, or uniform variables. In Vulkan, these are provided through sets of descriptors.
Descriptors are opaque data structures that represent shader resources. They are organized into groups or sets and their contents are specified by descriptor set layouts. To provide resources to shaders, we bind descriptor sets to pipelines. We can bind multiple sets at once. To access resources from within shaders, we need to specify from which set and from which location within a set (called a binding) the given resource is acquired.
In this chapter, we will learn about the various descriptor types. We will see...