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.

Website References:

Vulkan Spec
Vulkan-Tutorial

YouTube:

Feeding your shaders

Contact Me