i965/fs: Support arbitrarily large sampler state indices on Haswell+.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 18 Jan 2014 21:29:39 +0000 (13:29 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 23 Jan 2014 01:18:48 +0000 (17:18 -0800)
commit6943ac0bd9d0d07019cffbbcb5189aa8d67b729b
treecf9131731e900326022d6220105edd371de7af2b
parentd7450e52e67125bfff74510ee4e48bb1ce0751e7
i965/fs: Support arbitrarily large sampler state indices on Haswell+.

The message descriptor's "Sampler Index" field is only 4 bits (on all
generations of hardware), so it can only represent indices 0 through 15.

Haswell introduced a new field in the message header - "Sampler State
Pointer".  Normally, this is copied straight from g0, but we can also
add a byte offset (as long as it's a multiple of 32).

This patch uses a "Sampler State Pointer" offset to select a group of
16 sampler states, and then uses the "Sampler Index" field to select
the state within that group.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_fs_generator.cpp
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp