[Mesa-dev] [PATCH v2] i965: allocate a SGVS element when VertexID or InstanceID are read
Jason Ekstrand
jason at jlekstrand.net
Thu Jan 4 22:24:24 UTC 2018
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Ken?
On Wed, Jan 3, 2018 at 6:55 PM, Iago Toral Quiroga <itoral at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180104/8ed4a905/attachment.html>
More information about the mesa-dev
mailing list