Matt Turner <matts...@gmail.com> writes:

> On Mon, Mar 14, 2016 at 5:10 PM, Francisco Jerez <curroje...@riseup.net> 
> wrote:
>> Matt Turner <matts...@gmail.com> writes:
>>
>>> Missing this causes an assertion failure in the scheduler with the next
>>> patch.
>>> ---
>>>  src/mesa/drivers/dri/i965/brw_ir_vec4.h | 3 ++-
>>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h 
>>> b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
>>> index 660beca..7cedf8e 100644
>>> --- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h
>>> +++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
>>> @@ -201,7 +201,8 @@ public:
>>>     {
>>>        return (conditional_mod && (opcode != BRW_OPCODE_SEL &&
>>>                                    opcode != BRW_OPCODE_IF &&
>>> -                                  opcode != BRW_OPCODE_WHILE));
>>> +                                  opcode != BRW_OPCODE_WHILE)) ||
>>> +             opcode == TCS_OPCODE_SRC0_010_IS_ZERO;
>>
>> Meh...  Any reason this weird instruction doesn't have the
>> conditional_mod set on creation?  Having the generator set it implicitly
>> makes the instruction *less* useful and is the only reason we need to
>> introduce these hacks.
>
> None that I know of. I'd be happy with that fix as a replacement for this 
> patch.
>
>> AFAICT the TCS_OPCODE_SRC0_010_IS_ZERO opcode is actually redundant and
>> equivalent to:
>>
>>  broadcast.nz.f0 null.xyzw, src.xxxx, 0UD
>
> I think there's a difference -- that broadcast instruction treats the
> two vec4 halves independently, reading a component from each of them.
> The SRC0_010_IS_ZERO reads a single component of the whole vec8 (I
> don't see calls that would set it, but that region implies it's an
> align1 instruction). Does that seem right?
>
broadcast is supposed to be about taking the value from a given channel
(which will be a vec4 in Align16 and a scalar in Align1) and
"broadcasting" it to all channels of the destination.  In Align16 mode
and if the second source is an immediate it basically boils down to:

>  brw_MOV(p, dst, stride(suboffset(src, 4 * i), 0, 4, 1));

(from brw_eu_emit.c:3365), which seems pretty close to what TCS want.
Anyway I'm fine with this patch landing as-is, this can always be
cleaned up later.

>> Do you feel like cleaning this up?  Otherwise:
>>
>> Acked-by: Francisco Jerez <curroje...@riseup.net>

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to