Skip to content

tu, ir3: Bindless descriptors

This switches turnip over to the bindless model used by the blob Vulkan driver, in addition adding a few extra goodies (fixing immutable samplers and descriptor update template support) that together with !4357 (merged) let us pass all of dEQP-VK.binding_model.* except for some RA failures.

The first few patches are just other things I found while debugging, and can be split out if people want. Then as prep work we change the push constant model, add the register and instruction set definitions. Then we plumb through support in ir3, including fixing some bugs with ldc which we need to use with bindless UBO's, and reworking the UBO push analysis. Then we switch over turnip, add back CP_LOAD_STATE6 support, and fix a few other things I found along the way. I added template support mainly because it was in the same area, and it meant that I could run all the binding_model tests without tons of GPU hangs.

There are a few things left to do, namely fixing image and buffer sizes. I need to rebase !3501 (merged) on top of this, and maybe use something similar for the buffer size too (although the blob seems to use constants for that still). I also have an envytools patch to be able to decode CP_LOAD_STATE6 packets with a bindless source, although it depends on the register changes in this MR, and register changes are now being merged through Mesa first so this MR has to land first.

Merge request reports