But that’s not what I was asking about. Whether bindless textures are a practically available tool for OpenGL has nothing to do with whether Vulkan is a practically available tool.
Rewriting your OpenGL application to use bindless textures is completely orthogonal to rewriting your application to use Vulkan. With arrays of samplers (note: not the same thing as an array texture), Vulkan can accomplish the effective equivalent of bindless textures: the ability to pass a number to a shader, which gets converted into a texture via some mechanism.
See, in the Vulkan resource model,
layout(set = 0, descriptor = 0) sampler2d arr; takes up exactly one descriptor. So, while there is a limit on the number of samplers you can have, that limit is not the same as the limit on the number of descriptors you can have. And for desktop GPUs, that limit is usually quite generous. Even 768 (the common Intel number for recent Vulkan implementations) is a pretty big number of textures to use.
In OpenGL, bindless textures work implicitly via residency and handles. In Vulkan, you accomplish the same thing explicitly. You have an array of samplers in a descriptor. Making a texture “resident” means putting that texture in the array. Your “handles” now become indices into that array representing that texture, and this index can be passed to the shader through any means that can generate an integer. The only difference is that, in Vulkan, “handles” are tied to “residency” unlike OpenGL.
So if you rewrite your application to use OpenGL bindless textures, and then later you want to rewrite your application to use Vulkan, your texture handling system won’t need to change much.