i965/gs: Implement basic gl_PrimitiveIDIn functionality.
authorPaul Berry <stereotype441@gmail.com>
Mon, 12 Aug 2013 15:00:10 +0000 (08:00 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 17 Sep 2013 22:18:14 +0000 (15:18 -0700)
commit3374dabce7f7d3a8a698acc5354eb512e7a4d1af
tree7a89d4297b94cbc4b0adfc2059d0f55a0f7437b2
parentf67fa8f3c85a991d3d88409a2c3981cd9b2f2120
i965/gs: Implement basic gl_PrimitiveIDIn functionality.

If the geometry shader refers to the built-in variable
gl_PrimitiveIDIn, we need to set a bit in 3DSTATE_GS to tell the
hardware to dispatch primitive ID to r1, and we need to leave room for
it when allocating registers.

Note: this feature doesn't yet work properly when software primitive
restart is in use (the primitive ID counter will incorrectly reset
with each primitive restart, since software primitive restart works by
performing multiple draw calls).  I plan to address that in a future
patch series.

Fixes piglit test "spec/glsl-1.50/execution/geometry/primitive-id-in".

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_vec4_gs.c
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
src/mesa/drivers/dri/i965/gen7_gs_state.c