[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