nir: add vec2_index_32bit_offset address format
authorConnor Abbott <cwabbott0@gmail.com>
Mon, 29 Jun 2020 17:47:57 +0000 (19:47 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 6 Jul 2020 16:44:15 +0000 (16:44 +0000)
commit12e18d9e7aded72dbfa513bce010e793f0d31cf9
treecefe82fee6fa05bd8651cad7c9d14c26489cbec4
parent7ab73160032012272a47e6a22e3152489b98b2a0
nir: add vec2_index_32bit_offset address format

For turnip, we use the "bindless" model on a6xx. Loads and stores with
the bindless model require a bindless base, which is an immediate field
in the instruction that selects between 5 different 64-bit "bindless
base registers", a 32-bit descriptor index that's added to the base, and
the usual 32-bit offset. The bindless base usually, but not always,
corresponds to the Vulkan descriptor set.  We can handle the case where
the base is non-constant by using a bunch of if-statements, to make it a
little easier in core NIR, and this seems to be what Qualcomm's driver
does too. Therefore, the pointer format we need to use in NIR has a vec2
index, for the bindless base and descriptor index. Plumb this format
through core NIR.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5683>
src/compiler/nir/nir.h
src/compiler/nir/nir_intrinsics.py
src/compiler/nir/nir_lower_io.c