I am trying to use the NV_transform_feedback extension in OpenGL to expand a compact description of rectangles and trapezoids to one that is directly renderable by OpenGL. For the shaders that will render the primitives, a lot of data needs to be replicated across all vertices of a primitive, and I am using the texture coordinates for this.

Feeding a transform feedback shader with GL_POINTS and expanding each of these to 8 vec4 varyings works just fine, and allows transfer of rectangles to GPU memory with minimal latency. But for the trapezoid structures, I need to output even more varyings. However, trying to output 12 vec4 varyings results in a GL_INVALID_OPERATION when calling glDrawArrays to do the expansion with the transform feedback shader. And calling glDrawArrays too many times even makes the machine lock up, forcing a hardware reboot. More than enough space has been allocated in the VBO to hold the recorded data.

In the specs of the NV_transform_feedback extension, it says that MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV gives you the maximum numbers of components that can be output by a transform feedback shader. This is reported as 16 by the 100.14.19 Linux driver and as 64 on the 169.04 and later drivers. But no matter which driver I use, the result is the same.

I have spent much time trying to figure out the reasons for the error but still cannot make any sense of why it does not work as expected. Any help on this would be much appreciated.