[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