freedreno/ir3: pass sz to split_dest()
authorRob Clark <robclark@freedesktop.org>
Sat, 13 Jun 2015 13:14:31 +0000 (09:14 -0400)
committerRob Clark <robclark@freedesktop.org>
Sun, 21 Jun 2015 12:01:12 +0000 (08:01 -0400)
commit66a93a0ff9aa402c37aa9d00b4489715d611b496
treef2c86866aa26482b2ebbb0bd04794386ae9b561c
parent1ee4d51e7a68f8f2dcb52a0e2f9af81fdbe078a2
freedreno/ir3: pass sz to split_dest()

For query_levels, we generate a getinfo with writemask of (z), which RA
will consider as size==3.  But we were still generating four fanouts.
Which meant that RA would see it as two different register classes,
depending on the path to definer.  Ie. on the getinfo instruction itself
it would see size==3, but when chasing back through the fanouts it would
see size==4.

Easiest way to solve that is to just generate the chain of neighboring
fanouts to have the correct size in the first place.

Note: we may eventually want split_dest() to take start/end or wrmask
instead, since really we only need size==1.  But RA is not clever enough
for that, query_levels is not that common, and the other two registers
that get allocated are never used so those register slots can be
immediately re-used.  So bunch of work for probably no real gain.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
src/gallium/drivers/freedreno/ir3/ir3_ra.c