glx: Fix indirect multi-texture GL_DOUBLE coordinate arrays.
authorColin McDonald <cjmmail10-bz@yahoo.co.uk>
Thu, 23 Jun 2016 02:19:30 +0000 (19:19 -0700)
committerMatt Turner <mattst88@gmail.com>
Fri, 8 Jul 2016 21:03:16 +0000 (14:03 -0700)
commitb36644bae611d608cee8ef0d5dd1200313234b73
treedec06237c336400a1030153dd6b2497a03725766
parent5ced100bf522f123978adeebe763cd60d7402c68
glx: Fix indirect multi-texture GL_DOUBLE coordinate arrays.

There is no draw arrays protocol support for multi-texture coordinate
arrays, so it is implemented by sending batches of immediate mode
commands from emit_element_none in indirect_vertex_array.c.  This sends
the target texture unit (which has been previously setup in the
array_state header field), followed by the texture coordinates.  But for
GL_DOUBLE coordinates the texture unit must be sent *after* the texture
coordinates. This is documented in the glx protocol description, and can
also be seen in the indirect.c immediate mode commands generated from
gl_API.xml. Sending the target texture unit in the wrong place can crash
the remote X server.

To fix this required some more extensive changes to
indirect_vertex_array.c and indirect_vertex_array_priv.h, in order to
remove the texture unit value out of the array_state "header" field, and
send it separately.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61907
src/glx/indirect_vertex_array.c
src/glx/indirect_vertex_array_priv.h