nir/lower_io_to_vector: add flat mode
authorRhys Perry <pendingchaos02@gmail.com>
Fri, 17 May 2019 14:04:39 +0000 (15:04 +0100)
committerRhys Perry <pendingchaos02+freedesktop@gmail.com>
Fri, 6 Sep 2019 15:38:04 +0000 (15:38 +0000)
commitbcd14756eec808f2f04d38a8880488188eb0eef0
treeb3840492eaf01ea983dfd3aa890d8ce675847f7c
parent300e758b7c428289909b318bb0df230b22ab5d9b
nir/lower_io_to_vector: add flat mode

This has lower_io_to_vector try to turn variables into arrays of 4-sized
vectors when possible and fall back to the old approach when that isn't
possible.

This is so that lower_io_to_vector can guarantee that only one variable is
used for each fragment shader output.

v2: handle dual-source blending
v3: don't try to merge structs and non-32-bit types in get_flat_type()
v3: fix per-vertex inputs
v3: fix and cleanup location advancement in get_flat_type() and it's
    calling code
v4: prioritize the original mode over the flat mode
v4: don't create flat variables to merge only one variable
v5: don't skip an entire slot when encountering structs in the old mode

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/compiler/nir/nir_lower_io_to_vector.c