[Mesa-dev] [PATCH] glsl: Optimize mul(a, -1) into neg(a).

Ian Romanick idr at freedesktop.org
Wed Oct 16 23:45:12 CEST 2013


On 10/16/2013 01:57 PM, Matt Turner wrote:
> On Wed, Oct 16, 2013 at 11:14 AM, Ian Romanick <idr at freedesktop.org> wrote:
>> On 10/15/2013 11:55 PM, Matt Turner wrote:
>>> Two extra instructions in some heroesofnewerth shaders, but a win for
>>> everything else.
>>>
>>> total instructions in shared programs: 1531352 -> 1530815 (-0.04%)
>>> instructions in affected programs:     121898 -> 121361 (-0.44%)
>>
>> Just curious... what causes these expressions in the affected shaders?
>> Did the app developer write it, do did another one of our passes
>> generate it?
> 
> I've just looked at a single shader (amnesia/20.frag) that was
> improved, so others may be different but it does
> 
> float fRimLight = dot(gvNormal, vec3(0.0, 0.0, -1.0));
> 
> opt_algebraic optimizes dot products with 0.0 or where arguments
> contain a single 1.0 and some number of 0.0, so that code was
> optimized to
> 
> float fRimLight = gvNormal * -1.0;
> 
> ... and the IR we generate for this (combined with some other bits are)
> 
> (assign (x) (var_ref channel_expressions at 2)
>             (expression float + (constant float (1.000000))
>                                 (expression float neg (expression
> float abs (expression float neg (var_ref gvNormal_z))))))
> 
> i.e., 1.0 - abs(-gvNormal.z). abs(-val). Nice.

Lol.  Is the abs(-val) -> abs(val) optimization passing coming?



More information about the mesa-dev mailing list