[Mesa-dev] glsl: vectorize pass probably needs to change types of scalar constants as well?

Aras Pranckevicius aras at unity3d.com
Mon Jan 27 22:28:12 PST 2014


The new vectorization pass (added in 4bd6e0d7c69) properly changes types of
scalar dereferences. Doesn't it need to change types of scalar constants as
well?

Consider this shader:

uniform sampler2D maintex;
uniform float factor;
varying vec2 uv;
void main() {
    vec4 c = texture2D(maintex, uv);
    vec4 r;
    r.x = max(0.123, c.x);
    r.y = max(0.123, c.y);
    r.z = min(c.z, factor);
    r.w = min(c.w, factor);
    gl_FragColor = r;
}

Scalar dereference gets properly vectorized into:
r.zw = min (c.zw, vec2(factor));
However scalar constant is vectorized into:
r.xy = max (0.123, c.xy); // type mismatch


It seems that handling ir_constant same way as ir_dereference inside
opt_vectorize.cpp rewrite_swizzle() should fix the issue.


-- 
Aras Pranckevičius
work: http://unity3d.com
home: http://aras-p.info
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140128/918d39d0/attachment.html>


More information about the mesa-dev mailing list