i965/fs: Add support for uniform array access with a variable index.
authorEric Anholt <eric@anholt.net>
Fri, 9 Nov 2012 00:06:24 +0000 (16:06 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 5 Dec 2012 01:11:11 +0000 (17:11 -0800)
commita64c1eb9b110f29b8abf803a8256306702629bdc
tree25c2e5ec6a799f667e388412add80007ebde3c1e
parent67d9e7b5816a7643220c854ea1ed330f8363a3e0
i965/fs: Add support for uniform array access with a variable index.

Serious Sam 3 had a shader hitting this path, but it's used rarely so it
didn't show a significant performance difference (n=7).  It does reduce
compile time massively, though -- one shader goes from 14s compile time
and 11723 instructions generated to .44s and 499 instructions.

Note that some shaders lose 16-wide mode because we don't support
16-wide and pull constants at the moment (generally, things looping over
a few-element array where the loop isn't getting unrolled).  Given that
those shaders are being generated with 15-20% fewer instructions, it
probably outweighs the loss of 16-wide.
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
src/mesa/drivers/dri/i965/brw_shader.cpp