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

Matt Turner mattst88 at gmail.com
Wed Oct 16 22:57:18 CEST 2013

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.

More information about the mesa-dev mailing list