[Mesa-dev] [PATCH 9/9] i965/gs: implement EndPrimitive() functionality in the visitor.
Ian Romanick
idr at freedesktop.org
Mon Sep 9 10:13:37 PDT 2013
On 09/09/2013 11:31 AM, Paul Berry wrote:
> On 9 September 2013 09:18, Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
>
> On 09/09/2013 10:20 AM, Paul Berry wrote:
> > According to GLSL, the shader may call EndPrimitive() at any point
> > during its execution, causing the line or triangle strip currently
> > being output to be terminated and a new strip to be begun.
> >
> > This is implemented in gen7 hardware by using one control data bit per
> > vertex, to indicate whether EndPrimitive() was called after that
> > vertex was emitted.
> >
> > In order to make this work without sacrificing too much efficiency, we
> > accumulate 32 control data bits at a time in a GRF. When we have
> > accumulated 32 bits (or when the shader terminates), we output them to
> > the appropriate DWORD in the control data header and reset the
> > accumulator to 0.
> >
> > We have to take special care to make sure that EndPrimitive() calls
> > that occur prior to the first vertex have no effect.
>
> Does this cover the general case of EndPrimitive without a preceeding
> EmitVertex? Something like:
>
> EmitVertex();
> EndPrimitive();
> EndPrimitive();
>
> And... do we have a test for that? :)
>
> Yes, that should work fine. What we do in EndPrimitive() is set the
> appropriate bit in the bitfield, so calling EndPrimitive() again should
> just redundantly set a bit that's already set.
>
> I don't think we have a test for it. I'll add that to my list.
Ah, that makes sense.
FWIW, the series is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
More information about the mesa-dev
mailing list