Descriptors

Much in the same way as Direct3D 12, Vulkan binds most of its resources using descriptors. The way in which this is done is a bit different, however.

A descriptor like in Direct3D 12 is not a CPU-visible object. It is an opaque object that is completely hidden from the user. Updating an individual descriptor will require a descriptor set, a call to vkUpdateDescriptorSets and specification of an index.

The largest difference in terms of resource descriptors is related to the method of updating: The descriptors in Direct3D 12 are bound to the root signature, and the root signature can be updated in-flight. However, any descriptor set update invalidates all command buffers currently using that descriptor set. This means descriptor sets in Vulkan are to be much more carefully constructed in Vulkan as binding a new set of textures in Vulkan will either require a new descriptor set, or dynamic indexing in the shader.