[Mesa-dev] [PATCH] i965: Fix an inconsistency the VUE map with gl_ClipVertex on gen4/5.

Paul Berry stereotype441 at gmail.com
Fri Mar 29 11:36:38 PDT 2013


On 29 March 2013 10:20, Eric Anholt <eric at anholt.net> wrote:

> We are intentionally not allocating a slot for gl_ClipVertex.  But by
> leaving the bit set in the slots_valid, the fragment shader's computation
> of where varyings are in urb entry coming out of the SF would be off by
> one.  Fixes rendering in Freespace 2 SCP.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62830
> Tested-by: Joaquín Ignacio Aramendía <samsagax at gmail.com>
> NOTE: This is a candidate for the 9.1 branch.
> ---
>
> NOTE: I haven't run this through piglit yet, since I'm out of town.
>

Assuming the piglit tests pass, this is:

Reviewed-by: Paul Berry <stereotype441 at gmail.com>


>
>  src/mesa/drivers/dri/i965/brw_vs.c |   18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vs.c
> b/src/mesa/drivers/dri/i965/brw_vs.c
> index e093dd1..6d2c0fd 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vs.c
> @@ -63,6 +63,13 @@ brw_compute_vue_map(struct brw_context *brw, struct
> brw_vs_compile *c,
>  {
>     const struct intel_context *intel = &brw->intel;
>     struct brw_vue_map *vue_map = &c->prog_data.vue_map;
> +
> +   /* Prior to Gen6, don't assign a slot for VARYING_SLOT_CLIP_VERTEX,
> since
> +    * it is unsupported.
> +    */
> +   if (intel->gen < 6)
> +      slots_valid &= ~VARYING_BIT_CLIP_VERTEX;
> +
>     vue_map->slots_valid = slots_valid;
>     int i;
>
> @@ -152,15 +159,12 @@ brw_compute_vue_map(struct brw_context *brw, struct
> brw_vs_compile *c,
>      * assign them contiguously.  Don't reassign outputs that already have
> a
>      * slot.
>      *
> -    * Also, prior to Gen6, don't assign a slot for
> VARYING_SLOT_CLIP_VERTEX,
> -    * since it is unsupported.  In Gen6 and above,
> VARYING_SLOT_CLIP_VERTEX may
> -    * be needed for transform feedback; since we don't want to have to
> -    * recompute the VUE map (and everything that depends on it) when
> transform
> -    * feedback is enabled or disabled, just go ahead and assign a slot
> for it.
> +    * We generally don't need to assign a slot for
> VARYING_SLOT_CLIP_VERTEX,
> +    * since it's encoded as the clip distances by emit_clip_distances().
> +    * However, it may be output by transform feedback, and we'd rather not
> +    * recompute state when TF changes, so we just always include it.
>      */
>     for (int i = 0; i < VARYING_SLOT_MAX; ++i) {
> -      if (intel->gen < 6 && i == VARYING_SLOT_CLIP_VERTEX)
> -         continue;
>        if ((slots_valid & BITFIELD64_BIT(i)) &&
>            vue_map->varying_to_slot[i] == -1) {
>           assign_vue_slot(vue_map, i);
> --
> 1.7.10.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130329/cd76a4c0/attachment-0001.html>


More information about the mesa-dev mailing list