Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>

Ken?

On Wed, Jan 3, 2018 at 6:55 PM, Iago Toral Quiroga <ito...@igalia.com>
wrote:

> Although on gen8+ platforms we can in theory use 3DSTATE_VF_SGVS
> to put these beyond the last vertex element it seems that we still
> need to allocate the SVGS element, otherwise we have observed cases
> where we end up reading garbage. Specifically, the CTS test mentioned
> below was flaky with a fail rate of ~1% on some gen9+ platforms caused
> by reading garbage for the gl_InstanceID value. The flakyness goes
> away as soon as we start allocating the SVGS element.
>
> v2:
>   - Do this for gen8+, not just gen9+, and pull the boolean
>     outside the #if block (Jason)
>
> Fixes flaky test:
> KHR-GL45.vertex_attrib_64bit.limits_test
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104335
> ---
>  src/mesa/drivers/dri/i965/genX_state_upload.c | 17 ++---------------
>  1 file changed, 2 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c
> b/src/mesa/drivers/dri/i965/genX_state_upload.c
> index 50ac5bc59f..d0a980f973 100644
> --- a/src/mesa/drivers/dri/i965/genX_state_upload.c
> +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
> @@ -486,26 +486,13 @@ genX(emit_vertices)(struct brw_context *brw)
>     } else {
>        brw_batch_emit(brw, GENX(3DSTATE_VF_SGVS), vfs);
>     }
> +#endif
>
> -   /* Normally we don't need an element for the SGVS attribute because the
> -    * 3DSTATE_VF_SGVS instruction lets you store the generated attribute
> in an
> -    * element that is past the list in 3DSTATE_VERTEX_ELEMENTS. However if
> -    * we're using draw parameters then we need an element for the those
> -    * values.  Additionally if there is an edge flag element then the SGVS
> -    * can't be inserted past that so we need a dummy element to ensure
> that
> -    * the edge flag is the last one.
> -    */
> -   const bool needs_sgvs_element = (vs_prog_data->uses_basevertex ||
> -                                    vs_prog_data->uses_baseinstance ||
> -                                    ((vs_prog_data->uses_instanceid ||
> -                                      vs_prog_data->uses_vertexid)
> -                                     && uses_edge_flag));
> -#else
>     const bool needs_sgvs_element = (vs_prog_data->uses_basevertex ||
>                                      vs_prog_data->uses_baseinstance ||
>                                      vs_prog_data->uses_instanceid ||
>                                      vs_prog_data->uses_vertexid);
> -#endif
> +
>     unsigned nr_elements =
>        brw->vb.nr_enabled + needs_sgvs_element + vs_prog_data->uses_drawid;
>
> --
> 2.11.0
>
>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to