xref: /aosp_15_r20/external/skia/resources/sksl/runtime/ChildEffectSpecialization.privrts (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1uniform shader s1, s2;
2uniform colorFilter cf1, cf2;
3uniform blender b;
4uniform float2 position;
5uniform half4 color1, color2;
6
7noinline half4 eval_shader(shader s, float2 pt) {
8    return s.eval(pt);
9}
10
11noinline half4 eval_shader_at_0_0(shader s) {
12    return eval_shader(s, float2(0));
13}
14
15noinline half4 eval_colorfilter(colorFilter cf, half4 color) {
16    return cf.eval(color);
17}
18
19noinline half4 eval_blender(blender b, half4 src, half4 dst) {
20    return b.eval(src, dst);
21}
22
23noinline half4 multiply_two_shaders(shader s1, shader s2, float2 pt) {
24    return s1.eval(pt) * eval_shader(s2, pt);
25}
26
27inline half4 eval_inlined(shader s, colorFilter cf, blender b) {
28    return s.eval(position) + cf.eval(color1) - b.eval(color2, color1);
29}
30
31half4 main(float2 xy) {
32    half4 result;
33
34    // Simple non-nested specialization
35    result += eval_shader(s1, position);
36    result += eval_shader(s2, position);
37    result += eval_colorfilter(cf1, color1);
38    result += eval_blender(b, color1, color2);
39
40    // Multiple specialized calls in one expression
41    result += eval_colorfilter(cf1, color2) * eval_colorfilter(cf2, color1);
42
43    // Nested specialized calls
44    result  = eval_shader_at_0_0(s1);
45    result += multiply_two_shaders(s1, s2, position);
46
47    // Compex expression containing multiple, nested specializations
48    result += eval_blender(b, eval_shader_at_0_0(s2), eval_colorfilter(cf2, color2));
49
50    // Inlined expression with specialization
51    result += eval_inlined(s1, cf1, b);
52
53    return result;
54}
55