On Wed, Nov 18, 2015 at 3:09 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote:
> On Wed, Nov 18, 2015 at 6:06 PM, Matt Turner <matts...@gmail.com> wrote:
>> In most cases (when the negate is copy propagated and the MOV removed),
>> this is two instructions on Gen >= 8 and only two instructions on
>> earlier platforms -- and it doesn't use the flag register.
>> ---
>> Thanks Ilia!
>>
>>  src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 52 
>> ++++++++++++++++++++++++++++++++
>>  1 file changed, 52 insertions(+)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp 
>> b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> index c282f83..5a5b1d9 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp
>> @@ -250,6 +250,57 @@ emit_system_values_block(nir_block *block, void 
>> *void_visitor)
>>              *reg = *v->emit_cs_work_group_id_setup();
>>           break;
>>
>> +      case nir_intrinsic_load_helper_invocation:
>> +         assert(v->stage == MESA_SHADER_FRAGMENT);
>> +         reg = &v->nir_system_values[SYSTEM_VALUE_HELPER_INVOCATION];
>> +         if (reg->file == BAD_FILE) {
>> +            const fs_builder abld =
>> +               v->bld.annotate("gl_HelperInvocation", NULL);
>> +
>> +            /* On Gen6+ (gl_HelperInvocation is only exposed on Gen7+) the
>> +             * pixel mask is in g1.7 of the thread payload.
>> +             *
>> +             * We move the per-channel pixel enable bit to the low bit of 
>> each
>> +             * channel by shifting the byte containing the pixel mask by the
>> +             * vector immediate 0x76543210UV.
>> +             *
>> +             * The region of <1,8,0> reads only 1 byte (the pixel masks for
>> +             * subspans 0 and 1) in SIMD8 and an additional byte (the pixel
>> +             * masks for 2 and 3) in SIMD16.
>> +             */
>> +            fs_reg shifted = abld.vgrf(BRW_REGISTER_TYPE_UW, 1);
>> +            abld.SHR(shifted,
>> +                     stride(byte_offset(retype(brw_vec1_grf(1, 0),
>> +                                               BRW_REGISTER_TYPE_UB), 28),
>> +                            1, 8, 0),
>> +                     brw_imm_uv(0x76543210));
>> +
>> +            /* A set bit in the pixel mask means the channel is enabled, but
>> +             * that is the opposite of gl_HelperInvocation so we need to 
>> invert
>> +             * the mask.
>> +             *
>> +             * The negate source-modifier bit of logical instructions on 
>> Gen8+
>> +             * performs 1's complement negation, so we can use that instead 
>> of
>> +             * a NOT instruction.
>> +             */
>> +            fs_reg inverted  = negate(shifted);
>
> Perhaps a single space before the = is enough here? [Can fix up before
> pushing after someone competent reviews...]

Thanks for catching that -- it is indeed a mistake.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to