i965/gs: Set the REORDER bit in 3DSTATE_GS.
authorPaul Berry <stereotype441@gmail.com>
Wed, 28 Aug 2013 21:25:31 +0000 (14:25 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 15 Oct 2013 18:40:32 +0000 (11:40 -0700)
commitafccf3d8e706d01f72f2631c72e3a41cf9d7b100
tree91793cb046e88038ae9322277e677c3a06e0216a
parentcaf9cef7eee77f736ff76a65f385bf718efd1dc1
i965/gs: Set the REORDER bit in 3DSTATE_GS.

Ivy Bridge's "reorder enable" bit gives us a binary choice for the
order in which vertices from triangle strips are delivered to the
geometry shader.  Neither choice follows the OpenGL spec, but setting
the bit is better, because it gets triangle orientation correct.

Haswell replaces the "reorder enable" bit with a new "reorder mode"
bit (which occupies the same location in the command packet).  This
bit gives us a different binary choice, which affects both triangle
strips and triangle strips with adjacency.  Setting the bit ("reorder
trailing") gives the proper order according to the OpenGL spec.

So in either case we want to set the bit.

On Ivy Bridge, fixes piglit test "triangle-strip-orientation".

On Haswell, fixes piglit tests "glsl-1.50-geometry-primitive-types
{GL_TRIANGLE_STRIP,GL_TRIANGLE_STRIP_ADJACENCY}" and
"glsl-1.50-geometry-tri-strip-ordering-with-prim-restart *".

v2: Rename the bit to "REORDER_TRAILING" for consistency with Haswell
docs.

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/gen7_gs_state.c