On Friday, June 20, 2014 08:51:14 AM Iago Toral wrote: > On Wed, 2014-06-18 at 13:38 -0700, Ian Romanick wrote: > > On 06/18/2014 02:51 AM, Iago Toral Quiroga wrote: > (...) > > > + /* From the ARB_gpu_shader5 spec: > > > + * > > > + * "Multiple vertex streams are supported only if the output primitive > > > + * type is declared to be "points". A program will fail to link if it > > > + * contains a geometry shader calling EmitStreamVertex() or > > > + * EndStreamPrimitive() if its output primitive type is not "points". > > > + * > > > + * However, in the same spec: > > > + * > > > + * "The function EmitVertex() is equivalent to calling EmitStreamVertex() > > > + * with <stream> set to zero." > > > + * > > > + * And: > > > + * > > > + * "The function EndPrimitive() is equivalent to calling > > > + * EndStreamPrimitive() with <stream> set to zero." > > > + * > > > + * Since we can call EmitVertex() and EndPrimitive() when we output > > > + * primitives other than points, calling EmitStreamVertex(0) or > > > + * EmitEndPrimitive(0) should not produce errors. This it also what Nvidia > > > + * does. Currently we only set prog->Geom.UsesStreams to TRUE when > > > + * EmitStreamVertex() or EmitEndPrimitive() are called with a non-zero > > > + * stream. > > > > Does AMD also behave this way? If so, I can submit a spec bug to make > > these explicitly legal. Otherwise, I think we should not allow it. We > > probably ought to check Apple and the Intel Windows driver too... > > I could test this on the proprietary AMD Linux driver: > > A geometry shader with output triangle_strip using EmitStreamVertex(0) > and EmitEndPrimitive(0) works fine: no link errors, correct output. > > A geometry shader with output triangle_strip using EmitStreamVertex(1) > does not produce a link error (which is wrong by the spec) and produces > incorrect output (blank screen). > > A geometry shader with output triangle_strip using EmitStreamVertex(0) > that also calls EmitStreamPrimitive(1) does not produce a link error > (which is wrong by the spec) and produces correct output (the end stream > primitive on stream 1 is really a no-op since there are no vertices > emitted on that stream). > > So I'd say that AMD is not respecting the spec too much here, but it > looks like using EmitStreamVertex(0) or EndStreamPrimitive(0) with > output types other than points works on both Nvidia and AMD proprietary > drivers in the end. > > So Ian, what do you think we should do? > > Iago
For what it's worth, AMD also supports writing lines and triangles to multiple streams, not just points: http://www.opengl.org/registry/specs/AMD/transform_feedback3_lines_triangles.txt --Ken
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev