<div dir="ltr">The new vectorization pass (added in <span style="color:rgb(0,0,0);white-space:pre-wrap">4bd6e0d7c69) properly changes types of scalar dereferences. Doesn't it need to change types of scalar constants as well?</span><div>
<font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">Consider this shader:</span></font></div><div><font color="#000000"><span style="white-space:pre-wrap"><br>
</span></font></div><div><font color="#000000"><span style="white-space:pre-wrap"><div>uniform sampler2D maintex;</div><div>uniform float factor;</div><div>varying vec2 uv;</div><div>void main() {</div><div>    vec4 c = texture2D(maintex, uv);</div>
<div>    vec4 r;</div><div>    r.x = max(0.123, c.x);<br></div><div>    r.y = max(0.123, c.y);</div><div>    r.z = min(c.z, factor);</div><div>    r.w = min(c.w, factor);</div><div>    gl_FragColor = r;</div><div>}</div><div>
<br></div><div>Scalar dereference gets properly vectorized into:</div><div>  <a href="http://r.zw">r.zw</a> = min (<a href="http://c.zw">c.zw</a>, vec2(factor));</div><div>However scalar constant is vectorized into:</div>
<div>  r.xy = max (0.123, c.xy); // type mismatch</div><div><br></div><div><br></div><div>It seems that handling ir_constant same way as ir_dereference inside opt_vectorize.cpp <span style="color:rgb(34,34,34)">rewrite_swizzle() should fix the issue.</span></div>
<div><span style="color:rgb(34,34,34)"><br></span></div></span></font>







<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>