1a49a5334c
Early returns can cause the inliner to generate suboptimal code. We control our built-ins, so let's avoid them where we can. Patterns like this challenge the inliner: if (x) return y; return z; But this can be replaced by equivalent code that inlines better: return x ? y : z; Or, if a ternary can't be used, this also does a better job: if (x) return y; else return z; In several cases, this allows the inliner to avoid generating a do-while(false) block for control flow. Change-Id: I921c929122297c40476ff15b4da631fc1581e308 Bug: skia:10737 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/318211 Commit-Queue: John Stiles <johnstiles@google.com> Auto-Submit: John Stiles <johnstiles@google.com> Reviewed-by: Brian Osman <brianosman@google.com>
44 lines
1.6 KiB
GLSL
44 lines
1.6 KiB
GLSL
|
|
uniform vec4 src, dst;
|
|
float _blend_color_luminance(vec3 color) {
|
|
return dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), color);
|
|
}
|
|
vec3 _blend_set_color_luminance(vec3 hueSatColor, float alpha, vec3 lumColor) {
|
|
float _4_blend_color_luminance;
|
|
{
|
|
_4_blend_color_luminance = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), lumColor);
|
|
}
|
|
float lum = _4_blend_color_luminance;
|
|
|
|
float _5_blend_color_luminance;
|
|
{
|
|
_5_blend_color_luminance = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), hueSatColor);
|
|
}
|
|
vec3 result = (lum - _5_blend_color_luminance) + 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) {
|
|
result = lum + ((result - lum) * lum) / (lum - minComp);
|
|
}
|
|
return maxComp > alpha && maxComp != lum ? lum + ((result - lum) * (alpha - lum)) / (maxComp - lum) : result;
|
|
}
|
|
vec4 blend_luminosity(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(dsa, alpha, sda) + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
|
|
}
|
|
vec4 main() {
|
|
vec4 _0_blend_luminosity;
|
|
{
|
|
float _1_alpha = dst.w * src.w;
|
|
vec3 _2_sda = src.xyz * dst.w;
|
|
vec3 _3_dsa = dst.xyz * src.w;
|
|
_0_blend_luminosity = vec4((((_blend_set_color_luminance(_3_dsa, _1_alpha, _2_sda) + dst.xyz) - _3_dsa) + src.xyz) - _2_sda, (src.w + dst.w) - _1_alpha);
|
|
}
|
|
|
|
return _0_blend_luminosity;
|
|
|
|
}
|