ir3/nir: Add a new pass 'ir3_nir_lower_io_offsets'
authorEduardo Lima Mitev <elima@igalia.com>
Sun, 13 Jan 2019 19:10:34 +0000 (20:10 +0100)
committerEduardo Lima Mitev <elima@igalia.com>
Wed, 13 Mar 2019 20:19:44 +0000 (21:19 +0100)
commit9dd0cfafc9ec4b4efb1e2df0329afc7a5a534231
tree0752c6c7dcdcaec22ab5c4330d69196e6dc653ed
parent6ff50a488a12f86069bff88e3ad1b6473a76f014
ir3/nir: Add a new pass 'ir3_nir_lower_io_offsets'

This NIR->NIR pass implements offset computations that are currently
done on the IR3 backend compiler, to give NIR a better chance of
optimizing them.

For now, it supports lowering the dword-offset computation for SSBO
instructions. It will take an SSBO intrinsic and replace it with the
new ir3-specific version that adds an extra source. That source will
hold the SSA value resulting from inserting a division by 4 (an SHR op)
of the original byte-offset source already provided by NIR in one of
the intrinsic sources.

Note that on a6xx the original byte-offset is not needed, so we could
potentially replace that source instead of adding a new one. But to
keep things simple and consistent we always add the new source and
a6xx will just ignore the original one.

Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/Makefile.sources
src/freedreno/ir3/ir3_nir.h
src/freedreno/ir3/ir3_nir_lower_io_offsets.c [new file with mode: 0644]
src/freedreno/ir3/meson.build