mesa: Ensure that transform feedback refers to the correct program.
authorPaul Berry <stereotype441@gmail.com>
Wed, 22 Jan 2014 13:14:48 +0000 (05:14 -0800)
committerPaul Berry <stereotype441@gmail.com>
Thu, 23 Jan 2014 21:41:01 +0000 (13:41 -0800)
commite190709119d8eb85c67bfbad5be699d39ad0118e
tree69e5f560a4be8512adee7c6f7033868cbde6a972
parent9cee3ff562f3e4b51bfd30338fd1ba7716ac5737
mesa: Ensure that transform feedback refers to the correct program.

Previous to this patch, the _mesa_{Begin,Resume}TransformFeedback
functions were using ctx->Shader.CurrentProgram[MESA_SHADER_VERTEX] to
find the program that would be the source of transform feedback data.
This isn't correct--if there's a geometry shader present it should be
ctx->Shader.CurrentProgram[MESA_SHADER_GEOMETRY].  (These might be
different if separate shader objects are in use).

This patch creates a function get_xfb_source(), which figures out the
correct program to use based on GL state, and updates
_mesa_{Begin,Resume}TransformFeedback to call it.  get_xfb_source() is
written in terms of the gl_shader_stage enum, so it should not need
modification when we add tessellation shaders in the future.  It also
creates a new driver flag, NewTransformFeedbackProg, which is flagged
whenever this program changes.

To reduce future confusion, this patch also rewords some comments and
error message text to avoid referring to vertex shaders.

Cc: 10.0 <mesa-stable@lists.freedesktop.org>
v2: make the for loop in get_xfb_source() clearer.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/main/mtypes.h
src/mesa/main/transformfeedback.c