On Thursday, May 4, 2017 10:38:53 PM PDT Pohjolainen, Topi wrote:
> On Thu, May 04, 2017 at 12:16:53PM -0700, Rafael Antognolli wrote:
> > On Thu, May 04, 2017 at 11:19:24AM +0300, Pohjolainen, Topi wrote:
> > > On Mon, May 01, 2017 at 06:43:23PM -0700, Rafael Antognolli wrote:
[snip]
> > > > +   if (vs_prog_data->uses_drawid) {
> > > > +      struct GENX(VERTEX_ELEMENT_STATE) elem_state = {
> > > > +         .Valid = true,
> > > > +         .VertexBufferIndex = brw->vb.nr_buffers + 1,
> > > > +         .SourceElementFormat = ISL_FORMAT_R32_UINT,
> > > > +         .Component0Control = VFCOMP_STORE_SRC,
> > > > +         .Component1Control = VFCOMP_STORE_0,
> > > > +         .Component2Control = VFCOMP_STORE_0,
> > > > +         .Component3Control = VFCOMP_STORE_0,
> > > > +#if GEN_GEN < 5
> > > > +         .DestinationElementOffset = i * 4,
> > > 
> > > Same comment as further up.
> > 
> > So, if I understand this field correctly, it should be
> > brw->vb.nr_enabled + 1, which would mean the old code was wrong?
> 
> Hmm, yeah, it looks odd. On gen < 6 you end up with two elements having
> indices set to "brw->vb.nr_buffers" and "brw->vb.nr_buffers + 1" but both
> having .DestinationElementOffset == i * 4 == brw->vb.nr_buffers * 4.
> 
> And like you said, this is already the case in the original. Ken, can you
> explain this?

Looks pretty broken to me.  I suspect the if (needs_sgvs_element) block
should do i++ so that gl_DrawID is one more than the VID/IID element (if
it exists).  I don't know if those are the right values, but they
certainly shouldn't be the same if both are present.

My guess is that all the tests use GLSL 1.30, which we don't expose on
Gen4-4.5 without overrides, so this is just broken and nobody has noticed.

--Ken

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to