nir: Make gl_nir_lower_samplers use gl_nir_lower_samplers_as_deref
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 3 Jan 2019 07:34:19 +0000 (23:34 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 7 Jan 2019 22:25:04 +0000 (14:25 -0800)
commitf003859f97cab3dfe63985b21d95787b8403de49
treea8e822b1b569c0c63a08dffed0ed3470a79229d3
parentc69f9297cfb6a1f29579fefd3b969d7ad78ec869
nir: Make gl_nir_lower_samplers use gl_nir_lower_samplers_as_deref

These days, we have two sampler lowering passes.  The newer one,
gl_nir_lower_samplers_as_deref, is used by radeonsi.  It rewrites
variables to drop structures out of sampler deref chains, to make
life simpler.  It then sets var->data.binding for non-bindless
sampler and image variables based on the GL uniform storage's
opaque index values.

The older one converts sampler deref chains (nir_tex_src_texture_deref)
to a numerical offset (nir_tex_src_texture_offset).  It also stores the
constant-valued portion of that number in tex->texture_index, making
life really simple for drivers that don't support indirects.  It too
pokes at GL uniform storage's opaque index values.

Logically, we can do the first pass (simplify derefs, set bindings)
then the second (turn derefs to offsets, set texture_index).  This
patch does exactly that, eliminating some redundancy (only one pass
has to poke at GL uniform storage), and gaining proper var->data.binding
values for drivers using the full lowering.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/glsl/gl_nir_lower_samplers.c