i965: allow for nonconsecutive elements of gl_ClipDistance to be enabled.
authorPaul Berry <stereotype441@gmail.com>
Tue, 20 Sep 2011 23:43:06 +0000 (16:43 -0700)
committerPaul Berry <stereotype441@gmail.com>
Wed, 28 Sep 2011 18:38:03 +0000 (11:38 -0700)
commita864b82a04efd0642f5b2a9489b3c20dac46551f
tree8d673d1196130e8320ef23a3a4feda1ecbf4f5d1
parente6c8027ccb44de58a51956306dfe93146dcbf526
i965: allow for nonconsecutive elements of gl_ClipDistance to be enabled.

When using user-defined clipping planes, the i965 driver compacts the
array of clipping planes so that disabled clipping planes do not
appear in it--this saves precious push constant space and makes it
easier to generate the pre-GEN6 clip program.  As a result, when
enabling clipping planes in GEN6+ hardware, we always enable clipping
planes 0 through n-1 (where n is the number of clipping planes
enabled), regardless of which clipping planes the user actually
requested.

However, we can't do this when using gl_ClipDistance, because it would
be prohibitively complex to compact the gl_ClipDistance array inside
the user-supplied vertex shader.  So, when enabling clipping planes in
GEN6+ hardware, if gl_ClipDistance is in use, we need to pass the
user-supplied enable flags directly through to the hardware rather
than just enabling the first n planes.

Fixes Piglit test vs-clip-distance-enables.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_state.h
src/mesa/drivers/dri/i965/gen6_clip_state.c
src/mesa/drivers/dri/i965/gen7_clip_state.c