Quick answer: Vulkan descriptor indexing producing wrong texture samples in a bindless setup? Update-after-bind requires explicit flags - set VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT on the binding.

Bindless texture array sampled at index 47 returns the texture at index 0. Validation: 'descriptor not initialized before draw'.

Set update-after-bind

VkDescriptorBindingFlags flags =
  VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT |
  VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT;

Required for runtime-updated bindless arrays. Without it, validation rejects pre-record updates.

Use VK_EXT_descriptor_indexing

The extension formalizes bindless. Check device support; not all desktop GPUs claim full support even when they have it.

Partial binding for sparse arrays

Bindless arrays often have gaps. PartiallyBound lets undefined entries exist without triggering validation errors.

“Bindless in Vulkan is descriptor indexing plus flags. The flags are not implicit.”

Read the descriptor indexing spec once before building. The extension is well-documented; bugs come from skimming.