<div dir="ltr">Hi,<div><br></div><div>When Mesa's GLSL compiler is faced with a code like this:</div><div><br></div><div>    // vec4 packednormal exists</div><div><div>    vec3 normal;<br></div><div>    normal.xy = packednormal.wy * 2.0 - 1.0;</div>
<div>    normal.z = sqrt(1.0 - dot(normal.xy, normal.xy));</div><div>    // now do not use the "normal" at all anywhere</div><div><br></div><div>Then the dead code elimination pass will not be able to eliminate the "normal" variable, nor anything that lead to it (possibly sampling textures into packed normal, etc.).</div>
<div><br></div><div>This is because variable refcounting visitor sees "normal" as having four references, but only two assignments, and can not consider it dead. Even if these two references are from assignment to normal.z where both LHS & RHS reference the same variable.</div>
<div><br></div><div>Any ideas on how to improve this?</div><div><br></div><div><br></div><div>If the original code was doing something like this, then dead code elimination is able to "properly" eliminate this whole thing:</div>
<div><br></div><div><div>    // vec4 packednormal exists</div><div><div>    vec3 normal;<br></div><div>    vec2 nxy = packednormal.wy * 2.0 - 1.0;</div><div>    float nz = sqrt(1.0 - dot(nxy, nxy));</div><div>    normal.xy = nxy;<br>
</div><div>    normal.z = nz;</div><div>    // now do not use the "normal" at all anywhere</div></div></div><div><br></div><div><br></div><div><br></div>-- <br>Aras Pranckevičius<br>work: <a href="http://unity3d.com">http://unity3d.com</a><br>
home: <a href="http://aras-p.info">http://aras-p.info</a>
</div><div><br></div></div>