Optimize saturation code again.

This adopts a trick from SkVM to avoid sorting entirely.

Change-Id: I586c8a3613b48241842a7d8eba1c9d68a4717f83
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/528368
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
This commit is contained in:
John Stiles 2022-04-07 16:59:26 -04:00 committed by SkCQ
parent b1ea9a1a9d
commit 9ef12d72cf
20 changed files with 1716 additions and 2740 deletions

View File

@ -1,4 +1,4 @@
static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,189,8,
7,100,101,103,114,101,101,115,
8,36,103,101,110,84,121,112,101,
7,114,97,100,105,97,110,115,
@ -216,7 +216,6 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
8,108,117,109,67,111,108,111,114,
26,36,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,108,117,109,105,110,97,110,99,101,
23,36,98,108,101,110,100,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,
11,104,117,101,76,117,109,67,111,108,111,114,
8,115,97,116,67,111,108,111,114,
27,36,98,108,101,110,100,95,115,101,116,95,99,111,108,111,114,95,115,97,116,117,114,97,116,105,111,110,
10,98,108,101,110,100,95,104,115,108,99,
@ -238,8 +237,8 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
3,108,117,109,
7,109,105,110,67,111,109,112,
7,109,97,120,67,111,109,112,
5,109,105,100,80,116,
5,115,97,116,80,116,
2,109,110,
2,109,120,
3,115,100,97,
3,100,115,97,
1,108,
@ -3497,13 +3496,13 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,125,7,1,191,3,
51,255,255,223,0,
55,193,3,
17,149,7,
17,42,7,
51,255,255,129,2,3,
55,194,3,
17,161,7,
17,149,7,
51,255,255,129,2,3,
28,195,3,
17,170,7,2,193,3,194,3,
17,158,7,2,193,3,194,3,
51,255,255,129,2,
55,196,3,
17,45,5,
@ -3518,7 +3517,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,26,1,
51,255,255,253,3,3,
28,200,3,
17,198,7,4,196,3,197,3,198,3,199,3,
17,186,7,4,196,3,197,3,198,3,199,3,
51,255,255,81,3,
55,201,3,
17,45,5,
@ -3527,7 +3526,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,49,5,
51,255,255,81,3,3,
28,203,3,
17,209,7,2,201,3,202,3,
17,197,7,2,201,3,202,3,
51,255,255,81,3,
55,204,3,
17,45,5,
@ -3536,7 +3535,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,49,5,
51,255,255,81,3,3,
28,206,3,
17,219,7,2,204,3,205,3,
17,207,7,2,204,3,205,3,
51,255,255,81,3,
55,207,3,
17,45,5,
@ -3545,7 +3544,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,49,5,
51,255,255,81,3,3,
28,209,3,
17,236,7,2,207,3,208,3,
17,224,7,2,207,3,208,3,
51,255,255,81,3,
55,210,3,
17,45,5,
@ -3554,13 +3553,13 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,49,5,
51,255,255,81,3,3,
28,212,3,
17,248,7,2,210,3,211,3,
17,236,7,2,210,3,211,3,
51,255,255,81,3,
55,213,3,
17,42,7,
51,255,255,81,3,3,
28,214,3,
17,9,8,1,213,3,
17,253,7,1,213,3,
51,255,255,81,3,
55,215,3,
17,42,7,
@ -3568,14 +3567,14 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
54,216,3,2,
51,214,3,
28,217,3,
17,9,8,1,215,3,
17,253,7,1,215,3,
51,255,255,221,1,
51,217,3,
55,218,3,
17,254,1,
51,255,255,116,2,3,
28,219,3,
17,18,8,1,218,3,
17,6,8,1,218,3,
51,255,255,186,1,
55,220,3,
17,35,1,
@ -3584,7 +3583,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,164,1,
51,255,255,186,1,3,
28,222,3,
17,23,8,2,220,3,221,3,
17,11,8,2,220,3,221,3,
51,255,255,213,0,
55,223,3,
17,35,1,
@ -3595,7 +3594,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
54,225,3,2,
51,222,3,
28,226,3,
17,23,8,2,223,3,224,3,
17,11,8,2,223,3,224,3,
51,255,255,223,0,
51,226,3,134,0,
185,3,
@ -3881,7 +3880,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,1,0,
55,227,3,
17,39,8,
17,27,8,
51,255,255,59,3,2,1,0,
0,0,2,
56,227,3,
@ -3985,7 +3984,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,1,0,
55,228,3,
17,45,8,
17,33,8,
51,255,255,81,3,2,1,0,
0,0,3,
56,228,3,
@ -4062,7 +4061,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,1,0,
55,229,3,
17,45,8,
17,33,8,
51,255,255,81,3,2,1,0,
0,0,3,
56,229,3,
@ -4154,7 +4153,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
52,1,0,0,0,0,1,
44,
53,
45,52,8,
45,40,8,
1,
57,148,3,0,3,
1,
@ -4169,7 +4168,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
52,1,0,0,0,0,1,
44,
53,
45,52,8,
45,40,8,
1,
57,151,3,0,3,
1,
@ -4202,7 +4201,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,1,0,
55,232,3,
17,96,8,
17,84,8,
51,255,255,223,0,2,1,0,
0,0,2,
56,232,3,
@ -4373,7 +4372,7 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,1,0,
55,233,3,
17,96,8,
17,84,8,
51,255,255,223,0,2,1,0,
0,0,2,
56,233,3,
@ -4533,16 +4532,16 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,4,0,
55,234,3,
17,102,8,
17,90,8,
51,255,255,223,0,2,
55,235,3,
17,107,8,
17,95,8,
51,255,255,223,0,2,
55,236,3,
17,112,8,
17,100,8,
51,255,255,223,0,2,
55,237,3,
17,118,8,
17,106,8,
51,255,255,223,0,2,4,0,
1,0,
0,0,
@ -4849,16 +4848,16 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,4,0,
55,238,3,
17,124,8,
17,112,8,
51,255,255,223,0,2,
55,239,3,
17,45,8,
17,33,8,
51,255,255,129,2,2,
55,240,3,
17,128,8,
17,116,8,
51,255,255,223,0,2,
55,241,3,
17,136,8,
17,124,8,
51,255,255,223,0,2,4,0,
0,0,
3,0,
@ -4988,198 +4987,57 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
2,
52,1,2,0,
55,242,3,
17,144,8,
51,255,255,129,2,2,
17,132,8,
51,255,255,223,0,2,
55,243,3,
17,150,8,
51,255,255,129,2,2,2,0,
17,135,8,
51,255,255,223,0,2,2,0,
0,0,
1,0,5,
1,0,3,
56,242,3,
51,255,255,129,2,0,
13,
51,255,255,129,2,1,
25,
51,255,255,223,0,0,0,0,0,
56,243,3,
51,255,255,129,2,0,
13,
51,255,255,129,2,1,
25,
51,255,255,223,0,0,0,0,0,
32,0,
1,
50,
57,193,3,0,1,0,20,
50,
57,193,3,0,1,1,
2,
52,1,0,0,0,0,1,
32,0,
1,
50,
57,193,3,0,1,1,20,
50,
57,193,3,0,1,2,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,2,23,
50,
57,193,3,0,3,0,0,0,
22,
1,
50,
57,242,3,1,1,1,15,
1,
50,
57,243,3,1,1,2,15,
25,
51,255,255,223,0,0,0,128,63,1,
32,0,
1,
50,
57,193,3,0,1,0,20,
50,
57,193,3,0,1,2,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,1,15,
1,
50,
57,193,3,0,3,0,2,1,1,
50,
57,193,3,0,3,0,0,0,
22,
1,
50,
57,242,3,1,1,2,15,
1,
50,
57,243,3,1,1,1,15,
25,
51,255,255,223,0,0,0,128,63,1,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,1,15,
1,
50,
57,193,3,0,3,2,0,1,1,
50,
57,193,3,0,3,2,2,2,
22,
1,
50,
57,242,3,1,1,0,15,
1,
50,
57,243,3,1,1,1,15,
25,
51,255,255,223,0,0,0,128,63,1,1,
32,0,
1,
50,
57,193,3,0,1,0,20,
50,
57,193,3,0,1,2,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,1,15,
1,
50,
57,193,3,0,3,1,0,2,1,
50,
57,193,3,0,3,1,1,1,
22,
1,
50,
57,242,3,1,1,0,15,
1,
50,
57,243,3,1,1,2,15,
25,
51,255,255,223,0,0,0,128,63,1,
32,0,
1,
50,
57,193,3,0,1,1,20,
50,
57,193,3,0,1,2,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,1,15,
1,
50,
57,193,3,0,3,1,2,0,1,
50,
57,193,3,0,3,1,1,1,
22,
1,
50,
57,242,3,1,1,2,15,
1,
50,
57,243,3,1,1,0,15,
25,
51,255,255,223,0,0,0,128,63,1,
2,
52,1,0,0,0,0,2,
22,
1,
57,193,3,1,15,
1,
50,
57,193,3,0,3,2,1,0,1,
50,
57,193,3,0,3,2,2,2,
22,
1,
50,
57,242,3,1,1,1,15,
1,
50,
57,243,3,1,1,0,15,
25,
51,255,255,223,0,0,0,128,63,1,
32,0,
1,
50,
57,193,3,0,1,2,19,
25,
51,255,255,223,0,0,0,0,0,
2,
52,1,0,0,0,0,2,
22,
1,
57,242,3,2,24,
51,255,255,223,0,0,
27,
51,255,255,223,0,150,3,2,
51,255,255,223,0,194,0,2,
27,
51,255,255,223,0,194,0,2,
50,
57,193,3,0,1,0,
50,
57,193,3,0,1,1,
50,
57,193,3,0,1,2,
22,
56,243,3,
51,255,255,223,0,0,
27,
51,255,255,223,0,217,0,2,
27,
51,255,255,223,0,217,0,2,
50,
57,193,3,0,1,0,
50,
57,193,3,0,1,1,
50,
57,193,3,0,1,2,
44,
53,
1,
57,193,3,1,15,
57,243,3,0,19,
57,242,3,0,
1,
1,
57,242,3,0,0,
57,243,3,0,2,
1,
57,193,3,0,1,
57,242,3,0,2,
27,
51,255,255,223,0,192,3,1,
57,194,3,0,1,
58,
44,
57,193,3,0,1,
57,194,3,0,3,
1,
57,243,3,0,1,
57,242,3,0,
13,
51,255,255,129,2,1,
25,
51,255,255,223,0,0,0,0,0,1,
29,200,3,
2,
52,1,5,0,
@ -5187,13 +5045,13 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
17,83,7,
51,255,255,223,0,2,
55,245,3,
17,156,8,
17,138,8,
51,255,255,129,2,2,
55,246,3,
17,160,8,
17,142,8,
51,255,255,129,2,2,
55,247,3,
17,164,8,
17,146,8,
51,255,255,129,2,2,
55,248,3,
17,217,2,
@ -5365,11 +5223,11 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
52,1,0,0,0,0,1,
44,
53,
45,166,8,
45,148,8,
27,
51,255,255,213,0,50,2,1,
8,
51,255,255,192,8,2,
51,255,255,174,8,2,
57,220,3,0,
57,221,3,0,
1,
@ -5388,11 +5246,11 @@ static uint8_t SKSL_INCLUDE_sksl_gpu[] = {9,0,207,8,
52,1,0,0,0,0,1,
44,
53,
45,166,8,
45,148,8,
27,
51,255,255,223,0,53,2,1,
8,
51,255,255,201,8,2,
51,255,255,183,8,2,
57,223,3,0,
57,224,3,0,
1,

View File

@ -460,36 +460,12 @@ half $blend_color_saturation(half3 color) {
return max(max(color.r, color.g), color.b) - min(min(color.r, color.g), color.b);
}
half3 $blend_set_color_saturation(half3 hueLumColor, half3 satColor) {
// Sort the RGB components of hueLumColor so that R <= G <= B.
half3 midPt = half3(0);
half3 satPt = half3(0);
if (hueLumColor.r <= hueLumColor.g) {
if (hueLumColor.g <= hueLumColor.b) {
hueLumColor -= hueLumColor.rrr;
midPt.y = satPt.z = 1;
} else if (hueLumColor.r <= hueLumColor.b) {
hueLumColor = hueLumColor.rbg - hueLumColor.rrr;
midPt.z = satPt.y = 1;
} else {
hueLumColor = hueLumColor.brg - hueLumColor.bbb;
midPt.x = satPt.y = 1;
}
} else if (hueLumColor.r <= hueLumColor.b) {
hueLumColor = hueLumColor.grb - hueLumColor.ggg;
midPt.x = satPt.z = 1;
} else if (hueLumColor.g <= hueLumColor.b) {
hueLumColor = hueLumColor.gbr - hueLumColor.ggg;
midPt.z = satPt.x = 1;
} else {
hueLumColor = hueLumColor.bgr - hueLumColor.bbb;
midPt.y = satPt.x = 1;
}
if (hueLumColor.b > 0) {
midPt *= $guarded_divide(hueLumColor.g, hueLumColor.b);
hueLumColor = (midPt + satPt) * $blend_color_saturation(satColor);
}
return hueLumColor;
half3 $blend_set_color_saturation(half3 color, half3 satColor) {
half mn = min(min(color.r, color.g), color.b);
half mx = max(max(color.r, color.g), color.b);
return (mx > mn) ? ((color - mn) * $blend_color_saturation(satColor)) / (mx - mn)
: half3(0);
}
half4 blend_hslc(half4 src, half4 dst, bool flip, bool saturate) {

View File

@ -8,19 +8,19 @@ OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "src"
OpMemberName %_UniformBuffer 1 "dst"
OpName %blend_color_saturation_Qhh3 "blend_color_saturation_Qhh3"
OpName %blend_hslc_h4h4h4bb "blend_hslc_h4h4h4bb"
OpName %alpha "alpha"
OpName %sda "sda"
OpName %dsa "dsa"
OpName %l "l"
OpName %r "r"
OpName %_2_hueLumColor "_2_hueLumColor"
OpName %_3_midPt "_3_midPt"
OpName %_4_satPt "_4_satPt"
OpName %_5_lum "_5_lum"
OpName %_6_result "_6_result"
OpName %_7_minComp "_7_minComp"
OpName %_8_maxComp "_8_maxComp"
OpName %_2_mn "_2_mn"
OpName %_3_mx "_3_mx"
OpName %_4_lum "_4_lum"
OpName %_5_result "_5_result"
OpName %_6_minComp "_6_minComp"
OpName %_7_maxComp "_7_maxComp"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -31,124 +31,129 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %alpha RelaxedPrecision
OpDecorate %12 Binding 0
OpDecorate %12 DescriptorSet 0
OpDecorate %22 RelaxedPrecision
OpDecorate %23 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %26 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %alpha RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %_2_hueLumColor RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %_3_midPt RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %_4_satPt RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %_2_mn RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %_3_mx RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %_4_lum RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %_5_result RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %_6_minComp RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %147 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %_7_maxComp RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %170 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %178 RelaxedPrecision
OpDecorate %179 RelaxedPrecision
OpDecorate %180 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %_5_lum RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %_6_result RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %201 RelaxedPrecision
@ -156,80 +161,36 @@ OpDecorate %202 RelaxedPrecision
OpDecorate %203 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %205 RelaxedPrecision
OpDecorate %_7_minComp RelaxedPrecision
OpDecorate %206 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %213 RelaxedPrecision
OpDecorate %214 RelaxedPrecision
OpDecorate %_8_maxComp RelaxedPrecision
OpDecorate %215 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %220 RelaxedPrecision
OpDecorate %221 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %230 RelaxedPrecision
OpDecorate %235 RelaxedPrecision
OpDecorate %236 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %242 RelaxedPrecision
OpDecorate %243 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %260 RelaxedPrecision
OpDecorate %261 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %268 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %287 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %293 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %302 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -239,397 +200,302 @@ OpDecorate %305 RelaxedPrecision
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%14 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%12 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_0 = OpConstant %float 0
%68 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%16 = OpTypeFunction %float %_ptr_Function_v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%37 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%float_0 = OpConstant %float 0
%125 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%float_0_300000012 = OpConstant %float 0.300000012
%float_0_589999974 = OpConstant %float 0.589999974
%float_0_109999999 = OpConstant %float 0.109999999
%196 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%133 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%false = OpConstantFalse %bool
%void = OpTypeVoid
%298 = OpTypeFunction %void
%235 = OpTypeFunction %void
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%blend_hslc_h4h4h4bb = OpFunction %v4float None %14
%17 = OpFunctionParameter %_ptr_Function_v4float
%18 = OpFunctionParameter %_ptr_Function_v4float
%19 = OpFunctionParameter %_ptr_Function_bool
%20 = OpFunctionParameter %_ptr_Function_bool
%21 = OpLabel
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%blend_color_saturation_Qhh3 = OpFunction %float None %16
%18 = OpFunctionParameter %_ptr_Function_v3float
%19 = OpLabel
%22 = OpLoad %v3float %18
%23 = OpCompositeExtract %float %22 0
%24 = OpLoad %v3float %18
%25 = OpCompositeExtract %float %24 1
%21 = OpExtInst %float %1 FMax %23 %25
%26 = OpLoad %v3float %18
%27 = OpCompositeExtract %float %26 2
%20 = OpExtInst %float %1 FMax %21 %27
%30 = OpLoad %v3float %18
%31 = OpCompositeExtract %float %30 0
%32 = OpLoad %v3float %18
%33 = OpCompositeExtract %float %32 1
%29 = OpExtInst %float %1 FMin %31 %33
%34 = OpLoad %v3float %18
%35 = OpCompositeExtract %float %34 2
%28 = OpExtInst %float %1 FMin %29 %35
%36 = OpFSub %float %20 %28
OpReturnValue %36
OpFunctionEnd
%blend_hslc_h4h4h4bb = OpFunction %v4float None %37
%40 = OpFunctionParameter %_ptr_Function_v4float
%41 = OpFunctionParameter %_ptr_Function_v4float
%42 = OpFunctionParameter %_ptr_Function_bool
%43 = OpFunctionParameter %_ptr_Function_bool
%44 = OpLabel
%alpha = OpVariable %_ptr_Function_float Function
%sda = OpVariable %_ptr_Function_v3float Function
%dsa = OpVariable %_ptr_Function_v3float Function
%l = OpVariable %_ptr_Function_v3float Function
%45 = OpVariable %_ptr_Function_v3float Function
%66 = OpVariable %_ptr_Function_v3float Function
%r = OpVariable %_ptr_Function_v3float Function
%54 = OpVariable %_ptr_Function_v3float Function
%_2_hueLumColor = OpVariable %_ptr_Function_v3float Function
%_3_midPt = OpVariable %_ptr_Function_v3float Function
%_4_satPt = OpVariable %_ptr_Function_v3float Function
%_5_lum = OpVariable %_ptr_Function_float Function
%_6_result = OpVariable %_ptr_Function_v3float Function
%_7_minComp = OpVariable %_ptr_Function_float Function
%_8_maxComp = OpVariable %_ptr_Function_float Function
%24 = OpLoad %v4float %18
%25 = OpCompositeExtract %float %24 3
%26 = OpLoad %v4float %17
%27 = OpCompositeExtract %float %26 3
%28 = OpFMul %float %25 %27
OpStore %alpha %28
%32 = OpLoad %v4float %17
%33 = OpVectorShuffle %v3float %32 %32 0 1 2
%34 = OpLoad %v4float %18
%35 = OpCompositeExtract %float %34 3
%36 = OpVectorTimesScalar %v3float %33 %35
OpStore %sda %36
%38 = OpLoad %v4float %18
%39 = OpVectorShuffle %v3float %38 %38 0 1 2
%40 = OpLoad %v4float %17
%41 = OpCompositeExtract %float %40 3
%42 = OpVectorTimesScalar %v3float %39 %41
OpStore %dsa %42
%44 = OpLoad %bool %19
OpSelectionMerge %48 None
OpBranchConditional %44 %46 %47
%46 = OpLabel
%49 = OpLoad %v3float %dsa
OpStore %45 %49
OpBranch %48
%47 = OpLabel
%50 = OpLoad %v3float %sda
OpStore %45 %50
OpBranch %48
%48 = OpLabel
%51 = OpLoad %v3float %45
OpStore %l %51
%53 = OpLoad %bool %19
OpSelectionMerge %57 None
OpBranchConditional %53 %55 %56
%55 = OpLabel
%58 = OpLoad %v3float %sda
OpStore %54 %58
OpBranch %57
%56 = OpLabel
%59 = OpLoad %v3float %dsa
OpStore %54 %59
OpBranch %57
%57 = OpLabel
%60 = OpLoad %v3float %54
OpStore %r %60
%61 = OpLoad %bool %20
OpSelectionMerge %63 None
OpBranchConditional %61 %62 %63
%62 = OpLabel
%65 = OpLoad %v3float %l
OpStore %_2_hueLumColor %65
OpStore %_3_midPt %68
OpStore %_4_satPt %68
%70 = OpLoad %v3float %_2_hueLumColor
%71 = OpCompositeExtract %float %70 0
%72 = OpLoad %v3float %_2_hueLumColor
%73 = OpCompositeExtract %float %72 1
%74 = OpFOrdLessThanEqual %bool %71 %73
OpSelectionMerge %77 None
OpBranchConditional %74 %75 %76
%75 = OpLabel
%78 = OpLoad %v3float %_2_hueLumColor
%79 = OpCompositeExtract %float %78 1
%80 = OpLoad %v3float %_2_hueLumColor
%81 = OpCompositeExtract %float %80 2
%82 = OpFOrdLessThanEqual %bool %79 %81
OpSelectionMerge %85 None
%75 = OpVariable %_ptr_Function_v3float Function
%_2_mn = OpVariable %_ptr_Function_float Function
%_3_mx = OpVariable %_ptr_Function_float Function
%106 = OpVariable %_ptr_Function_v3float Function
%115 = OpVariable %_ptr_Function_v3float Function
%_4_lum = OpVariable %_ptr_Function_float Function
%_5_result = OpVariable %_ptr_Function_v3float Function
%_6_minComp = OpVariable %_ptr_Function_float Function
%_7_maxComp = OpVariable %_ptr_Function_float Function
%47 = OpLoad %v4float %41
%48 = OpCompositeExtract %float %47 3
%49 = OpLoad %v4float %40
%50 = OpCompositeExtract %float %49 3
%51 = OpFMul %float %48 %50
OpStore %alpha %51
%53 = OpLoad %v4float %40
%54 = OpVectorShuffle %v3float %53 %53 0 1 2
%55 = OpLoad %v4float %41
%56 = OpCompositeExtract %float %55 3
%57 = OpVectorTimesScalar %v3float %54 %56
OpStore %sda %57
%59 = OpLoad %v4float %41
%60 = OpVectorShuffle %v3float %59 %59 0 1 2
%61 = OpLoad %v4float %40
%62 = OpCompositeExtract %float %61 3
%63 = OpVectorTimesScalar %v3float %60 %62
OpStore %dsa %63
%65 = OpLoad %bool %42
OpSelectionMerge %69 None
OpBranchConditional %65 %67 %68
%67 = OpLabel
%70 = OpLoad %v3float %dsa
OpStore %66 %70
OpBranch %69
%68 = OpLabel
%71 = OpLoad %v3float %sda
OpStore %66 %71
OpBranch %69
%69 = OpLabel
%72 = OpLoad %v3float %66
OpStore %l %72
%74 = OpLoad %bool %42
OpSelectionMerge %78 None
OpBranchConditional %74 %76 %77
%76 = OpLabel
%79 = OpLoad %v3float %sda
OpStore %75 %79
OpBranch %78
%77 = OpLabel
%80 = OpLoad %v3float %dsa
OpStore %75 %80
OpBranch %78
%78 = OpLabel
%81 = OpLoad %v3float %75
OpStore %r %81
%82 = OpLoad %bool %43
OpSelectionMerge %84 None
OpBranchConditional %82 %83 %84
%83 = OpLabel
%86 = OpLoad %v3float %_2_hueLumColor
%87 = OpLoad %v3float %_2_hueLumColor
%88 = OpVectorShuffle %v3float %87 %87 0 0 0
%89 = OpFSub %v3float %86 %88
OpStore %_2_hueLumColor %89
%91 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %91 %float_1
%94 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %94 %float_1
OpBranch %85
%88 = OpLoad %v3float %l
%89 = OpCompositeExtract %float %88 0
%90 = OpLoad %v3float %l
%91 = OpCompositeExtract %float %90 1
%87 = OpExtInst %float %1 FMin %89 %91
%92 = OpLoad %v3float %l
%93 = OpCompositeExtract %float %92 2
%86 = OpExtInst %float %1 FMin %87 %93
OpStore %_2_mn %86
%97 = OpLoad %v3float %l
%98 = OpCompositeExtract %float %97 0
%99 = OpLoad %v3float %l
%100 = OpCompositeExtract %float %99 1
%96 = OpExtInst %float %1 FMax %98 %100
%101 = OpLoad %v3float %l
%102 = OpCompositeExtract %float %101 2
%95 = OpExtInst %float %1 FMax %96 %102
OpStore %_3_mx %95
%103 = OpLoad %float %_3_mx
%104 = OpLoad %float %_2_mn
%105 = OpFOrdGreaterThan %bool %103 %104
OpSelectionMerge %109 None
OpBranchConditional %105 %107 %108
%107 = OpLabel
%110 = OpLoad %v3float %l
%111 = OpLoad %float %_2_mn
%112 = OpCompositeConstruct %v3float %111 %111 %111
%113 = OpFSub %v3float %110 %112
%114 = OpLoad %v3float %r
OpStore %115 %114
%116 = OpFunctionCall %float %blend_color_saturation_Qhh3 %115
%117 = OpVectorTimesScalar %v3float %113 %116
%118 = OpLoad %float %_3_mx
%119 = OpLoad %float %_2_mn
%120 = OpFSub %float %118 %119
%122 = OpFDiv %float %float_1 %120
%123 = OpVectorTimesScalar %v3float %117 %122
OpStore %106 %123
OpBranch %109
%108 = OpLabel
OpStore %106 %125
OpBranch %109
%109 = OpLabel
%126 = OpLoad %v3float %106
OpStore %l %126
%127 = OpLoad %v3float %dsa
OpStore %r %127
OpBranch %84
%84 = OpLabel
%96 = OpLoad %v3float %_2_hueLumColor
%97 = OpCompositeExtract %float %96 0
%98 = OpLoad %v3float %_2_hueLumColor
%99 = OpCompositeExtract %float %98 2
%100 = OpFOrdLessThanEqual %bool %97 %99
OpSelectionMerge %103 None
OpBranchConditional %100 %101 %102
%101 = OpLabel
%104 = OpLoad %v3float %_2_hueLumColor
%105 = OpVectorShuffle %v3float %104 %104 0 2 1
%106 = OpLoad %v3float %_2_hueLumColor
%107 = OpVectorShuffle %v3float %106 %106 0 0 0
%108 = OpFSub %v3float %105 %107
OpStore %_2_hueLumColor %108
%109 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %109 %float_1
%110 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %110 %float_1
OpBranch %103
%102 = OpLabel
%111 = OpLoad %v3float %_2_hueLumColor
%112 = OpVectorShuffle %v3float %111 %111 2 0 1
%113 = OpLoad %v3float %_2_hueLumColor
%114 = OpVectorShuffle %v3float %113 %113 2 2 2
%115 = OpFSub %v3float %112 %114
OpStore %_2_hueLumColor %115
%116 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %116 %float_1
%117 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %117 %float_1
OpBranch %103
%103 = OpLabel
OpBranch %85
%85 = OpLabel
OpBranch %77
%76 = OpLabel
%119 = OpLoad %v3float %_2_hueLumColor
%120 = OpCompositeExtract %float %119 0
%121 = OpLoad %v3float %_2_hueLumColor
%122 = OpCompositeExtract %float %121 2
%123 = OpFOrdLessThanEqual %bool %120 %122
OpSelectionMerge %126 None
OpBranchConditional %123 %124 %125
%124 = OpLabel
%127 = OpLoad %v3float %_2_hueLumColor
%128 = OpVectorShuffle %v3float %127 %127 1 0 2
%129 = OpLoad %v3float %_2_hueLumColor
%130 = OpVectorShuffle %v3float %129 %129 1 1 1
%131 = OpFSub %v3float %128 %130
OpStore %_2_hueLumColor %131
%132 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %132 %float_1
%133 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %133 %float_1
OpBranch %126
%125 = OpLabel
%134 = OpLoad %v3float %_2_hueLumColor
%135 = OpCompositeExtract %float %134 1
%136 = OpLoad %v3float %_2_hueLumColor
%137 = OpCompositeExtract %float %136 2
%138 = OpFOrdLessThanEqual %bool %135 %137
OpSelectionMerge %141 None
OpBranchConditional %138 %139 %140
%139 = OpLabel
%142 = OpLoad %v3float %_2_hueLumColor
%143 = OpVectorShuffle %v3float %142 %142 1 2 0
%144 = OpLoad %v3float %_2_hueLumColor
%145 = OpVectorShuffle %v3float %144 %144 1 1 1
%146 = OpFSub %v3float %143 %145
OpStore %_2_hueLumColor %146
%147 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %147 %float_1
%148 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %148 %float_1
OpBranch %141
%140 = OpLabel
%149 = OpLoad %v3float %_2_hueLumColor
%150 = OpVectorShuffle %v3float %149 %149 2 1 0
%151 = OpLoad %v3float %_2_hueLumColor
%152 = OpVectorShuffle %v3float %151 %151 2 2 2
%153 = OpFSub %v3float %150 %152
OpStore %_2_hueLumColor %153
%154 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %154 %float_1
%155 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %155 %float_1
OpBranch %141
%141 = OpLabel
OpBranch %126
%126 = OpLabel
OpBranch %77
%77 = OpLabel
%156 = OpLoad %v3float %_2_hueLumColor
%157 = OpCompositeExtract %float %156 2
%158 = OpFOrdGreaterThan %bool %157 %float_0
OpSelectionMerge %160 None
OpBranchConditional %158 %159 %160
%159 = OpLabel
%161 = OpLoad %v3float %_3_midPt
%162 = OpLoad %v3float %_2_hueLumColor
%163 = OpCompositeExtract %float %162 1
%164 = OpLoad %v3float %_2_hueLumColor
%165 = OpCompositeExtract %float %164 2
%166 = OpFDiv %float %163 %165
%167 = OpVectorTimesScalar %v3float %161 %166
OpStore %_3_midPt %167
%168 = OpLoad %v3float %_3_midPt
%169 = OpLoad %v3float %_4_satPt
%170 = OpFAdd %v3float %168 %169
%173 = OpLoad %v3float %r
%174 = OpCompositeExtract %float %173 0
%175 = OpLoad %v3float %r
%176 = OpCompositeExtract %float %175 1
%172 = OpExtInst %float %1 FMax %174 %176
%177 = OpLoad %v3float %r
%178 = OpCompositeExtract %float %177 2
%171 = OpExtInst %float %1 FMax %172 %178
%181 = OpLoad %v3float %r
%182 = OpCompositeExtract %float %181 0
%183 = OpLoad %v3float %r
%184 = OpCompositeExtract %float %183 1
%180 = OpExtInst %float %1 FMin %182 %184
%185 = OpLoad %v3float %r
%186 = OpCompositeExtract %float %185 2
%179 = OpExtInst %float %1 FMin %180 %186
%187 = OpFSub %float %171 %179
%188 = OpVectorTimesScalar %v3float %170 %187
OpStore %_2_hueLumColor %188
OpBranch %160
%160 = OpLabel
%189 = OpLoad %v3float %_2_hueLumColor
OpStore %l %189
%190 = OpLoad %v3float %dsa
OpStore %r %190
OpBranch %63
%63 = OpLabel
%197 = OpLoad %v3float %r
%192 = OpDot %float %196 %197
OpStore %_5_lum %192
%199 = OpLoad %float %_5_lum
%201 = OpLoad %v3float %l
%200 = OpDot %float %196 %201
%202 = OpFSub %float %199 %200
%203 = OpLoad %v3float %l
%204 = OpCompositeConstruct %v3float %202 %202 %202
%205 = OpFAdd %v3float %204 %203
OpStore %_6_result %205
%209 = OpLoad %v3float %_6_result
%210 = OpCompositeExtract %float %209 0
%211 = OpLoad %v3float %_6_result
%212 = OpCompositeExtract %float %211 1
%208 = OpExtInst %float %1 FMin %210 %212
%213 = OpLoad %v3float %_6_result
%214 = OpCompositeExtract %float %213 2
%207 = OpExtInst %float %1 FMin %208 %214
OpStore %_7_minComp %207
%218 = OpLoad %v3float %_6_result
%219 = OpCompositeExtract %float %218 0
%220 = OpLoad %v3float %_6_result
%221 = OpCompositeExtract %float %220 1
%217 = OpExtInst %float %1 FMax %219 %221
%222 = OpLoad %v3float %_6_result
%223 = OpCompositeExtract %float %222 2
%216 = OpExtInst %float %1 FMax %217 %223
OpStore %_8_maxComp %216
%225 = OpLoad %float %_7_minComp
%226 = OpFOrdLessThan %bool %225 %float_0
OpSelectionMerge %228 None
OpBranchConditional %226 %227 %228
%227 = OpLabel
%229 = OpLoad %float %_5_lum
%230 = OpLoad %float %_7_minComp
%231 = OpFUnordNotEqual %bool %229 %230
OpBranch %228
%228 = OpLabel
%232 = OpPhi %bool %false %63 %231 %227
OpSelectionMerge %234 None
OpBranchConditional %232 %233 %234
%233 = OpLabel
%235 = OpLoad %float %_5_lum
%236 = OpLoad %v3float %_6_result
%237 = OpLoad %float %_5_lum
%238 = OpCompositeConstruct %v3float %237 %237 %237
%239 = OpFSub %v3float %236 %238
%240 = OpLoad %float %_5_lum
%241 = OpLoad %float %_5_lum
%242 = OpLoad %float %_7_minComp
%243 = OpFSub %float %241 %242
%244 = OpFDiv %float %240 %243
%245 = OpVectorTimesScalar %v3float %239 %244
%246 = OpCompositeConstruct %v3float %235 %235 %235
%247 = OpFAdd %v3float %246 %245
OpStore %_6_result %247
OpBranch %234
%234 = OpLabel
%248 = OpLoad %float %_8_maxComp
%249 = OpLoad %float %alpha
%250 = OpFOrdGreaterThan %bool %248 %249
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %float %_8_maxComp
%254 = OpLoad %float %_5_lum
%255 = OpFUnordNotEqual %bool %253 %254
OpBranch %252
%252 = OpLabel
%256 = OpPhi %bool %false %234 %255 %251
OpSelectionMerge %258 None
OpBranchConditional %256 %257 %258
%257 = OpLabel
%259 = OpLoad %float %_5_lum
%260 = OpLoad %v3float %_6_result
%261 = OpLoad %float %_5_lum
%262 = OpCompositeConstruct %v3float %261 %261 %261
%263 = OpFSub %v3float %260 %262
%264 = OpLoad %float %alpha
%265 = OpLoad %float %_5_lum
%266 = OpFSub %float %264 %265
%267 = OpVectorTimesScalar %v3float %263 %266
%268 = OpLoad %float %_8_maxComp
%269 = OpLoad %float %_5_lum
%270 = OpFSub %float %268 %269
%271 = OpFDiv %float %float_1 %270
%272 = OpVectorTimesScalar %v3float %267 %271
%273 = OpCompositeConstruct %v3float %259 %259 %259
%274 = OpFAdd %v3float %273 %272
OpStore %_6_result %274
OpBranch %258
%258 = OpLabel
%275 = OpLoad %v3float %_6_result
%276 = OpLoad %v4float %18
%277 = OpVectorShuffle %v3float %276 %276 0 1 2
%278 = OpFAdd %v3float %275 %277
%279 = OpLoad %v3float %dsa
%280 = OpFSub %v3float %278 %279
%281 = OpLoad %v4float %17
%282 = OpVectorShuffle %v3float %281 %281 0 1 2
%283 = OpFAdd %v3float %280 %282
%284 = OpLoad %v3float %sda
%285 = OpFSub %v3float %283 %284
%286 = OpCompositeExtract %float %285 0
%287 = OpCompositeExtract %float %285 1
%288 = OpCompositeExtract %float %285 2
%289 = OpLoad %v4float %17
%290 = OpCompositeExtract %float %289 3
%291 = OpLoad %v4float %18
%292 = OpCompositeExtract %float %291 3
%293 = OpFAdd %float %290 %292
%294 = OpLoad %float %alpha
%295 = OpFSub %float %293 %294
%296 = OpCompositeConstruct %v4float %286 %287 %288 %295
OpReturnValue %296
%134 = OpLoad %v3float %r
%129 = OpDot %float %133 %134
OpStore %_4_lum %129
%136 = OpLoad %float %_4_lum
%138 = OpLoad %v3float %l
%137 = OpDot %float %133 %138
%139 = OpFSub %float %136 %137
%140 = OpLoad %v3float %l
%141 = OpCompositeConstruct %v3float %139 %139 %139
%142 = OpFAdd %v3float %141 %140
OpStore %_5_result %142
%146 = OpLoad %v3float %_5_result
%147 = OpCompositeExtract %float %146 0
%148 = OpLoad %v3float %_5_result
%149 = OpCompositeExtract %float %148 1
%145 = OpExtInst %float %1 FMin %147 %149
%150 = OpLoad %v3float %_5_result
%151 = OpCompositeExtract %float %150 2
%144 = OpExtInst %float %1 FMin %145 %151
OpStore %_6_minComp %144
%155 = OpLoad %v3float %_5_result
%156 = OpCompositeExtract %float %155 0
%157 = OpLoad %v3float %_5_result
%158 = OpCompositeExtract %float %157 1
%154 = OpExtInst %float %1 FMax %156 %158
%159 = OpLoad %v3float %_5_result
%160 = OpCompositeExtract %float %159 2
%153 = OpExtInst %float %1 FMax %154 %160
OpStore %_7_maxComp %153
%162 = OpLoad %float %_6_minComp
%163 = OpFOrdLessThan %bool %162 %float_0
OpSelectionMerge %165 None
OpBranchConditional %163 %164 %165
%164 = OpLabel
%166 = OpLoad %float %_4_lum
%167 = OpLoad %float %_6_minComp
%168 = OpFUnordNotEqual %bool %166 %167
OpBranch %165
%165 = OpLabel
%169 = OpPhi %bool %false %84 %168 %164
OpSelectionMerge %171 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%172 = OpLoad %float %_4_lum
%173 = OpLoad %v3float %_5_result
%174 = OpLoad %float %_4_lum
%175 = OpCompositeConstruct %v3float %174 %174 %174
%176 = OpFSub %v3float %173 %175
%177 = OpLoad %float %_4_lum
%178 = OpLoad %float %_4_lum
%179 = OpLoad %float %_6_minComp
%180 = OpFSub %float %178 %179
%181 = OpFDiv %float %177 %180
%182 = OpVectorTimesScalar %v3float %176 %181
%183 = OpCompositeConstruct %v3float %172 %172 %172
%184 = OpFAdd %v3float %183 %182
OpStore %_5_result %184
OpBranch %171
%171 = OpLabel
%185 = OpLoad %float %_7_maxComp
%186 = OpLoad %float %alpha
%187 = OpFOrdGreaterThan %bool %185 %186
OpSelectionMerge %189 None
OpBranchConditional %187 %188 %189
%188 = OpLabel
%190 = OpLoad %float %_7_maxComp
%191 = OpLoad %float %_4_lum
%192 = OpFUnordNotEqual %bool %190 %191
OpBranch %189
%189 = OpLabel
%193 = OpPhi %bool %false %171 %192 %188
OpSelectionMerge %195 None
OpBranchConditional %193 %194 %195
%194 = OpLabel
%196 = OpLoad %float %_4_lum
%197 = OpLoad %v3float %_5_result
%198 = OpLoad %float %_4_lum
%199 = OpCompositeConstruct %v3float %198 %198 %198
%200 = OpFSub %v3float %197 %199
%201 = OpLoad %float %alpha
%202 = OpLoad %float %_4_lum
%203 = OpFSub %float %201 %202
%204 = OpVectorTimesScalar %v3float %200 %203
%205 = OpLoad %float %_7_maxComp
%206 = OpLoad %float %_4_lum
%207 = OpFSub %float %205 %206
%208 = OpFDiv %float %float_1 %207
%209 = OpVectorTimesScalar %v3float %204 %208
%210 = OpCompositeConstruct %v3float %196 %196 %196
%211 = OpFAdd %v3float %210 %209
OpStore %_5_result %211
OpBranch %195
%195 = OpLabel
%212 = OpLoad %v3float %_5_result
%213 = OpLoad %v4float %41
%214 = OpVectorShuffle %v3float %213 %213 0 1 2
%215 = OpFAdd %v3float %212 %214
%216 = OpLoad %v3float %dsa
%217 = OpFSub %v3float %215 %216
%218 = OpLoad %v4float %40
%219 = OpVectorShuffle %v3float %218 %218 0 1 2
%220 = OpFAdd %v3float %217 %219
%221 = OpLoad %v3float %sda
%222 = OpFSub %v3float %220 %221
%223 = OpCompositeExtract %float %222 0
%224 = OpCompositeExtract %float %222 1
%225 = OpCompositeExtract %float %222 2
%226 = OpLoad %v4float %40
%227 = OpCompositeExtract %float %226 3
%228 = OpLoad %v4float %41
%229 = OpCompositeExtract %float %228 3
%230 = OpFAdd %float %227 %229
%231 = OpLoad %float %alpha
%232 = OpFSub %float %230 %231
%233 = OpCompositeConstruct %v4float %223 %224 %225 %232
OpReturnValue %233
OpFunctionEnd
%main = OpFunction %void None %298
%299 = OpLabel
%303 = OpVariable %_ptr_Function_v4float Function
%306 = OpVariable %_ptr_Function_v4float Function
%307 = OpVariable %_ptr_Function_bool Function
%308 = OpVariable %_ptr_Function_bool Function
%300 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%302 = OpLoad %v4float %300
OpStore %303 %302
%304 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%305 = OpLoad %v4float %304
OpStore %306 %305
OpStore %307 %false
OpStore %308 %false
%309 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %303 %306 %307 %308
OpStore %sk_FragColor %309
%main = OpFunction %void None %235
%236 = OpLabel
%242 = OpVariable %_ptr_Function_v4float Function
%246 = OpVariable %_ptr_Function_v4float Function
%247 = OpVariable %_ptr_Function_bool Function
%248 = OpVariable %_ptr_Function_bool Function
%237 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%241 = OpLoad %v4float %237
OpStore %242 %241
%243 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%245 = OpLoad %v4float %243
OpStore %246 %245
OpStore %247 %false
OpStore %248 %false
%249 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %242 %246 %247 %248
OpStore %sk_FragColor %249
OpReturn
OpFunctionEnd

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, false, false);

View File

@ -10,6 +10,9 @@ struct Inputs {
struct Outputs {
half4 sk_FragColor [[color(0)]];
};
half blend_color_saturation_Qhh3(half3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half alpha = dst.w * src.w;
half3 sda = src.xyz * dst.w;
@ -17,48 +20,22 @@ half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half3 l = flip ? dsa : sda;
half3 r = flip ? sda : dsa;
if (saturate) {
half3 _2_hueLumColor = l;
half3 _3_midPt = half3(0.0h);
half3 _4_satPt = half3(0.0h);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0h);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0h);
}
if (_2_hueLumColor.z > 0.0h) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
half _2_mn = min(min(l.x, l.y), l.z);
half _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : half3(0.0h);
r = dsa;
}
half _5_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _6_result = (_5_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
half _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0h && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
half _4_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _5_result = (_4_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
half _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0h && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return half4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return half4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, false, false);

View File

@ -8,19 +8,19 @@ OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "src"
OpMemberName %_UniformBuffer 1 "dst"
OpName %blend_color_saturation_Qhh3 "blend_color_saturation_Qhh3"
OpName %blend_hslc_h4h4h4bb "blend_hslc_h4h4h4bb"
OpName %alpha "alpha"
OpName %sda "sda"
OpName %dsa "dsa"
OpName %l "l"
OpName %r "r"
OpName %_2_hueLumColor "_2_hueLumColor"
OpName %_3_midPt "_3_midPt"
OpName %_4_satPt "_4_satPt"
OpName %_5_lum "_5_lum"
OpName %_6_result "_6_result"
OpName %_7_minComp "_7_minComp"
OpName %_8_maxComp "_8_maxComp"
OpName %_2_mn "_2_mn"
OpName %_3_mx "_3_mx"
OpName %_4_lum "_4_lum"
OpName %_5_result "_5_result"
OpName %_6_minComp "_6_minComp"
OpName %_7_maxComp "_7_maxComp"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -31,124 +31,129 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %alpha RelaxedPrecision
OpDecorate %12 Binding 0
OpDecorate %12 DescriptorSet 0
OpDecorate %22 RelaxedPrecision
OpDecorate %23 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %26 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %alpha RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %_2_hueLumColor RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %_3_midPt RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %_4_satPt RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %_2_mn RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %_3_mx RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %_4_lum RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %_5_result RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %_6_minComp RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %147 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %_7_maxComp RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %170 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %178 RelaxedPrecision
OpDecorate %179 RelaxedPrecision
OpDecorate %180 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %_5_lum RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %_6_result RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %201 RelaxedPrecision
@ -156,80 +161,36 @@ OpDecorate %202 RelaxedPrecision
OpDecorate %203 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %205 RelaxedPrecision
OpDecorate %_7_minComp RelaxedPrecision
OpDecorate %206 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %213 RelaxedPrecision
OpDecorate %214 RelaxedPrecision
OpDecorate %_8_maxComp RelaxedPrecision
OpDecorate %215 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %220 RelaxedPrecision
OpDecorate %221 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %230 RelaxedPrecision
OpDecorate %235 RelaxedPrecision
OpDecorate %236 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %242 RelaxedPrecision
OpDecorate %243 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %260 RelaxedPrecision
OpDecorate %261 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %268 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %287 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %293 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %302 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -239,398 +200,303 @@ OpDecorate %305 RelaxedPrecision
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%14 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%12 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_0 = OpConstant %float 0
%68 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%16 = OpTypeFunction %float %_ptr_Function_v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%37 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%float_0 = OpConstant %float 0
%125 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%float_0_300000012 = OpConstant %float 0.300000012
%float_0_589999974 = OpConstant %float 0.589999974
%float_0_109999999 = OpConstant %float 0.109999999
%196 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%133 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%false = OpConstantFalse %bool
%void = OpTypeVoid
%298 = OpTypeFunction %void
%235 = OpTypeFunction %void
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%true = OpConstantTrue %bool
%blend_hslc_h4h4h4bb = OpFunction %v4float None %14
%17 = OpFunctionParameter %_ptr_Function_v4float
%18 = OpFunctionParameter %_ptr_Function_v4float
%19 = OpFunctionParameter %_ptr_Function_bool
%20 = OpFunctionParameter %_ptr_Function_bool
%21 = OpLabel
%blend_color_saturation_Qhh3 = OpFunction %float None %16
%18 = OpFunctionParameter %_ptr_Function_v3float
%19 = OpLabel
%22 = OpLoad %v3float %18
%23 = OpCompositeExtract %float %22 0
%24 = OpLoad %v3float %18
%25 = OpCompositeExtract %float %24 1
%21 = OpExtInst %float %1 FMax %23 %25
%26 = OpLoad %v3float %18
%27 = OpCompositeExtract %float %26 2
%20 = OpExtInst %float %1 FMax %21 %27
%30 = OpLoad %v3float %18
%31 = OpCompositeExtract %float %30 0
%32 = OpLoad %v3float %18
%33 = OpCompositeExtract %float %32 1
%29 = OpExtInst %float %1 FMin %31 %33
%34 = OpLoad %v3float %18
%35 = OpCompositeExtract %float %34 2
%28 = OpExtInst %float %1 FMin %29 %35
%36 = OpFSub %float %20 %28
OpReturnValue %36
OpFunctionEnd
%blend_hslc_h4h4h4bb = OpFunction %v4float None %37
%40 = OpFunctionParameter %_ptr_Function_v4float
%41 = OpFunctionParameter %_ptr_Function_v4float
%42 = OpFunctionParameter %_ptr_Function_bool
%43 = OpFunctionParameter %_ptr_Function_bool
%44 = OpLabel
%alpha = OpVariable %_ptr_Function_float Function
%sda = OpVariable %_ptr_Function_v3float Function
%dsa = OpVariable %_ptr_Function_v3float Function
%l = OpVariable %_ptr_Function_v3float Function
%45 = OpVariable %_ptr_Function_v3float Function
%66 = OpVariable %_ptr_Function_v3float Function
%r = OpVariable %_ptr_Function_v3float Function
%54 = OpVariable %_ptr_Function_v3float Function
%_2_hueLumColor = OpVariable %_ptr_Function_v3float Function
%_3_midPt = OpVariable %_ptr_Function_v3float Function
%_4_satPt = OpVariable %_ptr_Function_v3float Function
%_5_lum = OpVariable %_ptr_Function_float Function
%_6_result = OpVariable %_ptr_Function_v3float Function
%_7_minComp = OpVariable %_ptr_Function_float Function
%_8_maxComp = OpVariable %_ptr_Function_float Function
%24 = OpLoad %v4float %18
%25 = OpCompositeExtract %float %24 3
%26 = OpLoad %v4float %17
%27 = OpCompositeExtract %float %26 3
%28 = OpFMul %float %25 %27
OpStore %alpha %28
%32 = OpLoad %v4float %17
%33 = OpVectorShuffle %v3float %32 %32 0 1 2
%34 = OpLoad %v4float %18
%35 = OpCompositeExtract %float %34 3
%36 = OpVectorTimesScalar %v3float %33 %35
OpStore %sda %36
%38 = OpLoad %v4float %18
%39 = OpVectorShuffle %v3float %38 %38 0 1 2
%40 = OpLoad %v4float %17
%41 = OpCompositeExtract %float %40 3
%42 = OpVectorTimesScalar %v3float %39 %41
OpStore %dsa %42
%44 = OpLoad %bool %19
OpSelectionMerge %48 None
OpBranchConditional %44 %46 %47
%46 = OpLabel
%49 = OpLoad %v3float %dsa
OpStore %45 %49
OpBranch %48
%47 = OpLabel
%50 = OpLoad %v3float %sda
OpStore %45 %50
OpBranch %48
%48 = OpLabel
%51 = OpLoad %v3float %45
OpStore %l %51
%53 = OpLoad %bool %19
OpSelectionMerge %57 None
OpBranchConditional %53 %55 %56
%55 = OpLabel
%58 = OpLoad %v3float %sda
OpStore %54 %58
OpBranch %57
%56 = OpLabel
%59 = OpLoad %v3float %dsa
OpStore %54 %59
OpBranch %57
%57 = OpLabel
%60 = OpLoad %v3float %54
OpStore %r %60
%61 = OpLoad %bool %20
OpSelectionMerge %63 None
OpBranchConditional %61 %62 %63
%62 = OpLabel
%65 = OpLoad %v3float %l
OpStore %_2_hueLumColor %65
OpStore %_3_midPt %68
OpStore %_4_satPt %68
%70 = OpLoad %v3float %_2_hueLumColor
%71 = OpCompositeExtract %float %70 0
%72 = OpLoad %v3float %_2_hueLumColor
%73 = OpCompositeExtract %float %72 1
%74 = OpFOrdLessThanEqual %bool %71 %73
OpSelectionMerge %77 None
OpBranchConditional %74 %75 %76
%75 = OpLabel
%78 = OpLoad %v3float %_2_hueLumColor
%79 = OpCompositeExtract %float %78 1
%80 = OpLoad %v3float %_2_hueLumColor
%81 = OpCompositeExtract %float %80 2
%82 = OpFOrdLessThanEqual %bool %79 %81
OpSelectionMerge %85 None
%75 = OpVariable %_ptr_Function_v3float Function
%_2_mn = OpVariable %_ptr_Function_float Function
%_3_mx = OpVariable %_ptr_Function_float Function
%106 = OpVariable %_ptr_Function_v3float Function
%115 = OpVariable %_ptr_Function_v3float Function
%_4_lum = OpVariable %_ptr_Function_float Function
%_5_result = OpVariable %_ptr_Function_v3float Function
%_6_minComp = OpVariable %_ptr_Function_float Function
%_7_maxComp = OpVariable %_ptr_Function_float Function
%47 = OpLoad %v4float %41
%48 = OpCompositeExtract %float %47 3
%49 = OpLoad %v4float %40
%50 = OpCompositeExtract %float %49 3
%51 = OpFMul %float %48 %50
OpStore %alpha %51
%53 = OpLoad %v4float %40
%54 = OpVectorShuffle %v3float %53 %53 0 1 2
%55 = OpLoad %v4float %41
%56 = OpCompositeExtract %float %55 3
%57 = OpVectorTimesScalar %v3float %54 %56
OpStore %sda %57
%59 = OpLoad %v4float %41
%60 = OpVectorShuffle %v3float %59 %59 0 1 2
%61 = OpLoad %v4float %40
%62 = OpCompositeExtract %float %61 3
%63 = OpVectorTimesScalar %v3float %60 %62
OpStore %dsa %63
%65 = OpLoad %bool %42
OpSelectionMerge %69 None
OpBranchConditional %65 %67 %68
%67 = OpLabel
%70 = OpLoad %v3float %dsa
OpStore %66 %70
OpBranch %69
%68 = OpLabel
%71 = OpLoad %v3float %sda
OpStore %66 %71
OpBranch %69
%69 = OpLabel
%72 = OpLoad %v3float %66
OpStore %l %72
%74 = OpLoad %bool %42
OpSelectionMerge %78 None
OpBranchConditional %74 %76 %77
%76 = OpLabel
%79 = OpLoad %v3float %sda
OpStore %75 %79
OpBranch %78
%77 = OpLabel
%80 = OpLoad %v3float %dsa
OpStore %75 %80
OpBranch %78
%78 = OpLabel
%81 = OpLoad %v3float %75
OpStore %r %81
%82 = OpLoad %bool %43
OpSelectionMerge %84 None
OpBranchConditional %82 %83 %84
%83 = OpLabel
%86 = OpLoad %v3float %_2_hueLumColor
%87 = OpLoad %v3float %_2_hueLumColor
%88 = OpVectorShuffle %v3float %87 %87 0 0 0
%89 = OpFSub %v3float %86 %88
OpStore %_2_hueLumColor %89
%91 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %91 %float_1
%94 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %94 %float_1
OpBranch %85
%88 = OpLoad %v3float %l
%89 = OpCompositeExtract %float %88 0
%90 = OpLoad %v3float %l
%91 = OpCompositeExtract %float %90 1
%87 = OpExtInst %float %1 FMin %89 %91
%92 = OpLoad %v3float %l
%93 = OpCompositeExtract %float %92 2
%86 = OpExtInst %float %1 FMin %87 %93
OpStore %_2_mn %86
%97 = OpLoad %v3float %l
%98 = OpCompositeExtract %float %97 0
%99 = OpLoad %v3float %l
%100 = OpCompositeExtract %float %99 1
%96 = OpExtInst %float %1 FMax %98 %100
%101 = OpLoad %v3float %l
%102 = OpCompositeExtract %float %101 2
%95 = OpExtInst %float %1 FMax %96 %102
OpStore %_3_mx %95
%103 = OpLoad %float %_3_mx
%104 = OpLoad %float %_2_mn
%105 = OpFOrdGreaterThan %bool %103 %104
OpSelectionMerge %109 None
OpBranchConditional %105 %107 %108
%107 = OpLabel
%110 = OpLoad %v3float %l
%111 = OpLoad %float %_2_mn
%112 = OpCompositeConstruct %v3float %111 %111 %111
%113 = OpFSub %v3float %110 %112
%114 = OpLoad %v3float %r
OpStore %115 %114
%116 = OpFunctionCall %float %blend_color_saturation_Qhh3 %115
%117 = OpVectorTimesScalar %v3float %113 %116
%118 = OpLoad %float %_3_mx
%119 = OpLoad %float %_2_mn
%120 = OpFSub %float %118 %119
%122 = OpFDiv %float %float_1 %120
%123 = OpVectorTimesScalar %v3float %117 %122
OpStore %106 %123
OpBranch %109
%108 = OpLabel
OpStore %106 %125
OpBranch %109
%109 = OpLabel
%126 = OpLoad %v3float %106
OpStore %l %126
%127 = OpLoad %v3float %dsa
OpStore %r %127
OpBranch %84
%84 = OpLabel
%96 = OpLoad %v3float %_2_hueLumColor
%97 = OpCompositeExtract %float %96 0
%98 = OpLoad %v3float %_2_hueLumColor
%99 = OpCompositeExtract %float %98 2
%100 = OpFOrdLessThanEqual %bool %97 %99
OpSelectionMerge %103 None
OpBranchConditional %100 %101 %102
%101 = OpLabel
%104 = OpLoad %v3float %_2_hueLumColor
%105 = OpVectorShuffle %v3float %104 %104 0 2 1
%106 = OpLoad %v3float %_2_hueLumColor
%107 = OpVectorShuffle %v3float %106 %106 0 0 0
%108 = OpFSub %v3float %105 %107
OpStore %_2_hueLumColor %108
%109 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %109 %float_1
%110 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %110 %float_1
OpBranch %103
%102 = OpLabel
%111 = OpLoad %v3float %_2_hueLumColor
%112 = OpVectorShuffle %v3float %111 %111 2 0 1
%113 = OpLoad %v3float %_2_hueLumColor
%114 = OpVectorShuffle %v3float %113 %113 2 2 2
%115 = OpFSub %v3float %112 %114
OpStore %_2_hueLumColor %115
%116 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %116 %float_1
%117 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %117 %float_1
OpBranch %103
%103 = OpLabel
OpBranch %85
%85 = OpLabel
OpBranch %77
%76 = OpLabel
%119 = OpLoad %v3float %_2_hueLumColor
%120 = OpCompositeExtract %float %119 0
%121 = OpLoad %v3float %_2_hueLumColor
%122 = OpCompositeExtract %float %121 2
%123 = OpFOrdLessThanEqual %bool %120 %122
OpSelectionMerge %126 None
OpBranchConditional %123 %124 %125
%124 = OpLabel
%127 = OpLoad %v3float %_2_hueLumColor
%128 = OpVectorShuffle %v3float %127 %127 1 0 2
%129 = OpLoad %v3float %_2_hueLumColor
%130 = OpVectorShuffle %v3float %129 %129 1 1 1
%131 = OpFSub %v3float %128 %130
OpStore %_2_hueLumColor %131
%132 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %132 %float_1
%133 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %133 %float_1
OpBranch %126
%125 = OpLabel
%134 = OpLoad %v3float %_2_hueLumColor
%135 = OpCompositeExtract %float %134 1
%136 = OpLoad %v3float %_2_hueLumColor
%137 = OpCompositeExtract %float %136 2
%138 = OpFOrdLessThanEqual %bool %135 %137
OpSelectionMerge %141 None
OpBranchConditional %138 %139 %140
%139 = OpLabel
%142 = OpLoad %v3float %_2_hueLumColor
%143 = OpVectorShuffle %v3float %142 %142 1 2 0
%144 = OpLoad %v3float %_2_hueLumColor
%145 = OpVectorShuffle %v3float %144 %144 1 1 1
%146 = OpFSub %v3float %143 %145
OpStore %_2_hueLumColor %146
%147 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %147 %float_1
%148 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %148 %float_1
OpBranch %141
%140 = OpLabel
%149 = OpLoad %v3float %_2_hueLumColor
%150 = OpVectorShuffle %v3float %149 %149 2 1 0
%151 = OpLoad %v3float %_2_hueLumColor
%152 = OpVectorShuffle %v3float %151 %151 2 2 2
%153 = OpFSub %v3float %150 %152
OpStore %_2_hueLumColor %153
%154 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %154 %float_1
%155 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %155 %float_1
OpBranch %141
%141 = OpLabel
OpBranch %126
%126 = OpLabel
OpBranch %77
%77 = OpLabel
%156 = OpLoad %v3float %_2_hueLumColor
%157 = OpCompositeExtract %float %156 2
%158 = OpFOrdGreaterThan %bool %157 %float_0
OpSelectionMerge %160 None
OpBranchConditional %158 %159 %160
%159 = OpLabel
%161 = OpLoad %v3float %_3_midPt
%162 = OpLoad %v3float %_2_hueLumColor
%163 = OpCompositeExtract %float %162 1
%164 = OpLoad %v3float %_2_hueLumColor
%165 = OpCompositeExtract %float %164 2
%166 = OpFDiv %float %163 %165
%167 = OpVectorTimesScalar %v3float %161 %166
OpStore %_3_midPt %167
%168 = OpLoad %v3float %_3_midPt
%169 = OpLoad %v3float %_4_satPt
%170 = OpFAdd %v3float %168 %169
%173 = OpLoad %v3float %r
%174 = OpCompositeExtract %float %173 0
%175 = OpLoad %v3float %r
%176 = OpCompositeExtract %float %175 1
%172 = OpExtInst %float %1 FMax %174 %176
%177 = OpLoad %v3float %r
%178 = OpCompositeExtract %float %177 2
%171 = OpExtInst %float %1 FMax %172 %178
%181 = OpLoad %v3float %r
%182 = OpCompositeExtract %float %181 0
%183 = OpLoad %v3float %r
%184 = OpCompositeExtract %float %183 1
%180 = OpExtInst %float %1 FMin %182 %184
%185 = OpLoad %v3float %r
%186 = OpCompositeExtract %float %185 2
%179 = OpExtInst %float %1 FMin %180 %186
%187 = OpFSub %float %171 %179
%188 = OpVectorTimesScalar %v3float %170 %187
OpStore %_2_hueLumColor %188
OpBranch %160
%160 = OpLabel
%189 = OpLoad %v3float %_2_hueLumColor
OpStore %l %189
%190 = OpLoad %v3float %dsa
OpStore %r %190
OpBranch %63
%63 = OpLabel
%197 = OpLoad %v3float %r
%192 = OpDot %float %196 %197
OpStore %_5_lum %192
%199 = OpLoad %float %_5_lum
%201 = OpLoad %v3float %l
%200 = OpDot %float %196 %201
%202 = OpFSub %float %199 %200
%203 = OpLoad %v3float %l
%204 = OpCompositeConstruct %v3float %202 %202 %202
%205 = OpFAdd %v3float %204 %203
OpStore %_6_result %205
%209 = OpLoad %v3float %_6_result
%210 = OpCompositeExtract %float %209 0
%211 = OpLoad %v3float %_6_result
%212 = OpCompositeExtract %float %211 1
%208 = OpExtInst %float %1 FMin %210 %212
%213 = OpLoad %v3float %_6_result
%214 = OpCompositeExtract %float %213 2
%207 = OpExtInst %float %1 FMin %208 %214
OpStore %_7_minComp %207
%218 = OpLoad %v3float %_6_result
%219 = OpCompositeExtract %float %218 0
%220 = OpLoad %v3float %_6_result
%221 = OpCompositeExtract %float %220 1
%217 = OpExtInst %float %1 FMax %219 %221
%222 = OpLoad %v3float %_6_result
%223 = OpCompositeExtract %float %222 2
%216 = OpExtInst %float %1 FMax %217 %223
OpStore %_8_maxComp %216
%225 = OpLoad %float %_7_minComp
%226 = OpFOrdLessThan %bool %225 %float_0
OpSelectionMerge %228 None
OpBranchConditional %226 %227 %228
%227 = OpLabel
%229 = OpLoad %float %_5_lum
%230 = OpLoad %float %_7_minComp
%231 = OpFUnordNotEqual %bool %229 %230
OpBranch %228
%228 = OpLabel
%232 = OpPhi %bool %false %63 %231 %227
OpSelectionMerge %234 None
OpBranchConditional %232 %233 %234
%233 = OpLabel
%235 = OpLoad %float %_5_lum
%236 = OpLoad %v3float %_6_result
%237 = OpLoad %float %_5_lum
%238 = OpCompositeConstruct %v3float %237 %237 %237
%239 = OpFSub %v3float %236 %238
%240 = OpLoad %float %_5_lum
%241 = OpLoad %float %_5_lum
%242 = OpLoad %float %_7_minComp
%243 = OpFSub %float %241 %242
%244 = OpFDiv %float %240 %243
%245 = OpVectorTimesScalar %v3float %239 %244
%246 = OpCompositeConstruct %v3float %235 %235 %235
%247 = OpFAdd %v3float %246 %245
OpStore %_6_result %247
OpBranch %234
%234 = OpLabel
%248 = OpLoad %float %_8_maxComp
%249 = OpLoad %float %alpha
%250 = OpFOrdGreaterThan %bool %248 %249
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %float %_8_maxComp
%254 = OpLoad %float %_5_lum
%255 = OpFUnordNotEqual %bool %253 %254
OpBranch %252
%252 = OpLabel
%256 = OpPhi %bool %false %234 %255 %251
OpSelectionMerge %258 None
OpBranchConditional %256 %257 %258
%257 = OpLabel
%259 = OpLoad %float %_5_lum
%260 = OpLoad %v3float %_6_result
%261 = OpLoad %float %_5_lum
%262 = OpCompositeConstruct %v3float %261 %261 %261
%263 = OpFSub %v3float %260 %262
%264 = OpLoad %float %alpha
%265 = OpLoad %float %_5_lum
%266 = OpFSub %float %264 %265
%267 = OpVectorTimesScalar %v3float %263 %266
%268 = OpLoad %float %_8_maxComp
%269 = OpLoad %float %_5_lum
%270 = OpFSub %float %268 %269
%271 = OpFDiv %float %float_1 %270
%272 = OpVectorTimesScalar %v3float %267 %271
%273 = OpCompositeConstruct %v3float %259 %259 %259
%274 = OpFAdd %v3float %273 %272
OpStore %_6_result %274
OpBranch %258
%258 = OpLabel
%275 = OpLoad %v3float %_6_result
%276 = OpLoad %v4float %18
%277 = OpVectorShuffle %v3float %276 %276 0 1 2
%278 = OpFAdd %v3float %275 %277
%279 = OpLoad %v3float %dsa
%280 = OpFSub %v3float %278 %279
%281 = OpLoad %v4float %17
%282 = OpVectorShuffle %v3float %281 %281 0 1 2
%283 = OpFAdd %v3float %280 %282
%284 = OpLoad %v3float %sda
%285 = OpFSub %v3float %283 %284
%286 = OpCompositeExtract %float %285 0
%287 = OpCompositeExtract %float %285 1
%288 = OpCompositeExtract %float %285 2
%289 = OpLoad %v4float %17
%290 = OpCompositeExtract %float %289 3
%291 = OpLoad %v4float %18
%292 = OpCompositeExtract %float %291 3
%293 = OpFAdd %float %290 %292
%294 = OpLoad %float %alpha
%295 = OpFSub %float %293 %294
%296 = OpCompositeConstruct %v4float %286 %287 %288 %295
OpReturnValue %296
%134 = OpLoad %v3float %r
%129 = OpDot %float %133 %134
OpStore %_4_lum %129
%136 = OpLoad %float %_4_lum
%138 = OpLoad %v3float %l
%137 = OpDot %float %133 %138
%139 = OpFSub %float %136 %137
%140 = OpLoad %v3float %l
%141 = OpCompositeConstruct %v3float %139 %139 %139
%142 = OpFAdd %v3float %141 %140
OpStore %_5_result %142
%146 = OpLoad %v3float %_5_result
%147 = OpCompositeExtract %float %146 0
%148 = OpLoad %v3float %_5_result
%149 = OpCompositeExtract %float %148 1
%145 = OpExtInst %float %1 FMin %147 %149
%150 = OpLoad %v3float %_5_result
%151 = OpCompositeExtract %float %150 2
%144 = OpExtInst %float %1 FMin %145 %151
OpStore %_6_minComp %144
%155 = OpLoad %v3float %_5_result
%156 = OpCompositeExtract %float %155 0
%157 = OpLoad %v3float %_5_result
%158 = OpCompositeExtract %float %157 1
%154 = OpExtInst %float %1 FMax %156 %158
%159 = OpLoad %v3float %_5_result
%160 = OpCompositeExtract %float %159 2
%153 = OpExtInst %float %1 FMax %154 %160
OpStore %_7_maxComp %153
%162 = OpLoad %float %_6_minComp
%163 = OpFOrdLessThan %bool %162 %float_0
OpSelectionMerge %165 None
OpBranchConditional %163 %164 %165
%164 = OpLabel
%166 = OpLoad %float %_4_lum
%167 = OpLoad %float %_6_minComp
%168 = OpFUnordNotEqual %bool %166 %167
OpBranch %165
%165 = OpLabel
%169 = OpPhi %bool %false %84 %168 %164
OpSelectionMerge %171 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%172 = OpLoad %float %_4_lum
%173 = OpLoad %v3float %_5_result
%174 = OpLoad %float %_4_lum
%175 = OpCompositeConstruct %v3float %174 %174 %174
%176 = OpFSub %v3float %173 %175
%177 = OpLoad %float %_4_lum
%178 = OpLoad %float %_4_lum
%179 = OpLoad %float %_6_minComp
%180 = OpFSub %float %178 %179
%181 = OpFDiv %float %177 %180
%182 = OpVectorTimesScalar %v3float %176 %181
%183 = OpCompositeConstruct %v3float %172 %172 %172
%184 = OpFAdd %v3float %183 %182
OpStore %_5_result %184
OpBranch %171
%171 = OpLabel
%185 = OpLoad %float %_7_maxComp
%186 = OpLoad %float %alpha
%187 = OpFOrdGreaterThan %bool %185 %186
OpSelectionMerge %189 None
OpBranchConditional %187 %188 %189
%188 = OpLabel
%190 = OpLoad %float %_7_maxComp
%191 = OpLoad %float %_4_lum
%192 = OpFUnordNotEqual %bool %190 %191
OpBranch %189
%189 = OpLabel
%193 = OpPhi %bool %false %171 %192 %188
OpSelectionMerge %195 None
OpBranchConditional %193 %194 %195
%194 = OpLabel
%196 = OpLoad %float %_4_lum
%197 = OpLoad %v3float %_5_result
%198 = OpLoad %float %_4_lum
%199 = OpCompositeConstruct %v3float %198 %198 %198
%200 = OpFSub %v3float %197 %199
%201 = OpLoad %float %alpha
%202 = OpLoad %float %_4_lum
%203 = OpFSub %float %201 %202
%204 = OpVectorTimesScalar %v3float %200 %203
%205 = OpLoad %float %_7_maxComp
%206 = OpLoad %float %_4_lum
%207 = OpFSub %float %205 %206
%208 = OpFDiv %float %float_1 %207
%209 = OpVectorTimesScalar %v3float %204 %208
%210 = OpCompositeConstruct %v3float %196 %196 %196
%211 = OpFAdd %v3float %210 %209
OpStore %_5_result %211
OpBranch %195
%195 = OpLabel
%212 = OpLoad %v3float %_5_result
%213 = OpLoad %v4float %41
%214 = OpVectorShuffle %v3float %213 %213 0 1 2
%215 = OpFAdd %v3float %212 %214
%216 = OpLoad %v3float %dsa
%217 = OpFSub %v3float %215 %216
%218 = OpLoad %v4float %40
%219 = OpVectorShuffle %v3float %218 %218 0 1 2
%220 = OpFAdd %v3float %217 %219
%221 = OpLoad %v3float %sda
%222 = OpFSub %v3float %220 %221
%223 = OpCompositeExtract %float %222 0
%224 = OpCompositeExtract %float %222 1
%225 = OpCompositeExtract %float %222 2
%226 = OpLoad %v4float %40
%227 = OpCompositeExtract %float %226 3
%228 = OpLoad %v4float %41
%229 = OpCompositeExtract %float %228 3
%230 = OpFAdd %float %227 %229
%231 = OpLoad %float %alpha
%232 = OpFSub %float %230 %231
%233 = OpCompositeConstruct %v4float %223 %224 %225 %232
OpReturnValue %233
OpFunctionEnd
%main = OpFunction %void None %298
%299 = OpLabel
%303 = OpVariable %_ptr_Function_v4float Function
%306 = OpVariable %_ptr_Function_v4float Function
%307 = OpVariable %_ptr_Function_bool Function
%309 = OpVariable %_ptr_Function_bool Function
%300 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%302 = OpLoad %v4float %300
OpStore %303 %302
%304 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%305 = OpLoad %v4float %304
OpStore %306 %305
OpStore %307 %false
OpStore %309 %true
%310 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %303 %306 %307 %309
OpStore %sk_FragColor %310
%main = OpFunction %void None %235
%236 = OpLabel
%242 = OpVariable %_ptr_Function_v4float Function
%246 = OpVariable %_ptr_Function_v4float Function
%247 = OpVariable %_ptr_Function_bool Function
%249 = OpVariable %_ptr_Function_bool Function
%237 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%241 = OpLoad %v4float %237
OpStore %242 %241
%243 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%245 = OpLoad %v4float %243
OpStore %246 %245
OpStore %247 %false
OpStore %249 %true
%250 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %242 %246 %247 %249
OpStore %sk_FragColor %250
OpReturn
OpFunctionEnd

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, false, true);

View File

@ -10,6 +10,9 @@ struct Inputs {
struct Outputs {
half4 sk_FragColor [[color(0)]];
};
half blend_color_saturation_Qhh3(half3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half alpha = dst.w * src.w;
half3 sda = src.xyz * dst.w;
@ -17,48 +20,22 @@ half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half3 l = flip ? dsa : sda;
half3 r = flip ? sda : dsa;
if (saturate) {
half3 _2_hueLumColor = l;
half3 _3_midPt = half3(0.0h);
half3 _4_satPt = half3(0.0h);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0h);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0h);
}
if (_2_hueLumColor.z > 0.0h) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
half _2_mn = min(min(l.x, l.y), l.z);
half _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : half3(0.0h);
r = dsa;
}
half _5_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _6_result = (_5_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
half _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0h && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
half _4_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _5_result = (_4_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
half _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0h && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return half4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return half4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, false, true);

View File

@ -8,19 +8,19 @@ OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "src"
OpMemberName %_UniformBuffer 1 "dst"
OpName %blend_color_saturation_Qhh3 "blend_color_saturation_Qhh3"
OpName %blend_hslc_h4h4h4bb "blend_hslc_h4h4h4bb"
OpName %alpha "alpha"
OpName %sda "sda"
OpName %dsa "dsa"
OpName %l "l"
OpName %r "r"
OpName %_2_hueLumColor "_2_hueLumColor"
OpName %_3_midPt "_3_midPt"
OpName %_4_satPt "_4_satPt"
OpName %_5_lum "_5_lum"
OpName %_6_result "_6_result"
OpName %_7_minComp "_7_minComp"
OpName %_8_maxComp "_8_maxComp"
OpName %_2_mn "_2_mn"
OpName %_3_mx "_3_mx"
OpName %_4_lum "_4_lum"
OpName %_5_result "_5_result"
OpName %_6_minComp "_6_minComp"
OpName %_7_maxComp "_7_maxComp"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -31,124 +31,129 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %alpha RelaxedPrecision
OpDecorate %12 Binding 0
OpDecorate %12 DescriptorSet 0
OpDecorate %22 RelaxedPrecision
OpDecorate %23 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %26 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %alpha RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %_2_hueLumColor RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %_3_midPt RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %_4_satPt RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %_2_mn RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %_3_mx RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %_4_lum RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %_5_result RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %_6_minComp RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %147 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %_7_maxComp RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %170 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %178 RelaxedPrecision
OpDecorate %179 RelaxedPrecision
OpDecorate %180 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %_5_lum RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %_6_result RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %201 RelaxedPrecision
@ -156,80 +161,36 @@ OpDecorate %202 RelaxedPrecision
OpDecorate %203 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %205 RelaxedPrecision
OpDecorate %_7_minComp RelaxedPrecision
OpDecorate %206 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %213 RelaxedPrecision
OpDecorate %214 RelaxedPrecision
OpDecorate %_8_maxComp RelaxedPrecision
OpDecorate %215 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %220 RelaxedPrecision
OpDecorate %221 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %230 RelaxedPrecision
OpDecorate %235 RelaxedPrecision
OpDecorate %236 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %242 RelaxedPrecision
OpDecorate %243 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %260 RelaxedPrecision
OpDecorate %261 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %268 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %287 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %293 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %302 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -239,398 +200,303 @@ OpDecorate %305 RelaxedPrecision
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%14 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%12 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_0 = OpConstant %float 0
%68 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%16 = OpTypeFunction %float %_ptr_Function_v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%37 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%float_0 = OpConstant %float 0
%125 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%float_0_300000012 = OpConstant %float 0.300000012
%float_0_589999974 = OpConstant %float 0.589999974
%float_0_109999999 = OpConstant %float 0.109999999
%196 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%133 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%false = OpConstantFalse %bool
%void = OpTypeVoid
%298 = OpTypeFunction %void
%235 = OpTypeFunction %void
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%true = OpConstantTrue %bool
%blend_hslc_h4h4h4bb = OpFunction %v4float None %14
%17 = OpFunctionParameter %_ptr_Function_v4float
%18 = OpFunctionParameter %_ptr_Function_v4float
%19 = OpFunctionParameter %_ptr_Function_bool
%20 = OpFunctionParameter %_ptr_Function_bool
%21 = OpLabel
%blend_color_saturation_Qhh3 = OpFunction %float None %16
%18 = OpFunctionParameter %_ptr_Function_v3float
%19 = OpLabel
%22 = OpLoad %v3float %18
%23 = OpCompositeExtract %float %22 0
%24 = OpLoad %v3float %18
%25 = OpCompositeExtract %float %24 1
%21 = OpExtInst %float %1 FMax %23 %25
%26 = OpLoad %v3float %18
%27 = OpCompositeExtract %float %26 2
%20 = OpExtInst %float %1 FMax %21 %27
%30 = OpLoad %v3float %18
%31 = OpCompositeExtract %float %30 0
%32 = OpLoad %v3float %18
%33 = OpCompositeExtract %float %32 1
%29 = OpExtInst %float %1 FMin %31 %33
%34 = OpLoad %v3float %18
%35 = OpCompositeExtract %float %34 2
%28 = OpExtInst %float %1 FMin %29 %35
%36 = OpFSub %float %20 %28
OpReturnValue %36
OpFunctionEnd
%blend_hslc_h4h4h4bb = OpFunction %v4float None %37
%40 = OpFunctionParameter %_ptr_Function_v4float
%41 = OpFunctionParameter %_ptr_Function_v4float
%42 = OpFunctionParameter %_ptr_Function_bool
%43 = OpFunctionParameter %_ptr_Function_bool
%44 = OpLabel
%alpha = OpVariable %_ptr_Function_float Function
%sda = OpVariable %_ptr_Function_v3float Function
%dsa = OpVariable %_ptr_Function_v3float Function
%l = OpVariable %_ptr_Function_v3float Function
%45 = OpVariable %_ptr_Function_v3float Function
%66 = OpVariable %_ptr_Function_v3float Function
%r = OpVariable %_ptr_Function_v3float Function
%54 = OpVariable %_ptr_Function_v3float Function
%_2_hueLumColor = OpVariable %_ptr_Function_v3float Function
%_3_midPt = OpVariable %_ptr_Function_v3float Function
%_4_satPt = OpVariable %_ptr_Function_v3float Function
%_5_lum = OpVariable %_ptr_Function_float Function
%_6_result = OpVariable %_ptr_Function_v3float Function
%_7_minComp = OpVariable %_ptr_Function_float Function
%_8_maxComp = OpVariable %_ptr_Function_float Function
%24 = OpLoad %v4float %18
%25 = OpCompositeExtract %float %24 3
%26 = OpLoad %v4float %17
%27 = OpCompositeExtract %float %26 3
%28 = OpFMul %float %25 %27
OpStore %alpha %28
%32 = OpLoad %v4float %17
%33 = OpVectorShuffle %v3float %32 %32 0 1 2
%34 = OpLoad %v4float %18
%35 = OpCompositeExtract %float %34 3
%36 = OpVectorTimesScalar %v3float %33 %35
OpStore %sda %36
%38 = OpLoad %v4float %18
%39 = OpVectorShuffle %v3float %38 %38 0 1 2
%40 = OpLoad %v4float %17
%41 = OpCompositeExtract %float %40 3
%42 = OpVectorTimesScalar %v3float %39 %41
OpStore %dsa %42
%44 = OpLoad %bool %19
OpSelectionMerge %48 None
OpBranchConditional %44 %46 %47
%46 = OpLabel
%49 = OpLoad %v3float %dsa
OpStore %45 %49
OpBranch %48
%47 = OpLabel
%50 = OpLoad %v3float %sda
OpStore %45 %50
OpBranch %48
%48 = OpLabel
%51 = OpLoad %v3float %45
OpStore %l %51
%53 = OpLoad %bool %19
OpSelectionMerge %57 None
OpBranchConditional %53 %55 %56
%55 = OpLabel
%58 = OpLoad %v3float %sda
OpStore %54 %58
OpBranch %57
%56 = OpLabel
%59 = OpLoad %v3float %dsa
OpStore %54 %59
OpBranch %57
%57 = OpLabel
%60 = OpLoad %v3float %54
OpStore %r %60
%61 = OpLoad %bool %20
OpSelectionMerge %63 None
OpBranchConditional %61 %62 %63
%62 = OpLabel
%65 = OpLoad %v3float %l
OpStore %_2_hueLumColor %65
OpStore %_3_midPt %68
OpStore %_4_satPt %68
%70 = OpLoad %v3float %_2_hueLumColor
%71 = OpCompositeExtract %float %70 0
%72 = OpLoad %v3float %_2_hueLumColor
%73 = OpCompositeExtract %float %72 1
%74 = OpFOrdLessThanEqual %bool %71 %73
OpSelectionMerge %77 None
OpBranchConditional %74 %75 %76
%75 = OpLabel
%78 = OpLoad %v3float %_2_hueLumColor
%79 = OpCompositeExtract %float %78 1
%80 = OpLoad %v3float %_2_hueLumColor
%81 = OpCompositeExtract %float %80 2
%82 = OpFOrdLessThanEqual %bool %79 %81
OpSelectionMerge %85 None
%75 = OpVariable %_ptr_Function_v3float Function
%_2_mn = OpVariable %_ptr_Function_float Function
%_3_mx = OpVariable %_ptr_Function_float Function
%106 = OpVariable %_ptr_Function_v3float Function
%115 = OpVariable %_ptr_Function_v3float Function
%_4_lum = OpVariable %_ptr_Function_float Function
%_5_result = OpVariable %_ptr_Function_v3float Function
%_6_minComp = OpVariable %_ptr_Function_float Function
%_7_maxComp = OpVariable %_ptr_Function_float Function
%47 = OpLoad %v4float %41
%48 = OpCompositeExtract %float %47 3
%49 = OpLoad %v4float %40
%50 = OpCompositeExtract %float %49 3
%51 = OpFMul %float %48 %50
OpStore %alpha %51
%53 = OpLoad %v4float %40
%54 = OpVectorShuffle %v3float %53 %53 0 1 2
%55 = OpLoad %v4float %41
%56 = OpCompositeExtract %float %55 3
%57 = OpVectorTimesScalar %v3float %54 %56
OpStore %sda %57
%59 = OpLoad %v4float %41
%60 = OpVectorShuffle %v3float %59 %59 0 1 2
%61 = OpLoad %v4float %40
%62 = OpCompositeExtract %float %61 3
%63 = OpVectorTimesScalar %v3float %60 %62
OpStore %dsa %63
%65 = OpLoad %bool %42
OpSelectionMerge %69 None
OpBranchConditional %65 %67 %68
%67 = OpLabel
%70 = OpLoad %v3float %dsa
OpStore %66 %70
OpBranch %69
%68 = OpLabel
%71 = OpLoad %v3float %sda
OpStore %66 %71
OpBranch %69
%69 = OpLabel
%72 = OpLoad %v3float %66
OpStore %l %72
%74 = OpLoad %bool %42
OpSelectionMerge %78 None
OpBranchConditional %74 %76 %77
%76 = OpLabel
%79 = OpLoad %v3float %sda
OpStore %75 %79
OpBranch %78
%77 = OpLabel
%80 = OpLoad %v3float %dsa
OpStore %75 %80
OpBranch %78
%78 = OpLabel
%81 = OpLoad %v3float %75
OpStore %r %81
%82 = OpLoad %bool %43
OpSelectionMerge %84 None
OpBranchConditional %82 %83 %84
%83 = OpLabel
%86 = OpLoad %v3float %_2_hueLumColor
%87 = OpLoad %v3float %_2_hueLumColor
%88 = OpVectorShuffle %v3float %87 %87 0 0 0
%89 = OpFSub %v3float %86 %88
OpStore %_2_hueLumColor %89
%91 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %91 %float_1
%94 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %94 %float_1
OpBranch %85
%88 = OpLoad %v3float %l
%89 = OpCompositeExtract %float %88 0
%90 = OpLoad %v3float %l
%91 = OpCompositeExtract %float %90 1
%87 = OpExtInst %float %1 FMin %89 %91
%92 = OpLoad %v3float %l
%93 = OpCompositeExtract %float %92 2
%86 = OpExtInst %float %1 FMin %87 %93
OpStore %_2_mn %86
%97 = OpLoad %v3float %l
%98 = OpCompositeExtract %float %97 0
%99 = OpLoad %v3float %l
%100 = OpCompositeExtract %float %99 1
%96 = OpExtInst %float %1 FMax %98 %100
%101 = OpLoad %v3float %l
%102 = OpCompositeExtract %float %101 2
%95 = OpExtInst %float %1 FMax %96 %102
OpStore %_3_mx %95
%103 = OpLoad %float %_3_mx
%104 = OpLoad %float %_2_mn
%105 = OpFOrdGreaterThan %bool %103 %104
OpSelectionMerge %109 None
OpBranchConditional %105 %107 %108
%107 = OpLabel
%110 = OpLoad %v3float %l
%111 = OpLoad %float %_2_mn
%112 = OpCompositeConstruct %v3float %111 %111 %111
%113 = OpFSub %v3float %110 %112
%114 = OpLoad %v3float %r
OpStore %115 %114
%116 = OpFunctionCall %float %blend_color_saturation_Qhh3 %115
%117 = OpVectorTimesScalar %v3float %113 %116
%118 = OpLoad %float %_3_mx
%119 = OpLoad %float %_2_mn
%120 = OpFSub %float %118 %119
%122 = OpFDiv %float %float_1 %120
%123 = OpVectorTimesScalar %v3float %117 %122
OpStore %106 %123
OpBranch %109
%108 = OpLabel
OpStore %106 %125
OpBranch %109
%109 = OpLabel
%126 = OpLoad %v3float %106
OpStore %l %126
%127 = OpLoad %v3float %dsa
OpStore %r %127
OpBranch %84
%84 = OpLabel
%96 = OpLoad %v3float %_2_hueLumColor
%97 = OpCompositeExtract %float %96 0
%98 = OpLoad %v3float %_2_hueLumColor
%99 = OpCompositeExtract %float %98 2
%100 = OpFOrdLessThanEqual %bool %97 %99
OpSelectionMerge %103 None
OpBranchConditional %100 %101 %102
%101 = OpLabel
%104 = OpLoad %v3float %_2_hueLumColor
%105 = OpVectorShuffle %v3float %104 %104 0 2 1
%106 = OpLoad %v3float %_2_hueLumColor
%107 = OpVectorShuffle %v3float %106 %106 0 0 0
%108 = OpFSub %v3float %105 %107
OpStore %_2_hueLumColor %108
%109 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %109 %float_1
%110 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %110 %float_1
OpBranch %103
%102 = OpLabel
%111 = OpLoad %v3float %_2_hueLumColor
%112 = OpVectorShuffle %v3float %111 %111 2 0 1
%113 = OpLoad %v3float %_2_hueLumColor
%114 = OpVectorShuffle %v3float %113 %113 2 2 2
%115 = OpFSub %v3float %112 %114
OpStore %_2_hueLumColor %115
%116 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %116 %float_1
%117 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %117 %float_1
OpBranch %103
%103 = OpLabel
OpBranch %85
%85 = OpLabel
OpBranch %77
%76 = OpLabel
%119 = OpLoad %v3float %_2_hueLumColor
%120 = OpCompositeExtract %float %119 0
%121 = OpLoad %v3float %_2_hueLumColor
%122 = OpCompositeExtract %float %121 2
%123 = OpFOrdLessThanEqual %bool %120 %122
OpSelectionMerge %126 None
OpBranchConditional %123 %124 %125
%124 = OpLabel
%127 = OpLoad %v3float %_2_hueLumColor
%128 = OpVectorShuffle %v3float %127 %127 1 0 2
%129 = OpLoad %v3float %_2_hueLumColor
%130 = OpVectorShuffle %v3float %129 %129 1 1 1
%131 = OpFSub %v3float %128 %130
OpStore %_2_hueLumColor %131
%132 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %132 %float_1
%133 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %133 %float_1
OpBranch %126
%125 = OpLabel
%134 = OpLoad %v3float %_2_hueLumColor
%135 = OpCompositeExtract %float %134 1
%136 = OpLoad %v3float %_2_hueLumColor
%137 = OpCompositeExtract %float %136 2
%138 = OpFOrdLessThanEqual %bool %135 %137
OpSelectionMerge %141 None
OpBranchConditional %138 %139 %140
%139 = OpLabel
%142 = OpLoad %v3float %_2_hueLumColor
%143 = OpVectorShuffle %v3float %142 %142 1 2 0
%144 = OpLoad %v3float %_2_hueLumColor
%145 = OpVectorShuffle %v3float %144 %144 1 1 1
%146 = OpFSub %v3float %143 %145
OpStore %_2_hueLumColor %146
%147 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %147 %float_1
%148 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %148 %float_1
OpBranch %141
%140 = OpLabel
%149 = OpLoad %v3float %_2_hueLumColor
%150 = OpVectorShuffle %v3float %149 %149 2 1 0
%151 = OpLoad %v3float %_2_hueLumColor
%152 = OpVectorShuffle %v3float %151 %151 2 2 2
%153 = OpFSub %v3float %150 %152
OpStore %_2_hueLumColor %153
%154 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %154 %float_1
%155 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %155 %float_1
OpBranch %141
%141 = OpLabel
OpBranch %126
%126 = OpLabel
OpBranch %77
%77 = OpLabel
%156 = OpLoad %v3float %_2_hueLumColor
%157 = OpCompositeExtract %float %156 2
%158 = OpFOrdGreaterThan %bool %157 %float_0
OpSelectionMerge %160 None
OpBranchConditional %158 %159 %160
%159 = OpLabel
%161 = OpLoad %v3float %_3_midPt
%162 = OpLoad %v3float %_2_hueLumColor
%163 = OpCompositeExtract %float %162 1
%164 = OpLoad %v3float %_2_hueLumColor
%165 = OpCompositeExtract %float %164 2
%166 = OpFDiv %float %163 %165
%167 = OpVectorTimesScalar %v3float %161 %166
OpStore %_3_midPt %167
%168 = OpLoad %v3float %_3_midPt
%169 = OpLoad %v3float %_4_satPt
%170 = OpFAdd %v3float %168 %169
%173 = OpLoad %v3float %r
%174 = OpCompositeExtract %float %173 0
%175 = OpLoad %v3float %r
%176 = OpCompositeExtract %float %175 1
%172 = OpExtInst %float %1 FMax %174 %176
%177 = OpLoad %v3float %r
%178 = OpCompositeExtract %float %177 2
%171 = OpExtInst %float %1 FMax %172 %178
%181 = OpLoad %v3float %r
%182 = OpCompositeExtract %float %181 0
%183 = OpLoad %v3float %r
%184 = OpCompositeExtract %float %183 1
%180 = OpExtInst %float %1 FMin %182 %184
%185 = OpLoad %v3float %r
%186 = OpCompositeExtract %float %185 2
%179 = OpExtInst %float %1 FMin %180 %186
%187 = OpFSub %float %171 %179
%188 = OpVectorTimesScalar %v3float %170 %187
OpStore %_2_hueLumColor %188
OpBranch %160
%160 = OpLabel
%189 = OpLoad %v3float %_2_hueLumColor
OpStore %l %189
%190 = OpLoad %v3float %dsa
OpStore %r %190
OpBranch %63
%63 = OpLabel
%197 = OpLoad %v3float %r
%192 = OpDot %float %196 %197
OpStore %_5_lum %192
%199 = OpLoad %float %_5_lum
%201 = OpLoad %v3float %l
%200 = OpDot %float %196 %201
%202 = OpFSub %float %199 %200
%203 = OpLoad %v3float %l
%204 = OpCompositeConstruct %v3float %202 %202 %202
%205 = OpFAdd %v3float %204 %203
OpStore %_6_result %205
%209 = OpLoad %v3float %_6_result
%210 = OpCompositeExtract %float %209 0
%211 = OpLoad %v3float %_6_result
%212 = OpCompositeExtract %float %211 1
%208 = OpExtInst %float %1 FMin %210 %212
%213 = OpLoad %v3float %_6_result
%214 = OpCompositeExtract %float %213 2
%207 = OpExtInst %float %1 FMin %208 %214
OpStore %_7_minComp %207
%218 = OpLoad %v3float %_6_result
%219 = OpCompositeExtract %float %218 0
%220 = OpLoad %v3float %_6_result
%221 = OpCompositeExtract %float %220 1
%217 = OpExtInst %float %1 FMax %219 %221
%222 = OpLoad %v3float %_6_result
%223 = OpCompositeExtract %float %222 2
%216 = OpExtInst %float %1 FMax %217 %223
OpStore %_8_maxComp %216
%225 = OpLoad %float %_7_minComp
%226 = OpFOrdLessThan %bool %225 %float_0
OpSelectionMerge %228 None
OpBranchConditional %226 %227 %228
%227 = OpLabel
%229 = OpLoad %float %_5_lum
%230 = OpLoad %float %_7_minComp
%231 = OpFUnordNotEqual %bool %229 %230
OpBranch %228
%228 = OpLabel
%232 = OpPhi %bool %false %63 %231 %227
OpSelectionMerge %234 None
OpBranchConditional %232 %233 %234
%233 = OpLabel
%235 = OpLoad %float %_5_lum
%236 = OpLoad %v3float %_6_result
%237 = OpLoad %float %_5_lum
%238 = OpCompositeConstruct %v3float %237 %237 %237
%239 = OpFSub %v3float %236 %238
%240 = OpLoad %float %_5_lum
%241 = OpLoad %float %_5_lum
%242 = OpLoad %float %_7_minComp
%243 = OpFSub %float %241 %242
%244 = OpFDiv %float %240 %243
%245 = OpVectorTimesScalar %v3float %239 %244
%246 = OpCompositeConstruct %v3float %235 %235 %235
%247 = OpFAdd %v3float %246 %245
OpStore %_6_result %247
OpBranch %234
%234 = OpLabel
%248 = OpLoad %float %_8_maxComp
%249 = OpLoad %float %alpha
%250 = OpFOrdGreaterThan %bool %248 %249
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %float %_8_maxComp
%254 = OpLoad %float %_5_lum
%255 = OpFUnordNotEqual %bool %253 %254
OpBranch %252
%252 = OpLabel
%256 = OpPhi %bool %false %234 %255 %251
OpSelectionMerge %258 None
OpBranchConditional %256 %257 %258
%257 = OpLabel
%259 = OpLoad %float %_5_lum
%260 = OpLoad %v3float %_6_result
%261 = OpLoad %float %_5_lum
%262 = OpCompositeConstruct %v3float %261 %261 %261
%263 = OpFSub %v3float %260 %262
%264 = OpLoad %float %alpha
%265 = OpLoad %float %_5_lum
%266 = OpFSub %float %264 %265
%267 = OpVectorTimesScalar %v3float %263 %266
%268 = OpLoad %float %_8_maxComp
%269 = OpLoad %float %_5_lum
%270 = OpFSub %float %268 %269
%271 = OpFDiv %float %float_1 %270
%272 = OpVectorTimesScalar %v3float %267 %271
%273 = OpCompositeConstruct %v3float %259 %259 %259
%274 = OpFAdd %v3float %273 %272
OpStore %_6_result %274
OpBranch %258
%258 = OpLabel
%275 = OpLoad %v3float %_6_result
%276 = OpLoad %v4float %18
%277 = OpVectorShuffle %v3float %276 %276 0 1 2
%278 = OpFAdd %v3float %275 %277
%279 = OpLoad %v3float %dsa
%280 = OpFSub %v3float %278 %279
%281 = OpLoad %v4float %17
%282 = OpVectorShuffle %v3float %281 %281 0 1 2
%283 = OpFAdd %v3float %280 %282
%284 = OpLoad %v3float %sda
%285 = OpFSub %v3float %283 %284
%286 = OpCompositeExtract %float %285 0
%287 = OpCompositeExtract %float %285 1
%288 = OpCompositeExtract %float %285 2
%289 = OpLoad %v4float %17
%290 = OpCompositeExtract %float %289 3
%291 = OpLoad %v4float %18
%292 = OpCompositeExtract %float %291 3
%293 = OpFAdd %float %290 %292
%294 = OpLoad %float %alpha
%295 = OpFSub %float %293 %294
%296 = OpCompositeConstruct %v4float %286 %287 %288 %295
OpReturnValue %296
%134 = OpLoad %v3float %r
%129 = OpDot %float %133 %134
OpStore %_4_lum %129
%136 = OpLoad %float %_4_lum
%138 = OpLoad %v3float %l
%137 = OpDot %float %133 %138
%139 = OpFSub %float %136 %137
%140 = OpLoad %v3float %l
%141 = OpCompositeConstruct %v3float %139 %139 %139
%142 = OpFAdd %v3float %141 %140
OpStore %_5_result %142
%146 = OpLoad %v3float %_5_result
%147 = OpCompositeExtract %float %146 0
%148 = OpLoad %v3float %_5_result
%149 = OpCompositeExtract %float %148 1
%145 = OpExtInst %float %1 FMin %147 %149
%150 = OpLoad %v3float %_5_result
%151 = OpCompositeExtract %float %150 2
%144 = OpExtInst %float %1 FMin %145 %151
OpStore %_6_minComp %144
%155 = OpLoad %v3float %_5_result
%156 = OpCompositeExtract %float %155 0
%157 = OpLoad %v3float %_5_result
%158 = OpCompositeExtract %float %157 1
%154 = OpExtInst %float %1 FMax %156 %158
%159 = OpLoad %v3float %_5_result
%160 = OpCompositeExtract %float %159 2
%153 = OpExtInst %float %1 FMax %154 %160
OpStore %_7_maxComp %153
%162 = OpLoad %float %_6_minComp
%163 = OpFOrdLessThan %bool %162 %float_0
OpSelectionMerge %165 None
OpBranchConditional %163 %164 %165
%164 = OpLabel
%166 = OpLoad %float %_4_lum
%167 = OpLoad %float %_6_minComp
%168 = OpFUnordNotEqual %bool %166 %167
OpBranch %165
%165 = OpLabel
%169 = OpPhi %bool %false %84 %168 %164
OpSelectionMerge %171 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%172 = OpLoad %float %_4_lum
%173 = OpLoad %v3float %_5_result
%174 = OpLoad %float %_4_lum
%175 = OpCompositeConstruct %v3float %174 %174 %174
%176 = OpFSub %v3float %173 %175
%177 = OpLoad %float %_4_lum
%178 = OpLoad %float %_4_lum
%179 = OpLoad %float %_6_minComp
%180 = OpFSub %float %178 %179
%181 = OpFDiv %float %177 %180
%182 = OpVectorTimesScalar %v3float %176 %181
%183 = OpCompositeConstruct %v3float %172 %172 %172
%184 = OpFAdd %v3float %183 %182
OpStore %_5_result %184
OpBranch %171
%171 = OpLabel
%185 = OpLoad %float %_7_maxComp
%186 = OpLoad %float %alpha
%187 = OpFOrdGreaterThan %bool %185 %186
OpSelectionMerge %189 None
OpBranchConditional %187 %188 %189
%188 = OpLabel
%190 = OpLoad %float %_7_maxComp
%191 = OpLoad %float %_4_lum
%192 = OpFUnordNotEqual %bool %190 %191
OpBranch %189
%189 = OpLabel
%193 = OpPhi %bool %false %171 %192 %188
OpSelectionMerge %195 None
OpBranchConditional %193 %194 %195
%194 = OpLabel
%196 = OpLoad %float %_4_lum
%197 = OpLoad %v3float %_5_result
%198 = OpLoad %float %_4_lum
%199 = OpCompositeConstruct %v3float %198 %198 %198
%200 = OpFSub %v3float %197 %199
%201 = OpLoad %float %alpha
%202 = OpLoad %float %_4_lum
%203 = OpFSub %float %201 %202
%204 = OpVectorTimesScalar %v3float %200 %203
%205 = OpLoad %float %_7_maxComp
%206 = OpLoad %float %_4_lum
%207 = OpFSub %float %205 %206
%208 = OpFDiv %float %float_1 %207
%209 = OpVectorTimesScalar %v3float %204 %208
%210 = OpCompositeConstruct %v3float %196 %196 %196
%211 = OpFAdd %v3float %210 %209
OpStore %_5_result %211
OpBranch %195
%195 = OpLabel
%212 = OpLoad %v3float %_5_result
%213 = OpLoad %v4float %41
%214 = OpVectorShuffle %v3float %213 %213 0 1 2
%215 = OpFAdd %v3float %212 %214
%216 = OpLoad %v3float %dsa
%217 = OpFSub %v3float %215 %216
%218 = OpLoad %v4float %40
%219 = OpVectorShuffle %v3float %218 %218 0 1 2
%220 = OpFAdd %v3float %217 %219
%221 = OpLoad %v3float %sda
%222 = OpFSub %v3float %220 %221
%223 = OpCompositeExtract %float %222 0
%224 = OpCompositeExtract %float %222 1
%225 = OpCompositeExtract %float %222 2
%226 = OpLoad %v4float %40
%227 = OpCompositeExtract %float %226 3
%228 = OpLoad %v4float %41
%229 = OpCompositeExtract %float %228 3
%230 = OpFAdd %float %227 %229
%231 = OpLoad %float %alpha
%232 = OpFSub %float %230 %231
%233 = OpCompositeConstruct %v4float %223 %224 %225 %232
OpReturnValue %233
OpFunctionEnd
%main = OpFunction %void None %298
%299 = OpLabel
%303 = OpVariable %_ptr_Function_v4float Function
%306 = OpVariable %_ptr_Function_v4float Function
%308 = OpVariable %_ptr_Function_bool Function
%309 = OpVariable %_ptr_Function_bool Function
%300 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%302 = OpLoad %v4float %300
OpStore %303 %302
%304 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%305 = OpLoad %v4float %304
OpStore %306 %305
OpStore %308 %true
OpStore %309 %false
%310 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %303 %306 %308 %309
OpStore %sk_FragColor %310
%main = OpFunction %void None %235
%236 = OpLabel
%242 = OpVariable %_ptr_Function_v4float Function
%246 = OpVariable %_ptr_Function_v4float Function
%248 = OpVariable %_ptr_Function_bool Function
%249 = OpVariable %_ptr_Function_bool Function
%237 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%241 = OpLoad %v4float %237
OpStore %242 %241
%243 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%245 = OpLoad %v4float %243
OpStore %246 %245
OpStore %248 %true
OpStore %249 %false
%250 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %242 %246 %248 %249
OpStore %sk_FragColor %250
OpReturn
OpFunctionEnd

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, true, false);

View File

@ -10,6 +10,9 @@ struct Inputs {
struct Outputs {
half4 sk_FragColor [[color(0)]];
};
half blend_color_saturation_Qhh3(half3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half alpha = dst.w * src.w;
half3 sda = src.xyz * dst.w;
@ -17,48 +20,22 @@ half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half3 l = flip ? dsa : sda;
half3 r = flip ? sda : dsa;
if (saturate) {
half3 _2_hueLumColor = l;
half3 _3_midPt = half3(0.0h);
half3 _4_satPt = half3(0.0h);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0h);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0h);
}
if (_2_hueLumColor.z > 0.0h) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
half _2_mn = min(min(l.x, l.y), l.z);
half _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : half3(0.0h);
r = dsa;
}
half _5_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _6_result = (_5_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
half _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0h && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
half _4_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _5_result = (_4_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
half _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0h && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return half4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return half4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, true, false);

View File

@ -8,19 +8,19 @@ OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "src"
OpMemberName %_UniformBuffer 1 "dst"
OpName %blend_color_saturation_Qhh3 "blend_color_saturation_Qhh3"
OpName %blend_hslc_h4h4h4bb "blend_hslc_h4h4h4bb"
OpName %alpha "alpha"
OpName %sda "sda"
OpName %dsa "dsa"
OpName %l "l"
OpName %r "r"
OpName %_2_hueLumColor "_2_hueLumColor"
OpName %_3_midPt "_3_midPt"
OpName %_4_satPt "_4_satPt"
OpName %_5_lum "_5_lum"
OpName %_6_result "_6_result"
OpName %_7_minComp "_7_minComp"
OpName %_8_maxComp "_8_maxComp"
OpName %_2_mn "_2_mn"
OpName %_3_mx "_3_mx"
OpName %_4_lum "_4_lum"
OpName %_5_result "_5_result"
OpName %_6_minComp "_6_minComp"
OpName %_7_maxComp "_7_maxComp"
OpName %main "main"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
@ -31,124 +31,129 @@ OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %11 Binding 0
OpDecorate %11 DescriptorSet 0
OpDecorate %alpha RelaxedPrecision
OpDecorate %12 Binding 0
OpDecorate %12 DescriptorSet 0
OpDecorate %22 RelaxedPrecision
OpDecorate %23 RelaxedPrecision
OpDecorate %24 RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %26 RelaxedPrecision
OpDecorate %27 RelaxedPrecision
OpDecorate %28 RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %31 RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %39 RelaxedPrecision
OpDecorate %40 RelaxedPrecision
OpDecorate %41 RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %alpha RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %48 RelaxedPrecision
OpDecorate %49 RelaxedPrecision
OpDecorate %50 RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %sda RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %57 RelaxedPrecision
OpDecorate %dsa RelaxedPrecision
OpDecorate %59 RelaxedPrecision
OpDecorate %60 RelaxedPrecision
OpDecorate %61 RelaxedPrecision
OpDecorate %_2_hueLumColor RelaxedPrecision
OpDecorate %62 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %l RelaxedPrecision
OpDecorate %65 RelaxedPrecision
OpDecorate %_3_midPt RelaxedPrecision
OpDecorate %68 RelaxedPrecision
OpDecorate %_4_satPt RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %r RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %86 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %_2_mn RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %89 RelaxedPrecision
OpDecorate %96 RelaxedPrecision
OpDecorate %90 RelaxedPrecision
OpDecorate %91 RelaxedPrecision
OpDecorate %92 RelaxedPrecision
OpDecorate %93 RelaxedPrecision
OpDecorate %_3_mx RelaxedPrecision
OpDecorate %97 RelaxedPrecision
OpDecorate %98 RelaxedPrecision
OpDecorate %99 RelaxedPrecision
OpDecorate %100 RelaxedPrecision
OpDecorate %101 RelaxedPrecision
OpDecorate %102 RelaxedPrecision
OpDecorate %103 RelaxedPrecision
OpDecorate %104 RelaxedPrecision
OpDecorate %105 RelaxedPrecision
OpDecorate %106 RelaxedPrecision
OpDecorate %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %112 RelaxedPrecision
OpDecorate %113 RelaxedPrecision
OpDecorate %114 RelaxedPrecision
OpDecorate %115 RelaxedPrecision
OpDecorate %117 RelaxedPrecision
OpDecorate %118 RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %126 RelaxedPrecision
OpDecorate %127 RelaxedPrecision
OpDecorate %128 RelaxedPrecision
OpDecorate %_4_lum RelaxedPrecision
OpDecorate %129 RelaxedPrecision
OpDecorate %130 RelaxedPrecision
OpDecorate %131 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %_5_result RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %143 RelaxedPrecision
OpDecorate %144 RelaxedPrecision
OpDecorate %145 RelaxedPrecision
OpDecorate %_6_minComp RelaxedPrecision
OpDecorate %146 RelaxedPrecision
OpDecorate %147 RelaxedPrecision
OpDecorate %148 RelaxedPrecision
OpDecorate %149 RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %_7_maxComp RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %156 RelaxedPrecision
OpDecorate %157 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %169 RelaxedPrecision
OpDecorate %170 RelaxedPrecision
OpDecorate %172 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %177 RelaxedPrecision
OpDecorate %178 RelaxedPrecision
OpDecorate %179 RelaxedPrecision
OpDecorate %180 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %182 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %184 RelaxedPrecision
OpDecorate %185 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %190 RelaxedPrecision
OpDecorate %_5_lum RelaxedPrecision
OpDecorate %192 RelaxedPrecision
OpDecorate %191 RelaxedPrecision
OpDecorate %196 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %_6_result RelaxedPrecision
OpDecorate %198 RelaxedPrecision
OpDecorate %199 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %201 RelaxedPrecision
@ -156,80 +161,36 @@ OpDecorate %202 RelaxedPrecision
OpDecorate %203 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %205 RelaxedPrecision
OpDecorate %_7_minComp RelaxedPrecision
OpDecorate %206 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %212 RelaxedPrecision
OpDecorate %213 RelaxedPrecision
OpDecorate %214 RelaxedPrecision
OpDecorate %_8_maxComp RelaxedPrecision
OpDecorate %215 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %218 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %220 RelaxedPrecision
OpDecorate %221 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %227 RelaxedPrecision
OpDecorate %228 RelaxedPrecision
OpDecorate %229 RelaxedPrecision
OpDecorate %230 RelaxedPrecision
OpDecorate %235 RelaxedPrecision
OpDecorate %236 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %240 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %233 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %242 RelaxedPrecision
OpDecorate %243 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %245 RelaxedPrecision
OpDecorate %246 RelaxedPrecision
OpDecorate %247 RelaxedPrecision
OpDecorate %248 RelaxedPrecision
OpDecorate %249 RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %260 RelaxedPrecision
OpDecorate %261 RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %264 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %268 RelaxedPrecision
OpDecorate %269 RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %272 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %277 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %279 RelaxedPrecision
OpDecorate %280 RelaxedPrecision
OpDecorate %281 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %283 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %285 RelaxedPrecision
OpDecorate %286 RelaxedPrecision
OpDecorate %287 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %293 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %302 RelaxedPrecision
OpDecorate %305 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@ -239,398 +200,303 @@ OpDecorate %305 RelaxedPrecision
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%11 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%14 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%12 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%float_0 = OpConstant %float 0
%68 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%16 = OpTypeFunction %float %_ptr_Function_v3float
%_ptr_Function_v4float = OpTypePointer Function %v4float
%_ptr_Function_bool = OpTypePointer Function %bool
%37 = OpTypeFunction %v4float %_ptr_Function_v4float %_ptr_Function_v4float %_ptr_Function_bool %_ptr_Function_bool
%_ptr_Function_float = OpTypePointer Function %float
%float_1 = OpConstant %float 1
%int = OpTypeInt 32 1
%int_2 = OpConstant %int 2
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%float_0 = OpConstant %float 0
%125 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%float_0_300000012 = OpConstant %float 0.300000012
%float_0_589999974 = OpConstant %float 0.589999974
%float_0_109999999 = OpConstant %float 0.109999999
%196 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%133 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%false = OpConstantFalse %bool
%void = OpTypeVoid
%298 = OpTypeFunction %void
%235 = OpTypeFunction %void
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
%int_1 = OpConstant %int 1
%true = OpConstantTrue %bool
%blend_hslc_h4h4h4bb = OpFunction %v4float None %14
%17 = OpFunctionParameter %_ptr_Function_v4float
%18 = OpFunctionParameter %_ptr_Function_v4float
%19 = OpFunctionParameter %_ptr_Function_bool
%20 = OpFunctionParameter %_ptr_Function_bool
%21 = OpLabel
%blend_color_saturation_Qhh3 = OpFunction %float None %16
%18 = OpFunctionParameter %_ptr_Function_v3float
%19 = OpLabel
%22 = OpLoad %v3float %18
%23 = OpCompositeExtract %float %22 0
%24 = OpLoad %v3float %18
%25 = OpCompositeExtract %float %24 1
%21 = OpExtInst %float %1 FMax %23 %25
%26 = OpLoad %v3float %18
%27 = OpCompositeExtract %float %26 2
%20 = OpExtInst %float %1 FMax %21 %27
%30 = OpLoad %v3float %18
%31 = OpCompositeExtract %float %30 0
%32 = OpLoad %v3float %18
%33 = OpCompositeExtract %float %32 1
%29 = OpExtInst %float %1 FMin %31 %33
%34 = OpLoad %v3float %18
%35 = OpCompositeExtract %float %34 2
%28 = OpExtInst %float %1 FMin %29 %35
%36 = OpFSub %float %20 %28
OpReturnValue %36
OpFunctionEnd
%blend_hslc_h4h4h4bb = OpFunction %v4float None %37
%40 = OpFunctionParameter %_ptr_Function_v4float
%41 = OpFunctionParameter %_ptr_Function_v4float
%42 = OpFunctionParameter %_ptr_Function_bool
%43 = OpFunctionParameter %_ptr_Function_bool
%44 = OpLabel
%alpha = OpVariable %_ptr_Function_float Function
%sda = OpVariable %_ptr_Function_v3float Function
%dsa = OpVariable %_ptr_Function_v3float Function
%l = OpVariable %_ptr_Function_v3float Function
%45 = OpVariable %_ptr_Function_v3float Function
%66 = OpVariable %_ptr_Function_v3float Function
%r = OpVariable %_ptr_Function_v3float Function
%54 = OpVariable %_ptr_Function_v3float Function
%_2_hueLumColor = OpVariable %_ptr_Function_v3float Function
%_3_midPt = OpVariable %_ptr_Function_v3float Function
%_4_satPt = OpVariable %_ptr_Function_v3float Function
%_5_lum = OpVariable %_ptr_Function_float Function
%_6_result = OpVariable %_ptr_Function_v3float Function
%_7_minComp = OpVariable %_ptr_Function_float Function
%_8_maxComp = OpVariable %_ptr_Function_float Function
%24 = OpLoad %v4float %18
%25 = OpCompositeExtract %float %24 3
%26 = OpLoad %v4float %17
%27 = OpCompositeExtract %float %26 3
%28 = OpFMul %float %25 %27
OpStore %alpha %28
%32 = OpLoad %v4float %17
%33 = OpVectorShuffle %v3float %32 %32 0 1 2
%34 = OpLoad %v4float %18
%35 = OpCompositeExtract %float %34 3
%36 = OpVectorTimesScalar %v3float %33 %35
OpStore %sda %36
%38 = OpLoad %v4float %18
%39 = OpVectorShuffle %v3float %38 %38 0 1 2
%40 = OpLoad %v4float %17
%41 = OpCompositeExtract %float %40 3
%42 = OpVectorTimesScalar %v3float %39 %41
OpStore %dsa %42
%44 = OpLoad %bool %19
OpSelectionMerge %48 None
OpBranchConditional %44 %46 %47
%46 = OpLabel
%49 = OpLoad %v3float %dsa
OpStore %45 %49
OpBranch %48
%47 = OpLabel
%50 = OpLoad %v3float %sda
OpStore %45 %50
OpBranch %48
%48 = OpLabel
%51 = OpLoad %v3float %45
OpStore %l %51
%53 = OpLoad %bool %19
OpSelectionMerge %57 None
OpBranchConditional %53 %55 %56
%55 = OpLabel
%58 = OpLoad %v3float %sda
OpStore %54 %58
OpBranch %57
%56 = OpLabel
%59 = OpLoad %v3float %dsa
OpStore %54 %59
OpBranch %57
%57 = OpLabel
%60 = OpLoad %v3float %54
OpStore %r %60
%61 = OpLoad %bool %20
OpSelectionMerge %63 None
OpBranchConditional %61 %62 %63
%62 = OpLabel
%65 = OpLoad %v3float %l
OpStore %_2_hueLumColor %65
OpStore %_3_midPt %68
OpStore %_4_satPt %68
%70 = OpLoad %v3float %_2_hueLumColor
%71 = OpCompositeExtract %float %70 0
%72 = OpLoad %v3float %_2_hueLumColor
%73 = OpCompositeExtract %float %72 1
%74 = OpFOrdLessThanEqual %bool %71 %73
OpSelectionMerge %77 None
OpBranchConditional %74 %75 %76
%75 = OpLabel
%78 = OpLoad %v3float %_2_hueLumColor
%79 = OpCompositeExtract %float %78 1
%80 = OpLoad %v3float %_2_hueLumColor
%81 = OpCompositeExtract %float %80 2
%82 = OpFOrdLessThanEqual %bool %79 %81
OpSelectionMerge %85 None
%75 = OpVariable %_ptr_Function_v3float Function
%_2_mn = OpVariable %_ptr_Function_float Function
%_3_mx = OpVariable %_ptr_Function_float Function
%106 = OpVariable %_ptr_Function_v3float Function
%115 = OpVariable %_ptr_Function_v3float Function
%_4_lum = OpVariable %_ptr_Function_float Function
%_5_result = OpVariable %_ptr_Function_v3float Function
%_6_minComp = OpVariable %_ptr_Function_float Function
%_7_maxComp = OpVariable %_ptr_Function_float Function
%47 = OpLoad %v4float %41
%48 = OpCompositeExtract %float %47 3
%49 = OpLoad %v4float %40
%50 = OpCompositeExtract %float %49 3
%51 = OpFMul %float %48 %50
OpStore %alpha %51
%53 = OpLoad %v4float %40
%54 = OpVectorShuffle %v3float %53 %53 0 1 2
%55 = OpLoad %v4float %41
%56 = OpCompositeExtract %float %55 3
%57 = OpVectorTimesScalar %v3float %54 %56
OpStore %sda %57
%59 = OpLoad %v4float %41
%60 = OpVectorShuffle %v3float %59 %59 0 1 2
%61 = OpLoad %v4float %40
%62 = OpCompositeExtract %float %61 3
%63 = OpVectorTimesScalar %v3float %60 %62
OpStore %dsa %63
%65 = OpLoad %bool %42
OpSelectionMerge %69 None
OpBranchConditional %65 %67 %68
%67 = OpLabel
%70 = OpLoad %v3float %dsa
OpStore %66 %70
OpBranch %69
%68 = OpLabel
%71 = OpLoad %v3float %sda
OpStore %66 %71
OpBranch %69
%69 = OpLabel
%72 = OpLoad %v3float %66
OpStore %l %72
%74 = OpLoad %bool %42
OpSelectionMerge %78 None
OpBranchConditional %74 %76 %77
%76 = OpLabel
%79 = OpLoad %v3float %sda
OpStore %75 %79
OpBranch %78
%77 = OpLabel
%80 = OpLoad %v3float %dsa
OpStore %75 %80
OpBranch %78
%78 = OpLabel
%81 = OpLoad %v3float %75
OpStore %r %81
%82 = OpLoad %bool %43
OpSelectionMerge %84 None
OpBranchConditional %82 %83 %84
%83 = OpLabel
%86 = OpLoad %v3float %_2_hueLumColor
%87 = OpLoad %v3float %_2_hueLumColor
%88 = OpVectorShuffle %v3float %87 %87 0 0 0
%89 = OpFSub %v3float %86 %88
OpStore %_2_hueLumColor %89
%91 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %91 %float_1
%94 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %94 %float_1
OpBranch %85
%88 = OpLoad %v3float %l
%89 = OpCompositeExtract %float %88 0
%90 = OpLoad %v3float %l
%91 = OpCompositeExtract %float %90 1
%87 = OpExtInst %float %1 FMin %89 %91
%92 = OpLoad %v3float %l
%93 = OpCompositeExtract %float %92 2
%86 = OpExtInst %float %1 FMin %87 %93
OpStore %_2_mn %86
%97 = OpLoad %v3float %l
%98 = OpCompositeExtract %float %97 0
%99 = OpLoad %v3float %l
%100 = OpCompositeExtract %float %99 1
%96 = OpExtInst %float %1 FMax %98 %100
%101 = OpLoad %v3float %l
%102 = OpCompositeExtract %float %101 2
%95 = OpExtInst %float %1 FMax %96 %102
OpStore %_3_mx %95
%103 = OpLoad %float %_3_mx
%104 = OpLoad %float %_2_mn
%105 = OpFOrdGreaterThan %bool %103 %104
OpSelectionMerge %109 None
OpBranchConditional %105 %107 %108
%107 = OpLabel
%110 = OpLoad %v3float %l
%111 = OpLoad %float %_2_mn
%112 = OpCompositeConstruct %v3float %111 %111 %111
%113 = OpFSub %v3float %110 %112
%114 = OpLoad %v3float %r
OpStore %115 %114
%116 = OpFunctionCall %float %blend_color_saturation_Qhh3 %115
%117 = OpVectorTimesScalar %v3float %113 %116
%118 = OpLoad %float %_3_mx
%119 = OpLoad %float %_2_mn
%120 = OpFSub %float %118 %119
%122 = OpFDiv %float %float_1 %120
%123 = OpVectorTimesScalar %v3float %117 %122
OpStore %106 %123
OpBranch %109
%108 = OpLabel
OpStore %106 %125
OpBranch %109
%109 = OpLabel
%126 = OpLoad %v3float %106
OpStore %l %126
%127 = OpLoad %v3float %dsa
OpStore %r %127
OpBranch %84
%84 = OpLabel
%96 = OpLoad %v3float %_2_hueLumColor
%97 = OpCompositeExtract %float %96 0
%98 = OpLoad %v3float %_2_hueLumColor
%99 = OpCompositeExtract %float %98 2
%100 = OpFOrdLessThanEqual %bool %97 %99
OpSelectionMerge %103 None
OpBranchConditional %100 %101 %102
%101 = OpLabel
%104 = OpLoad %v3float %_2_hueLumColor
%105 = OpVectorShuffle %v3float %104 %104 0 2 1
%106 = OpLoad %v3float %_2_hueLumColor
%107 = OpVectorShuffle %v3float %106 %106 0 0 0
%108 = OpFSub %v3float %105 %107
OpStore %_2_hueLumColor %108
%109 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %109 %float_1
%110 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %110 %float_1
OpBranch %103
%102 = OpLabel
%111 = OpLoad %v3float %_2_hueLumColor
%112 = OpVectorShuffle %v3float %111 %111 2 0 1
%113 = OpLoad %v3float %_2_hueLumColor
%114 = OpVectorShuffle %v3float %113 %113 2 2 2
%115 = OpFSub %v3float %112 %114
OpStore %_2_hueLumColor %115
%116 = OpAccessChain %_ptr_Function_float %_4_satPt %int_1
OpStore %116 %float_1
%117 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %117 %float_1
OpBranch %103
%103 = OpLabel
OpBranch %85
%85 = OpLabel
OpBranch %77
%76 = OpLabel
%119 = OpLoad %v3float %_2_hueLumColor
%120 = OpCompositeExtract %float %119 0
%121 = OpLoad %v3float %_2_hueLumColor
%122 = OpCompositeExtract %float %121 2
%123 = OpFOrdLessThanEqual %bool %120 %122
OpSelectionMerge %126 None
OpBranchConditional %123 %124 %125
%124 = OpLabel
%127 = OpLoad %v3float %_2_hueLumColor
%128 = OpVectorShuffle %v3float %127 %127 1 0 2
%129 = OpLoad %v3float %_2_hueLumColor
%130 = OpVectorShuffle %v3float %129 %129 1 1 1
%131 = OpFSub %v3float %128 %130
OpStore %_2_hueLumColor %131
%132 = OpAccessChain %_ptr_Function_float %_4_satPt %int_2
OpStore %132 %float_1
%133 = OpAccessChain %_ptr_Function_float %_3_midPt %int_0
OpStore %133 %float_1
OpBranch %126
%125 = OpLabel
%134 = OpLoad %v3float %_2_hueLumColor
%135 = OpCompositeExtract %float %134 1
%136 = OpLoad %v3float %_2_hueLumColor
%137 = OpCompositeExtract %float %136 2
%138 = OpFOrdLessThanEqual %bool %135 %137
OpSelectionMerge %141 None
OpBranchConditional %138 %139 %140
%139 = OpLabel
%142 = OpLoad %v3float %_2_hueLumColor
%143 = OpVectorShuffle %v3float %142 %142 1 2 0
%144 = OpLoad %v3float %_2_hueLumColor
%145 = OpVectorShuffle %v3float %144 %144 1 1 1
%146 = OpFSub %v3float %143 %145
OpStore %_2_hueLumColor %146
%147 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %147 %float_1
%148 = OpAccessChain %_ptr_Function_float %_3_midPt %int_2
OpStore %148 %float_1
OpBranch %141
%140 = OpLabel
%149 = OpLoad %v3float %_2_hueLumColor
%150 = OpVectorShuffle %v3float %149 %149 2 1 0
%151 = OpLoad %v3float %_2_hueLumColor
%152 = OpVectorShuffle %v3float %151 %151 2 2 2
%153 = OpFSub %v3float %150 %152
OpStore %_2_hueLumColor %153
%154 = OpAccessChain %_ptr_Function_float %_4_satPt %int_0
OpStore %154 %float_1
%155 = OpAccessChain %_ptr_Function_float %_3_midPt %int_1
OpStore %155 %float_1
OpBranch %141
%141 = OpLabel
OpBranch %126
%126 = OpLabel
OpBranch %77
%77 = OpLabel
%156 = OpLoad %v3float %_2_hueLumColor
%157 = OpCompositeExtract %float %156 2
%158 = OpFOrdGreaterThan %bool %157 %float_0
OpSelectionMerge %160 None
OpBranchConditional %158 %159 %160
%159 = OpLabel
%161 = OpLoad %v3float %_3_midPt
%162 = OpLoad %v3float %_2_hueLumColor
%163 = OpCompositeExtract %float %162 1
%164 = OpLoad %v3float %_2_hueLumColor
%165 = OpCompositeExtract %float %164 2
%166 = OpFDiv %float %163 %165
%167 = OpVectorTimesScalar %v3float %161 %166
OpStore %_3_midPt %167
%168 = OpLoad %v3float %_3_midPt
%169 = OpLoad %v3float %_4_satPt
%170 = OpFAdd %v3float %168 %169
%173 = OpLoad %v3float %r
%174 = OpCompositeExtract %float %173 0
%175 = OpLoad %v3float %r
%176 = OpCompositeExtract %float %175 1
%172 = OpExtInst %float %1 FMax %174 %176
%177 = OpLoad %v3float %r
%178 = OpCompositeExtract %float %177 2
%171 = OpExtInst %float %1 FMax %172 %178
%181 = OpLoad %v3float %r
%182 = OpCompositeExtract %float %181 0
%183 = OpLoad %v3float %r
%184 = OpCompositeExtract %float %183 1
%180 = OpExtInst %float %1 FMin %182 %184
%185 = OpLoad %v3float %r
%186 = OpCompositeExtract %float %185 2
%179 = OpExtInst %float %1 FMin %180 %186
%187 = OpFSub %float %171 %179
%188 = OpVectorTimesScalar %v3float %170 %187
OpStore %_2_hueLumColor %188
OpBranch %160
%160 = OpLabel
%189 = OpLoad %v3float %_2_hueLumColor
OpStore %l %189
%190 = OpLoad %v3float %dsa
OpStore %r %190
OpBranch %63
%63 = OpLabel
%197 = OpLoad %v3float %r
%192 = OpDot %float %196 %197
OpStore %_5_lum %192
%199 = OpLoad %float %_5_lum
%201 = OpLoad %v3float %l
%200 = OpDot %float %196 %201
%202 = OpFSub %float %199 %200
%203 = OpLoad %v3float %l
%204 = OpCompositeConstruct %v3float %202 %202 %202
%205 = OpFAdd %v3float %204 %203
OpStore %_6_result %205
%209 = OpLoad %v3float %_6_result
%210 = OpCompositeExtract %float %209 0
%211 = OpLoad %v3float %_6_result
%212 = OpCompositeExtract %float %211 1
%208 = OpExtInst %float %1 FMin %210 %212
%213 = OpLoad %v3float %_6_result
%214 = OpCompositeExtract %float %213 2
%207 = OpExtInst %float %1 FMin %208 %214
OpStore %_7_minComp %207
%218 = OpLoad %v3float %_6_result
%219 = OpCompositeExtract %float %218 0
%220 = OpLoad %v3float %_6_result
%221 = OpCompositeExtract %float %220 1
%217 = OpExtInst %float %1 FMax %219 %221
%222 = OpLoad %v3float %_6_result
%223 = OpCompositeExtract %float %222 2
%216 = OpExtInst %float %1 FMax %217 %223
OpStore %_8_maxComp %216
%225 = OpLoad %float %_7_minComp
%226 = OpFOrdLessThan %bool %225 %float_0
OpSelectionMerge %228 None
OpBranchConditional %226 %227 %228
%227 = OpLabel
%229 = OpLoad %float %_5_lum
%230 = OpLoad %float %_7_minComp
%231 = OpFUnordNotEqual %bool %229 %230
OpBranch %228
%228 = OpLabel
%232 = OpPhi %bool %false %63 %231 %227
OpSelectionMerge %234 None
OpBranchConditional %232 %233 %234
%233 = OpLabel
%235 = OpLoad %float %_5_lum
%236 = OpLoad %v3float %_6_result
%237 = OpLoad %float %_5_lum
%238 = OpCompositeConstruct %v3float %237 %237 %237
%239 = OpFSub %v3float %236 %238
%240 = OpLoad %float %_5_lum
%241 = OpLoad %float %_5_lum
%242 = OpLoad %float %_7_minComp
%243 = OpFSub %float %241 %242
%244 = OpFDiv %float %240 %243
%245 = OpVectorTimesScalar %v3float %239 %244
%246 = OpCompositeConstruct %v3float %235 %235 %235
%247 = OpFAdd %v3float %246 %245
OpStore %_6_result %247
OpBranch %234
%234 = OpLabel
%248 = OpLoad %float %_8_maxComp
%249 = OpLoad %float %alpha
%250 = OpFOrdGreaterThan %bool %248 %249
OpSelectionMerge %252 None
OpBranchConditional %250 %251 %252
%251 = OpLabel
%253 = OpLoad %float %_8_maxComp
%254 = OpLoad %float %_5_lum
%255 = OpFUnordNotEqual %bool %253 %254
OpBranch %252
%252 = OpLabel
%256 = OpPhi %bool %false %234 %255 %251
OpSelectionMerge %258 None
OpBranchConditional %256 %257 %258
%257 = OpLabel
%259 = OpLoad %float %_5_lum
%260 = OpLoad %v3float %_6_result
%261 = OpLoad %float %_5_lum
%262 = OpCompositeConstruct %v3float %261 %261 %261
%263 = OpFSub %v3float %260 %262
%264 = OpLoad %float %alpha
%265 = OpLoad %float %_5_lum
%266 = OpFSub %float %264 %265
%267 = OpVectorTimesScalar %v3float %263 %266
%268 = OpLoad %float %_8_maxComp
%269 = OpLoad %float %_5_lum
%270 = OpFSub %float %268 %269
%271 = OpFDiv %float %float_1 %270
%272 = OpVectorTimesScalar %v3float %267 %271
%273 = OpCompositeConstruct %v3float %259 %259 %259
%274 = OpFAdd %v3float %273 %272
OpStore %_6_result %274
OpBranch %258
%258 = OpLabel
%275 = OpLoad %v3float %_6_result
%276 = OpLoad %v4float %18
%277 = OpVectorShuffle %v3float %276 %276 0 1 2
%278 = OpFAdd %v3float %275 %277
%279 = OpLoad %v3float %dsa
%280 = OpFSub %v3float %278 %279
%281 = OpLoad %v4float %17
%282 = OpVectorShuffle %v3float %281 %281 0 1 2
%283 = OpFAdd %v3float %280 %282
%284 = OpLoad %v3float %sda
%285 = OpFSub %v3float %283 %284
%286 = OpCompositeExtract %float %285 0
%287 = OpCompositeExtract %float %285 1
%288 = OpCompositeExtract %float %285 2
%289 = OpLoad %v4float %17
%290 = OpCompositeExtract %float %289 3
%291 = OpLoad %v4float %18
%292 = OpCompositeExtract %float %291 3
%293 = OpFAdd %float %290 %292
%294 = OpLoad %float %alpha
%295 = OpFSub %float %293 %294
%296 = OpCompositeConstruct %v4float %286 %287 %288 %295
OpReturnValue %296
%134 = OpLoad %v3float %r
%129 = OpDot %float %133 %134
OpStore %_4_lum %129
%136 = OpLoad %float %_4_lum
%138 = OpLoad %v3float %l
%137 = OpDot %float %133 %138
%139 = OpFSub %float %136 %137
%140 = OpLoad %v3float %l
%141 = OpCompositeConstruct %v3float %139 %139 %139
%142 = OpFAdd %v3float %141 %140
OpStore %_5_result %142
%146 = OpLoad %v3float %_5_result
%147 = OpCompositeExtract %float %146 0
%148 = OpLoad %v3float %_5_result
%149 = OpCompositeExtract %float %148 1
%145 = OpExtInst %float %1 FMin %147 %149
%150 = OpLoad %v3float %_5_result
%151 = OpCompositeExtract %float %150 2
%144 = OpExtInst %float %1 FMin %145 %151
OpStore %_6_minComp %144
%155 = OpLoad %v3float %_5_result
%156 = OpCompositeExtract %float %155 0
%157 = OpLoad %v3float %_5_result
%158 = OpCompositeExtract %float %157 1
%154 = OpExtInst %float %1 FMax %156 %158
%159 = OpLoad %v3float %_5_result
%160 = OpCompositeExtract %float %159 2
%153 = OpExtInst %float %1 FMax %154 %160
OpStore %_7_maxComp %153
%162 = OpLoad %float %_6_minComp
%163 = OpFOrdLessThan %bool %162 %float_0
OpSelectionMerge %165 None
OpBranchConditional %163 %164 %165
%164 = OpLabel
%166 = OpLoad %float %_4_lum
%167 = OpLoad %float %_6_minComp
%168 = OpFUnordNotEqual %bool %166 %167
OpBranch %165
%165 = OpLabel
%169 = OpPhi %bool %false %84 %168 %164
OpSelectionMerge %171 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%172 = OpLoad %float %_4_lum
%173 = OpLoad %v3float %_5_result
%174 = OpLoad %float %_4_lum
%175 = OpCompositeConstruct %v3float %174 %174 %174
%176 = OpFSub %v3float %173 %175
%177 = OpLoad %float %_4_lum
%178 = OpLoad %float %_4_lum
%179 = OpLoad %float %_6_minComp
%180 = OpFSub %float %178 %179
%181 = OpFDiv %float %177 %180
%182 = OpVectorTimesScalar %v3float %176 %181
%183 = OpCompositeConstruct %v3float %172 %172 %172
%184 = OpFAdd %v3float %183 %182
OpStore %_5_result %184
OpBranch %171
%171 = OpLabel
%185 = OpLoad %float %_7_maxComp
%186 = OpLoad %float %alpha
%187 = OpFOrdGreaterThan %bool %185 %186
OpSelectionMerge %189 None
OpBranchConditional %187 %188 %189
%188 = OpLabel
%190 = OpLoad %float %_7_maxComp
%191 = OpLoad %float %_4_lum
%192 = OpFUnordNotEqual %bool %190 %191
OpBranch %189
%189 = OpLabel
%193 = OpPhi %bool %false %171 %192 %188
OpSelectionMerge %195 None
OpBranchConditional %193 %194 %195
%194 = OpLabel
%196 = OpLoad %float %_4_lum
%197 = OpLoad %v3float %_5_result
%198 = OpLoad %float %_4_lum
%199 = OpCompositeConstruct %v3float %198 %198 %198
%200 = OpFSub %v3float %197 %199
%201 = OpLoad %float %alpha
%202 = OpLoad %float %_4_lum
%203 = OpFSub %float %201 %202
%204 = OpVectorTimesScalar %v3float %200 %203
%205 = OpLoad %float %_7_maxComp
%206 = OpLoad %float %_4_lum
%207 = OpFSub %float %205 %206
%208 = OpFDiv %float %float_1 %207
%209 = OpVectorTimesScalar %v3float %204 %208
%210 = OpCompositeConstruct %v3float %196 %196 %196
%211 = OpFAdd %v3float %210 %209
OpStore %_5_result %211
OpBranch %195
%195 = OpLabel
%212 = OpLoad %v3float %_5_result
%213 = OpLoad %v4float %41
%214 = OpVectorShuffle %v3float %213 %213 0 1 2
%215 = OpFAdd %v3float %212 %214
%216 = OpLoad %v3float %dsa
%217 = OpFSub %v3float %215 %216
%218 = OpLoad %v4float %40
%219 = OpVectorShuffle %v3float %218 %218 0 1 2
%220 = OpFAdd %v3float %217 %219
%221 = OpLoad %v3float %sda
%222 = OpFSub %v3float %220 %221
%223 = OpCompositeExtract %float %222 0
%224 = OpCompositeExtract %float %222 1
%225 = OpCompositeExtract %float %222 2
%226 = OpLoad %v4float %40
%227 = OpCompositeExtract %float %226 3
%228 = OpLoad %v4float %41
%229 = OpCompositeExtract %float %228 3
%230 = OpFAdd %float %227 %229
%231 = OpLoad %float %alpha
%232 = OpFSub %float %230 %231
%233 = OpCompositeConstruct %v4float %223 %224 %225 %232
OpReturnValue %233
OpFunctionEnd
%main = OpFunction %void None %298
%299 = OpLabel
%303 = OpVariable %_ptr_Function_v4float Function
%306 = OpVariable %_ptr_Function_v4float Function
%308 = OpVariable %_ptr_Function_bool Function
%309 = OpVariable %_ptr_Function_bool Function
%300 = OpAccessChain %_ptr_Uniform_v4float %11 %int_0
%302 = OpLoad %v4float %300
OpStore %303 %302
%304 = OpAccessChain %_ptr_Uniform_v4float %11 %int_1
%305 = OpLoad %v4float %304
OpStore %306 %305
OpStore %308 %true
OpStore %309 %true
%310 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %303 %306 %308 %309
OpStore %sk_FragColor %310
%main = OpFunction %void None %235
%236 = OpLabel
%242 = OpVariable %_ptr_Function_v4float Function
%246 = OpVariable %_ptr_Function_v4float Function
%248 = OpVariable %_ptr_Function_bool Function
%249 = OpVariable %_ptr_Function_bool Function
%237 = OpAccessChain %_ptr_Uniform_v4float %12 %int_0
%241 = OpLoad %v4float %237
OpStore %242 %241
%243 = OpAccessChain %_ptr_Uniform_v4float %12 %int_1
%245 = OpLoad %v4float %243
OpStore %246 %245
OpStore %248 %true
OpStore %249 %true
%250 = OpFunctionCall %v4float %blend_hslc_h4h4h4bb %242 %246 %248 %249
OpStore %sk_FragColor %250
OpReturn
OpFunctionEnd

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, true, true);

View File

@ -10,6 +10,9 @@ struct Inputs {
struct Outputs {
half4 sk_FragColor [[color(0)]];
};
half blend_color_saturation_Qhh3(half3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half alpha = dst.w * src.w;
half3 sda = src.xyz * dst.w;
@ -17,48 +20,22 @@ half4 blend_hslc_h4h4h4bb(half4 src, half4 dst, bool flip, bool saturate) {
half3 l = flip ? dsa : sda;
half3 r = flip ? sda : dsa;
if (saturate) {
half3 _2_hueLumColor = l;
half3 _3_midPt = half3(0.0h);
half3 _4_satPt = half3(0.0h);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0h);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0h);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0h);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0h);
}
if (_2_hueLumColor.z > 0.0h) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
half _2_mn = min(min(l.x, l.y), l.z);
half _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : half3(0.0h);
r = dsa;
}
half _5_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _6_result = (_5_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
half _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0h && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
half _4_lum = dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), r);
half3 _5_result = (_4_lum - dot(half3(0.30000001192092896h, 0.5899999737739563h, 0.10999999940395355h), l)) + l;
half _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
half _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0h && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return half4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return half4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
Outputs _out;

View File

@ -2,6 +2,9 @@
out vec4 sk_FragColor;
uniform vec4 src;
uniform vec4 dst;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -9,48 +12,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
sk_FragColor = blend_hslc_h4h4h4bb(src, dst, true, true);

View File

@ -7,6 +7,9 @@ vec4 blend_src_in_h4h4h4(vec4 src, vec4 dst) {
vec4 blend_dst_in_h4h4h4(vec4 src, vec4 dst) {
return dst * src.w;
}
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -14,48 +17,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
vec4 blend_hue_h4h4h4(vec4 src, vec4 dst) {
return blend_hslc_h4h4h4bb(src, dst, false, true);

View File

@ -1,6 +1,9 @@
out vec4 sk_FragColor;
uniform vec4 color;
float blend_color_saturation_Qhh3(vec3 color) {
return max(max(color.x, color.y), color.z) - min(min(color.x, color.y), color.z);
}
vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
float alpha = dst.w * src.w;
vec3 sda = src.xyz * dst.w;
@ -8,48 +11,22 @@ vec4 blend_hslc_h4h4h4bb(vec4 src, vec4 dst, bool flip, bool saturate) {
vec3 l = flip ? dsa : sda;
vec3 r = flip ? sda : dsa;
if (saturate) {
vec3 _2_hueLumColor = l;
vec3 _3_midPt = vec3(0.0);
vec3 _4_satPt = vec3(0.0);
if (_2_hueLumColor.x <= _2_hueLumColor.y) {
if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor -= _2_hueLumColor.xxx;
_3_midPt.y = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.xzy - _2_hueLumColor.xxx;
_3_midPt.z = (_4_satPt.y = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zxy - _2_hueLumColor.zzz;
_3_midPt.x = (_4_satPt.y = 1.0);
}
} else if (_2_hueLumColor.x <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yxz - _2_hueLumColor.yyy;
_3_midPt.x = (_4_satPt.z = 1.0);
} else if (_2_hueLumColor.y <= _2_hueLumColor.z) {
_2_hueLumColor = _2_hueLumColor.yzx - _2_hueLumColor.yyy;
_3_midPt.z = (_4_satPt.x = 1.0);
} else {
_2_hueLumColor = _2_hueLumColor.zyx - _2_hueLumColor.zzz;
_3_midPt.y = (_4_satPt.x = 1.0);
}
if (_2_hueLumColor.z > 0.0) {
_3_midPt *= _2_hueLumColor.y / _2_hueLumColor.z;
_2_hueLumColor = (_3_midPt + _4_satPt) * (max(max(r.x, r.y), r.z) - min(min(r.x, r.y), r.z));
}
l = _2_hueLumColor;
float _2_mn = min(min(l.x, l.y), l.z);
float _3_mx = max(max(l.x, l.y), l.z);
l = _3_mx > _2_mn ? ((l - _2_mn) * blend_color_saturation_Qhh3(r)) / (_3_mx - _2_mn) : vec3(0.0);
r = dsa;
}
float _5_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _6_result = (_5_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _7_minComp = min(min(_6_result.x, _6_result.y), _6_result.z);
float _8_maxComp = max(max(_6_result.x, _6_result.y), _6_result.z);
if (_7_minComp < 0.0 && _5_lum != _7_minComp) {
_6_result = _5_lum + (_6_result - _5_lum) * (_5_lum / (_5_lum - _7_minComp));
float _4_lum = dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), r);
vec3 _5_result = (_4_lum - dot(vec3(0.30000001192092896, 0.5899999737739563, 0.10999999940395355), l)) + l;
float _6_minComp = min(min(_5_result.x, _5_result.y), _5_result.z);
float _7_maxComp = max(max(_5_result.x, _5_result.y), _5_result.z);
if (_6_minComp < 0.0 && _4_lum != _6_minComp) {
_5_result = _4_lum + (_5_result - _4_lum) * (_4_lum / (_4_lum - _6_minComp));
}
if (_8_maxComp > alpha && _8_maxComp != _5_lum) {
_6_result = _5_lum + ((_6_result - _5_lum) * (alpha - _5_lum)) / (_8_maxComp - _5_lum);
if (_7_maxComp > alpha && _7_maxComp != _4_lum) {
_5_result = _4_lum + ((_5_result - _4_lum) * (alpha - _4_lum)) / (_7_maxComp - _4_lum);
}
return vec4((((_6_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
return vec4((((_5_result + dst.xyz) - dsa) + src.xyz) - sda, (src.w + dst.w) - alpha);
}
void main() {
float _1_c = color.x * color.y + color.z;