[Mesa-dev] [PATCH V3 5/5] i965 Gen4/5: clip: Don't mangle flat varyings

Chris Forbes chrisf at ijw.co.nz
Tue Jul 30 14:48:12 PDT 2013


Oops, yes.

On Wed, Jul 31, 2013 at 9:45 AM, Paul Berry <stereotype441 at gmail.com> wrote:
> On 14 July 2013 02:39, Chris Forbes <chrisf at ijw.co.nz> wrote:
>>
>> This patch ensures that integers will pass through unscathed.  Doing
>> (useless) computations on them is risky, especially when their bit
>> patterns correspond to values like inf or nan.
>>
>> [V1-2]: Signed-off-by: Olivier Galibert <galibert at pobox.com>
>> Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
>> ---
>>  src/mesa/drivers/dri/i965/brw_clip_util.c | 57
>> ++++++++++++++++++-------------
>>  1 file changed, 34 insertions(+), 23 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_clip_util.c
>> b/src/mesa/drivers/dri/i965/brw_clip_util.c
>> index 56c9ccd..a168b32 100644
>> --- a/src/mesa/drivers/dri/i965/brw_clip_util.c
>> +++ b/src/mesa/drivers/dri/i965/brw_clip_util.c
>> @@ -246,8 +246,8 @@ void brw_clip_interp_vertex( struct brw_clip_compile
>> *c,
>>        int varying = c->vue_map.slot_to_varying[slot];
>>        GLuint delta = brw_vue_slot_to_offset(slot);
>>
>> -      /* HPOS is already handled above */
>> -      if (varying == VARYING_SLOT_POS)
>> +      /* HPOS, NDC already handled above */
>> +      if (varying == VARYING_SLOT_POS || varying == BRW_VARYING_SLOT_NDC)
>>           continue;
>
>
> Was this hunk supposed to go in patch 4/5?
>
> With that fixed, this patch is:
>
> Reviewed-by: Paul Berry <stereotype441 at gmail.com>
>
>>
>>
>>
>> @@ -269,28 +269,39 @@ void brw_clip_interp_vertex( struct brw_clip_compile
>> *c,
>>           * header), so interpolate:
>>           *
>>           *        New = attr0 + t*attr1 - t*attr0
>> +          *
>> +          * Unless the attribute is flat shaded -- in which case just
>> copy
>> +          * from one of the sources (doesn't matter which; already copied
>> from pv)
>>           */
>> -         struct brw_reg tmp = get_tmp(c);
>> -         struct brw_reg t =
>> -            c->key.interpolation_mode[slot] ==
>> INTERP_QUALIFIER_NOPERSPECTIVE ?
>> -            t_nopersp : t0;
>> -
>> -        brw_MUL(p,
>> -                vec4(brw_null_reg()),
>> -                deref_4f(v1_ptr, delta),
>> -                t);
>> -
>> -        brw_MAC(p,
>> -                tmp,
>> -                negate(deref_4f(v0_ptr, delta)),
>> -                t);
>> -
>> -        brw_ADD(p,
>> -                deref_4f(dest_ptr, delta),
>> -                deref_4f(v0_ptr, delta),
>> -                tmp);
>> -
>> -         release_tmp(c, tmp);
>> +         GLuint interp = c->key.interpolation_mode[slot];
>> +
>> +         if (interp != INTERP_QUALIFIER_FLAT) {
>> +            struct brw_reg tmp = get_tmp(c);
>> +            struct brw_reg t =
>> +               interp == INTERP_QUALIFIER_NOPERSPECTIVE ? t_nopersp : t0;
>> +
>> +            brw_MUL(p,
>> +                  vec4(brw_null_reg()),
>> +                  deref_4f(v1_ptr, delta),
>> +                  t);
>> +
>> +            brw_MAC(p,
>> +                  tmp,
>> +                  negate(deref_4f(v0_ptr, delta)),
>> +                  t);
>> +
>> +            brw_ADD(p,
>> +                  deref_4f(dest_ptr, delta),
>> +                  deref_4f(v0_ptr, delta),
>> +                  tmp);
>> +
>> +            release_tmp(c, tmp);
>> +         }
>> +         else {
>> +            brw_MOV(p,
>> +                  deref_4f(dest_ptr, delta),
>> +                  deref_4f(v0_ptr, delta));
>> +         }
>>        }
>>     }
>>
>> --
>> 1.8.3.2
>>
>> _______________________________________________
>> 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