511c500ad4
These variables were later being eliminated by the dead-code-elimination pass, so you can't see them directly in the final output, but removing them affects the name mangling off all future symbols, so it causes an enormous ripple effect in the diff. And of course, it's a waste of time and memory to synthesize IRNodes just to destroy them later. If we disable control-flow analysis, we lose the dead-code-elimination pass entirely; this change is also beneficial for emitting better code when optimizations are turned off. Change-Id: I882b3be4f3fd99b77d99b6abe128f26bb9252c89 Bug: skia:11319 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/375776 Commit-Queue: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com> Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
88 lines
3.0 KiB
GLSL
88 lines
3.0 KiB
GLSL
|
|
out vec4 sk_FragColor;
|
|
uniform vec4 color;
|
|
vec4 blend_src_in(vec4 src, vec4 dst) {
|
|
return src * dst.w;
|
|
}
|
|
vec4 blend_dst_in(vec4 src, vec4 dst) {
|
|
return dst * src.w;
|
|
|
|
}
|
|
vec3 _blend_set_color_luminance(vec3 hueSatColor, float alpha, vec3 lumColor) {
|
|
float lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), lumColor);
|
|
|
|
vec3 result = (lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), hueSatColor)) + hueSatColor;
|
|
|
|
float minComp = min(min(result.x, result.y), result.z);
|
|
float maxComp = max(max(result.x, result.y), result.z);
|
|
if (minComp < 0.0 && lum != minComp) {
|
|
float _4_d = lum - minComp;
|
|
result = lum + (result - lum) * (lum / _4_d);
|
|
|
|
}
|
|
if (maxComp > alpha && maxComp != lum) {
|
|
vec3 _5_n = (result - lum) * (alpha - lum);
|
|
float _6_d = maxComp - lum;
|
|
return lum + _5_n / _6_d;
|
|
|
|
} else {
|
|
return result;
|
|
}
|
|
}
|
|
vec3 _blend_set_color_saturation_helper(vec3 minMidMax, float sat) {
|
|
if (minMidMax.x < minMidMax.z) {
|
|
float _7_n = sat * (minMidMax.y - minMidMax.x);
|
|
float _8_d = minMidMax.z - minMidMax.x;
|
|
return vec3(0.0, _7_n / _8_d, sat);
|
|
|
|
} else {
|
|
return vec3(0.0);
|
|
}
|
|
}
|
|
vec3 _blend_set_color_saturation(vec3 hueLumColor, vec3 satColor) {
|
|
float sat = max(max(satColor.x, satColor.y), satColor.z) - min(min(satColor.x, satColor.y), satColor.z);
|
|
|
|
if (hueLumColor.x <= hueLumColor.y) {
|
|
if (hueLumColor.y <= hueLumColor.z) {
|
|
return _blend_set_color_saturation_helper(hueLumColor, sat);
|
|
} else if (hueLumColor.x <= hueLumColor.z) {
|
|
return _blend_set_color_saturation_helper(hueLumColor.xzy, sat).xzy;
|
|
} else {
|
|
return _blend_set_color_saturation_helper(hueLumColor.zxy, sat).yzx;
|
|
}
|
|
} else if (hueLumColor.x <= hueLumColor.z) {
|
|
return _blend_set_color_saturation_helper(hueLumColor.yxz, sat).yxz;
|
|
} else if (hueLumColor.y <= hueLumColor.z) {
|
|
return _blend_set_color_saturation_helper(hueLumColor.yzx, sat).zxy;
|
|
} else {
|
|
return _blend_set_color_saturation_helper(hueLumColor.zyx, sat).zyx;
|
|
}
|
|
}
|
|
vec4 blend_hue(vec4 src, vec4 dst) {
|
|
float alpha = dst.w * src.w;
|
|
vec3 sda = src.xyz * dst.w;
|
|
vec3 dsa = dst.xyz * src.w;
|
|
return vec4((((_blend_set_color_luminance(_blend_set_color_saturation(sda, dsa), alpha, dsa) + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
|
|
}
|
|
float singleuse() {
|
|
return 1.25;
|
|
}
|
|
float add(float a, float b) {
|
|
float c = a + b;
|
|
return c;
|
|
}
|
|
float mul(float a, float b) {
|
|
return a * b;
|
|
}
|
|
float fma(float a, float b, float c) {
|
|
return add(mul(a, b), c);
|
|
}
|
|
void main() {
|
|
sk_FragColor = vec4(fma(color.x, color.y, color.z));
|
|
sk_FragColor *= singleuse();
|
|
sk_FragColor *= blend_src_in(color.xxyy, color.zzww);
|
|
sk_FragColor *= blend_dst_in(color.xxyy, color.zzww);
|
|
sk_FragColor *= blend_hue(color, color.wwww);
|
|
sk_FragColor *= blend_hue(color, color.wzyx);
|
|
}
|