i965: Fix up the handling of point sprite coordinate replacement.
authorEric Anholt <eric@anholt.net>
Mon, 8 Mar 2010 20:12:31 +0000 (12:12 -0800)
committerEric Anholt <eric@anholt.net>
Tue, 16 Mar 2010 19:14:48 +0000 (12:14 -0700)
commit1254d3d315497636a2445533372dd3d1fa6f96dc
tree84774a14086d71589926c4701f537efa20435d58
parent837f003eeb1ce56c2d8285e82ee86b5ffbb19442
i965: Fix up the handling of point sprite coordinate replacement.

The code was walking over the regs of pairs of attributes and checking
whether the attribute with a given reg index had point sprite enabled.
So the point sprite setup code was rarely even getting executed.
Instead, we need to determine which channels of a reg need point
sprite coordinate replacement.  In addition, it was multiplying the
attribute by 1/w, when it's supposed to cover (0, 1) in each direction
regardless of w, and it wasn't filling in the Z and W components of
the texcoord as specified.

Fixes piglit point-sprite and the spriteblast demo.  Bug #24431, #22245.
(cherry picked from commit bc632d04370566c1156cbd0345fe303834f0b910)
src/mesa/drivers/dri/i965/brw_sf.c
src/mesa/drivers/dri/i965/brw_sf.h
src/mesa/drivers/dri/i965/brw_sf_emit.c