[Mesa-dev] [PATCH 3/3 v2] i965/bdw: Fix 3DSTATE_VF_INSTANCING when the edge flag is used
Mark Janes
mark.a.janes at intel.com
Tue Aug 18 14:02:31 PDT 2015
These three patches are
Tested-by: Mark Janes <mark.a.janes at intel.com>
Neil Roberts <neil at linux.intel.com> writes:
> 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.
>
> v2: Use nr_elements instead of brw->vb.nr_enabled so that it will cope
> when gl_VertexID is used.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91292
> Cc: "10.6 10.5" <mesa-stable at lists.freedesktop.org>
> ---
> 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 2bac5ff..1b48643 100644
> --- a/src/mesa/drivers/dri/i965/gen8_draw_upload.c
> +++ b/src/mesa/drivers/dri/i965/gen8_draw_upload.c
> @@ -246,13 +246,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 = nr_elements - 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-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list