<p dir="ltr"><br>
On Sep 28, 2015 2:09 AM, "Alejandro Piñeiro" <<a href="mailto:apinheiro@igalia.com">apinheiro@igalia.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> TL;DR:<br>
><br>
> as there are several people working on improving the shader quality at<br>
> vec4 using NIR, to avoid overlapping, Im explicitly announcing that this<br>
> week I will work on implement an equivalent to fs_cmod_propagation but<br>
> for the vec4 case.<br>
><br>
> More details:<br>
><br>
> While checking shader-db HURT regressions, shaders like these:<br>
> unity/15.shader_test<br>
> warzone2100/1.shader_test<br>
> humus-celshading/4.shader_test<br>
><br>
> are emitting extra movs when conditions are involved. Writing the<br>
> equivalent fs shader, I found those are optimized by<br>
> opt_cmod_propagation. I vaguely remembered that Jason mentioned it some<br>
> months ago, and I found this email [1], where he suggest to implement<br>
> that pass. So just in case someone else was already doing that, Im<br>
> sending this email.</p>
<p dir="ltr">Hey Alejandro,</p>
<p dir="ltr">First off, thanks for working on this.  Now that we've fixed the type issues in copy propagation and register coalesce, I think this is probably the last major back end issue required for getting decent results out of NIR.  Not that more work can't be done (it always can) but this solves the last known NIR->backend translation issue.</p>
<p dir="ltr">I do have one comment for you to think about.  In the fs backend we never move a flag result *to* a GRF.  We only ever use a CMP with a GRF destination. In vec4, for our implementation of nir_op_banyN and nir_op_ballN, we do something like this:</p>
<p dir="ltr">CMP null a b<br>
MOV reg 0ud<br>
MOV(+f0.0) reg 0xffffffffud</p>
<p dir="ltr">Where wise the ANY4H or ALL4H predicate on the second MOV.  We should pick up on this as a CMP that generates a special predicate so that a MOV.nz that moves it to the flag actually tur s into a use of the ANY or ALL predicate.<br>
--Jason</p>