Shader Resources
Resources in Vulkan are generally shader inputs and outputs which resides in memory.
These are invoked/referenced via "Descriptors". Most of these resources are generalized, but there are specialized ones- Render Targets, Vertex Inputs- which are specialized by hardware vendors.
Buffers and Textures: These are arrays of data and can be read and/or write to: depending on how you set them up.
Samplers: These are parameter sets for looking up data into images, filtering them and computing the coordinates that you're going to use to address the image.
Input Attachments: They are special kind of unfiltered images.
Vertex Inputs: Most of the hardware has vertex input and fetch as a fixed function stage. For Vulkan, we have to provide shader binding information for these inputs.
- Vulkan Descriptors
-
They are just handles to the vulkan objects and contains additional information like type and metadata. This allows api to make connection between actual application resource and shader.
- Descriptor Sets
-
They are just the way of organizing resources into sort of blocks.
Firstly, you define a layout, where you specify shader resource's data- binding, type, stage it is going to be used in etc. This is called a Descriptor Set Layout. These layouts are like blueprints of shader resources and you can stamp out descriptor sets out of these layouts.
Usefulness: If multiple pipelines share the same shader bindings then even if you change the pipeline, descriptors live on. The api takes care of this. - Descriptor Pool
-
Descriptors cannot be directly allocated, instead you can create a pool specifying type of descriptors and maximum sets of each and then, you can allocate individual descriptors from the pool.