Surely the *right* thing would be to have the correct order expressed in brw->vb.*, instead so you don't have this workaround in multiple places.
As a minimal fix for stable though, this seems OK, so - Reviewed-by: Chris Forbes <[email protected]> On Sat, Jul 11, 2015 at 5:04 AM, Neil Roberts <[email protected]> wrote: > When the edge flag element is enabled then the elements are slightly > reordered so that the edge flag is always the last one. This was > confusing the code to upload the 3DSTATE_VF_INSTANCING state because > that is uploaded with a separate loop which has an instruction for > each element. The indices used in these instructions weren't taking > into account the reordering so the state would be incorrect. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91292 > Cc: "10.6 10.5" <[email protected]> > --- > src/mesa/drivers/dri/i965/gen8_draw_upload.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/gen8_draw_upload.c > b/src/mesa/drivers/dri/i965/gen8_draw_upload.c > index 1af90ec..65b7625 100644 > --- a/src/mesa/drivers/dri/i965/gen8_draw_upload.c > +++ b/src/mesa/drivers/dri/i965/gen8_draw_upload.c > @@ -218,13 +218,24 @@ gen8_emit_vertices(struct brw_context *brw) > } > ADVANCE_BATCH(); > > - for (unsigned i = 0; i < brw->vb.nr_enabled; i++) { > + for (unsigned i = 0, j = 0; i < brw->vb.nr_enabled; i++) { > const struct brw_vertex_element *input = brw->vb.enabled[i]; > const struct brw_vertex_buffer *buffer = > &brw->vb.buffers[input->buffer]; > + unsigned element_index; > + > + /* The edge flag element is reordered to be the last one in the code > + * above so we need to compensate for that in the element indices used > + * below. > + */ > + if (input == gen6_edgeflag_input) > + element_index = brw->vb.nr_enabled - 1; > + else > + element_index = j++; > > BEGIN_BATCH(3); > OUT_BATCH(_3DSTATE_VF_INSTANCING << 16 | (3 - 2)); > - OUT_BATCH(i | (buffer->step_rate ? GEN8_VF_INSTANCING_ENABLE : 0)); > + OUT_BATCH(element_index | > + (buffer->step_rate ? GEN8_VF_INSTANCING_ENABLE : 0)); > OUT_BATCH(buffer->step_rate); > ADVANCE_BATCH(); > } > -- > 1.9.3 > > _______________________________________________ > mesa-stable mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-stable _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
