blob: b91f8cbe8082e372cb2cf199a6ca25a345f3da44 [file] [log] [blame]
uniform shader s1, s2;
uniform colorFilter cf1, cf2;
uniform blender b;
uniform float2 position;
uniform half4 color1, color2;
noinline half4 eval_shader(shader s, float2 pt) {
return s.eval(pt);
}
noinline half4 eval_shader_at_0_0(shader s) {
return eval_shader(s, float2(0));
}
noinline half4 eval_colorfilter(colorFilter cf, half4 color) {
return cf.eval(color);
}
noinline half4 eval_blender(blender b, half4 src, half4 dst) {
return b.eval(src, dst);
}
noinline half4 multiply_two_shaders(shader s1, shader s2, float2 pt) {
return s1.eval(pt) * eval_shader(s2, pt);
}
inline half4 eval_inlined(shader s, colorFilter cf, blender b) {
return s.eval(position) + cf.eval(color1) - b.eval(color2, color1);
}
half4 main(float2 xy) {
half4 result;
// Simple non-nested specialization
result += eval_shader(s1, position);
result += eval_shader(s2, position);
result += eval_colorfilter(cf1, color1);
result += eval_blender(b, color1, color2);
// Multiple specialized calls in one expression
result += eval_colorfilter(cf1, color2) * eval_colorfilter(cf2, color1);
// Nested specialized calls
result = eval_shader_at_0_0(s1);
result += multiply_two_shaders(s1, s2, position);
// Compex expression containing multiple, nested specializations
result += eval_blender(b, eval_shader_at_0_0(s2), eval_colorfilter(cf2, color2));
// Inlined expression with specialization
result += eval_inlined(s1, cf1, b);
return result;
}