One of the key high-level challenges of building Mesa drivers these days is figuring out how to best share code between a Vulkan driver and a Gallium driver. As a general rule, my recommendation is to make the back-end compiler consume texture ops and intrinsics that match the hardware binding model as closely as possible and have NIR lowering passes in each driver which lower to that model. Now, with the Iris Gallium driver and the modern Vulkan driver, both drivers compute the binding table layout up-front and pass complete absolute table indices to the back-end compiler.