skia2/tests/sksl/blend/BlendSaturation.asm.frag
John Stiles 2e6f60f423 Fix color fringes on blend_hue and blend_saturation.
Previously, we checked for division against zero, but didn't do anything
to prevent division against extraordinarily small values. Now, we only
saturate if the delta between max and min is greater than 0.00001.

Change-Id: I7d1df3430941c7e1a7f94e597d5449f9259612d6
Bug: skia:9320
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/527498
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
2022-04-05 19:46:58 +00:00

601 lines
20 KiB
JavaScript

OpCapability Shader
%1 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
OpEntryPoint Fragment %main "main" %sk_FragColor %sk_Clockwise
OpExecutionMode %main OriginUpperLeft
OpName %sk_FragColor "sk_FragColor"
OpName %sk_Clockwise "sk_Clockwise"
OpName %_UniformBuffer "_UniformBuffer"
OpMemberName %_UniformBuffer 0 "src"
OpMemberName %_UniformBuffer 1 "dst"
OpName %blend_set_color_luminance_Qh3h3hh3 "blend_set_color_luminance_Qh3h3hh3"
OpName %lum "lum"
OpName %result "result"
OpName %minComp "minComp"
OpName %maxComp "maxComp"
OpName %blend_set_color_saturation_helper_Qh3h3h "blend_set_color_saturation_helper_Qh3h3h"
OpName %delta "delta"
OpName %blend_set_color_saturation_Qh3h3h3 "blend_set_color_saturation_Qh3h3h3"
OpName %sat "sat"
OpName %main "main"
OpName %_0_alpha "_0_alpha"
OpName %_1_sda "_1_sda"
OpName %_2_dsa "_2_dsa"
OpDecorate %sk_FragColor RelaxedPrecision
OpDecorate %sk_FragColor Location 0
OpDecorate %sk_FragColor Index 0
OpDecorate %sk_Clockwise BuiltIn FrontFacing
OpMemberDecorate %_UniformBuffer 0 Offset 0
OpMemberDecorate %_UniformBuffer 0 RelaxedPrecision
OpMemberDecorate %_UniformBuffer 1 Offset 16
OpMemberDecorate %_UniformBuffer 1 RelaxedPrecision
OpDecorate %_UniformBuffer Block
OpDecorate %13 Binding 0
OpDecorate %13 DescriptorSet 0
OpDecorate %lum RelaxedPrecision
OpDecorate %25 RelaxedPrecision
OpDecorate %29 RelaxedPrecision
OpDecorate %30 RelaxedPrecision
OpDecorate %result RelaxedPrecision
OpDecorate %32 RelaxedPrecision
OpDecorate %33 RelaxedPrecision
OpDecorate %34 RelaxedPrecision
OpDecorate %35 RelaxedPrecision
OpDecorate %36 RelaxedPrecision
OpDecorate %37 RelaxedPrecision
OpDecorate %38 RelaxedPrecision
OpDecorate %minComp RelaxedPrecision
OpDecorate %42 RelaxedPrecision
OpDecorate %43 RelaxedPrecision
OpDecorate %44 RelaxedPrecision
OpDecorate %45 RelaxedPrecision
OpDecorate %46 RelaxedPrecision
OpDecorate %47 RelaxedPrecision
OpDecorate %maxComp RelaxedPrecision
OpDecorate %51 RelaxedPrecision
OpDecorate %52 RelaxedPrecision
OpDecorate %53 RelaxedPrecision
OpDecorate %54 RelaxedPrecision
OpDecorate %55 RelaxedPrecision
OpDecorate %56 RelaxedPrecision
OpDecorate %58 RelaxedPrecision
OpDecorate %63 RelaxedPrecision
OpDecorate %64 RelaxedPrecision
OpDecorate %69 RelaxedPrecision
OpDecorate %70 RelaxedPrecision
OpDecorate %71 RelaxedPrecision
OpDecorate %72 RelaxedPrecision
OpDecorate %73 RelaxedPrecision
OpDecorate %74 RelaxedPrecision
OpDecorate %75 RelaxedPrecision
OpDecorate %76 RelaxedPrecision
OpDecorate %77 RelaxedPrecision
OpDecorate %78 RelaxedPrecision
OpDecorate %79 RelaxedPrecision
OpDecorate %80 RelaxedPrecision
OpDecorate %81 RelaxedPrecision
OpDecorate %82 RelaxedPrecision
OpDecorate %83 RelaxedPrecision
OpDecorate %87 RelaxedPrecision
OpDecorate %88 RelaxedPrecision
OpDecorate %94 RelaxedPrecision
OpDecorate %95 RelaxedPrecision
OpDecorate %96 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 %107 RelaxedPrecision
OpDecorate %108 RelaxedPrecision
OpDecorate %109 RelaxedPrecision
OpDecorate %110 RelaxedPrecision
OpDecorate %111 RelaxedPrecision
OpDecorate %delta RelaxedPrecision
OpDecorate %119 RelaxedPrecision
OpDecorate %120 RelaxedPrecision
OpDecorate %121 RelaxedPrecision
OpDecorate %122 RelaxedPrecision
OpDecorate %123 RelaxedPrecision
OpDecorate %124 RelaxedPrecision
OpDecorate %125 RelaxedPrecision
OpDecorate %132 RelaxedPrecision
OpDecorate %133 RelaxedPrecision
OpDecorate %134 RelaxedPrecision
OpDecorate %135 RelaxedPrecision
OpDecorate %136 RelaxedPrecision
OpDecorate %137 RelaxedPrecision
OpDecorate %138 RelaxedPrecision
OpDecorate %139 RelaxedPrecision
OpDecorate %140 RelaxedPrecision
OpDecorate %141 RelaxedPrecision
OpDecorate %142 RelaxedPrecision
OpDecorate %sat RelaxedPrecision
OpDecorate %150 RelaxedPrecision
OpDecorate %151 RelaxedPrecision
OpDecorate %152 RelaxedPrecision
OpDecorate %153 RelaxedPrecision
OpDecorate %154 RelaxedPrecision
OpDecorate %155 RelaxedPrecision
OpDecorate %158 RelaxedPrecision
OpDecorate %159 RelaxedPrecision
OpDecorate %160 RelaxedPrecision
OpDecorate %161 RelaxedPrecision
OpDecorate %162 RelaxedPrecision
OpDecorate %163 RelaxedPrecision
OpDecorate %164 RelaxedPrecision
OpDecorate %165 RelaxedPrecision
OpDecorate %166 RelaxedPrecision
OpDecorate %167 RelaxedPrecision
OpDecorate %168 RelaxedPrecision
OpDecorate %173 RelaxedPrecision
OpDecorate %174 RelaxedPrecision
OpDecorate %175 RelaxedPrecision
OpDecorate %176 RelaxedPrecision
OpDecorate %181 RelaxedPrecision
OpDecorate %183 RelaxedPrecision
OpDecorate %186 RelaxedPrecision
OpDecorate %187 RelaxedPrecision
OpDecorate %188 RelaxedPrecision
OpDecorate %189 RelaxedPrecision
OpDecorate %194 RelaxedPrecision
OpDecorate %195 RelaxedPrecision
OpDecorate %197 RelaxedPrecision
OpDecorate %200 RelaxedPrecision
OpDecorate %201 RelaxedPrecision
OpDecorate %202 RelaxedPrecision
OpDecorate %204 RelaxedPrecision
OpDecorate %207 RelaxedPrecision
OpDecorate %208 RelaxedPrecision
OpDecorate %209 RelaxedPrecision
OpDecorate %210 RelaxedPrecision
OpDecorate %211 RelaxedPrecision
OpDecorate %216 RelaxedPrecision
OpDecorate %217 RelaxedPrecision
OpDecorate %219 RelaxedPrecision
OpDecorate %222 RelaxedPrecision
OpDecorate %223 RelaxedPrecision
OpDecorate %224 RelaxedPrecision
OpDecorate %225 RelaxedPrecision
OpDecorate %226 RelaxedPrecision
OpDecorate %231 RelaxedPrecision
OpDecorate %232 RelaxedPrecision
OpDecorate %234 RelaxedPrecision
OpDecorate %237 RelaxedPrecision
OpDecorate %238 RelaxedPrecision
OpDecorate %239 RelaxedPrecision
OpDecorate %241 RelaxedPrecision
OpDecorate %244 RelaxedPrecision
OpDecorate %_0_alpha RelaxedPrecision
OpDecorate %253 RelaxedPrecision
OpDecorate %254 RelaxedPrecision
OpDecorate %257 RelaxedPrecision
OpDecorate %258 RelaxedPrecision
OpDecorate %259 RelaxedPrecision
OpDecorate %_1_sda RelaxedPrecision
OpDecorate %262 RelaxedPrecision
OpDecorate %263 RelaxedPrecision
OpDecorate %265 RelaxedPrecision
OpDecorate %266 RelaxedPrecision
OpDecorate %267 RelaxedPrecision
OpDecorate %_2_dsa RelaxedPrecision
OpDecorate %270 RelaxedPrecision
OpDecorate %271 RelaxedPrecision
OpDecorate %273 RelaxedPrecision
OpDecorate %274 RelaxedPrecision
OpDecorate %275 RelaxedPrecision
OpDecorate %276 RelaxedPrecision
OpDecorate %278 RelaxedPrecision
OpDecorate %282 RelaxedPrecision
OpDecorate %284 RelaxedPrecision
OpDecorate %288 RelaxedPrecision
OpDecorate %289 RelaxedPrecision
OpDecorate %290 RelaxedPrecision
OpDecorate %291 RelaxedPrecision
OpDecorate %292 RelaxedPrecision
OpDecorate %294 RelaxedPrecision
OpDecorate %295 RelaxedPrecision
OpDecorate %296 RelaxedPrecision
OpDecorate %297 RelaxedPrecision
OpDecorate %298 RelaxedPrecision
OpDecorate %299 RelaxedPrecision
OpDecorate %300 RelaxedPrecision
OpDecorate %301 RelaxedPrecision
OpDecorate %303 RelaxedPrecision
OpDecorate %304 RelaxedPrecision
OpDecorate %306 RelaxedPrecision
OpDecorate %307 RelaxedPrecision
OpDecorate %308 RelaxedPrecision
OpDecorate %309 RelaxedPrecision
OpDecorate %310 RelaxedPrecision
OpDecorate %311 RelaxedPrecision
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
%sk_FragColor = OpVariable %_ptr_Output_v4float Output
%bool = OpTypeBool
%_ptr_Input_bool = OpTypePointer Input %bool
%sk_Clockwise = OpVariable %_ptr_Input_bool Input
%_UniformBuffer = OpTypeStruct %v4float %v4float
%_ptr_Uniform__UniformBuffer = OpTypePointer Uniform %_UniformBuffer
%13 = OpVariable %_ptr_Uniform__UniformBuffer Uniform
%v3float = OpTypeVector %float 3
%_ptr_Function_v3float = OpTypePointer Function %v3float
%_ptr_Function_float = OpTypePointer Function %float
%17 = OpTypeFunction %v3float %_ptr_Function_v3float %_ptr_Function_float %_ptr_Function_v3float
%float_0_300000012 = OpConstant %float 0.300000012
%float_0_589999974 = OpConstant %float 0.589999974
%float_0_109999999 = OpConstant %float 0.109999999
%29 = OpConstantComposite %v3float %float_0_300000012 %float_0_589999974 %float_0_109999999
%false = OpConstantFalse %bool
%float_0 = OpConstant %float 0
%float_1 = OpConstant %float 1
%112 = OpTypeFunction %v3float %_ptr_Function_v3float %_ptr_Function_float
%v2float = OpTypeVector %float 2
%_ptr_Function_v2float = OpTypePointer Function %v2float
%float_9_99999975en06 = OpConstant %float 9.99999975e-06
%141 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%143 = OpTypeFunction %v3float %_ptr_Function_v3float %_ptr_Function_v3float
%void = OpTypeVoid
%246 = OpTypeFunction %void
%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%int_0 = OpConstant %int 0
%blend_set_color_luminance_Qh3h3hh3 = OpFunction %v3float None %17
%20 = OpFunctionParameter %_ptr_Function_v3float
%21 = OpFunctionParameter %_ptr_Function_float
%22 = OpFunctionParameter %_ptr_Function_v3float
%23 = OpLabel
%lum = OpVariable %_ptr_Function_float Function
%result = OpVariable %_ptr_Function_v3float Function
%minComp = OpVariable %_ptr_Function_float Function
%maxComp = OpVariable %_ptr_Function_float Function
%30 = OpLoad %v3float %22
%25 = OpDot %float %29 %30
OpStore %lum %25
%32 = OpLoad %float %lum
%34 = OpLoad %v3float %20
%33 = OpDot %float %29 %34
%35 = OpFSub %float %32 %33
%36 = OpLoad %v3float %20
%37 = OpCompositeConstruct %v3float %35 %35 %35
%38 = OpFAdd %v3float %37 %36
OpStore %result %38
%42 = OpLoad %v3float %result
%43 = OpCompositeExtract %float %42 0
%44 = OpLoad %v3float %result
%45 = OpCompositeExtract %float %44 1
%41 = OpExtInst %float %1 FMin %43 %45
%46 = OpLoad %v3float %result
%47 = OpCompositeExtract %float %46 2
%40 = OpExtInst %float %1 FMin %41 %47
OpStore %minComp %40
%51 = OpLoad %v3float %result
%52 = OpCompositeExtract %float %51 0
%53 = OpLoad %v3float %result
%54 = OpCompositeExtract %float %53 1
%50 = OpExtInst %float %1 FMax %52 %54
%55 = OpLoad %v3float %result
%56 = OpCompositeExtract %float %55 2
%49 = OpExtInst %float %1 FMax %50 %56
OpStore %maxComp %49
%58 = OpLoad %float %minComp
%60 = OpFOrdLessThan %bool %58 %float_0
OpSelectionMerge %62 None
OpBranchConditional %60 %61 %62
%61 = OpLabel
%63 = OpLoad %float %lum
%64 = OpLoad %float %minComp
%65 = OpFUnordNotEqual %bool %63 %64
OpBranch %62
%62 = OpLabel
%66 = OpPhi %bool %false %23 %65 %61
OpSelectionMerge %68 None
OpBranchConditional %66 %67 %68
%67 = OpLabel
%69 = OpLoad %float %lum
%70 = OpLoad %v3float %result
%71 = OpLoad %float %lum
%72 = OpCompositeConstruct %v3float %71 %71 %71
%73 = OpFSub %v3float %70 %72
%74 = OpLoad %float %lum
%75 = OpLoad %float %lum
%76 = OpLoad %float %minComp
%77 = OpFSub %float %75 %76
%78 = OpFDiv %float %74 %77
%79 = OpVectorTimesScalar %v3float %73 %78
%80 = OpCompositeConstruct %v3float %69 %69 %69
%81 = OpFAdd %v3float %80 %79
OpStore %result %81
OpBranch %68
%68 = OpLabel
%82 = OpLoad %float %maxComp
%83 = OpLoad %float %21
%84 = OpFOrdGreaterThan %bool %82 %83
OpSelectionMerge %86 None
OpBranchConditional %84 %85 %86
%85 = OpLabel
%87 = OpLoad %float %maxComp
%88 = OpLoad %float %lum
%89 = OpFUnordNotEqual %bool %87 %88
OpBranch %86
%86 = OpLabel
%90 = OpPhi %bool %false %68 %89 %85
OpSelectionMerge %93 None
OpBranchConditional %90 %91 %92
%91 = OpLabel
%94 = OpLoad %float %lum
%95 = OpLoad %v3float %result
%96 = OpLoad %float %lum
%97 = OpCompositeConstruct %v3float %96 %96 %96
%98 = OpFSub %v3float %95 %97
%99 = OpLoad %float %21
%100 = OpLoad %float %lum
%101 = OpFSub %float %99 %100
%102 = OpVectorTimesScalar %v3float %98 %101
%103 = OpLoad %float %maxComp
%104 = OpLoad %float %lum
%105 = OpFSub %float %103 %104
%107 = OpFDiv %float %float_1 %105
%108 = OpVectorTimesScalar %v3float %102 %107
%109 = OpCompositeConstruct %v3float %94 %94 %94
%110 = OpFAdd %v3float %109 %108
OpReturnValue %110
%92 = OpLabel
%111 = OpLoad %v3float %result
OpReturnValue %111
%93 = OpLabel
OpUnreachable
OpFunctionEnd
%blend_set_color_saturation_helper_Qh3h3h = OpFunction %v3float None %112
%113 = OpFunctionParameter %_ptr_Function_v3float
%114 = OpFunctionParameter %_ptr_Function_float
%115 = OpLabel
%delta = OpVariable %_ptr_Function_v2float Function
%128 = OpVariable %_ptr_Function_v3float Function
%119 = OpLoad %v3float %113
%120 = OpVectorShuffle %v2float %119 %119 1 2
%121 = OpLoad %v3float %113
%122 = OpVectorShuffle %v2float %121 %121 0 0
%123 = OpFSub %v2float %120 %122
OpStore %delta %123
%124 = OpLoad %v2float %delta
%125 = OpCompositeExtract %float %124 1
%127 = OpFOrdGreaterThanEqual %bool %125 %float_9_99999975en06
OpSelectionMerge %131 None
OpBranchConditional %127 %129 %130
%129 = OpLabel
%132 = OpLoad %v2float %delta
%133 = OpCompositeExtract %float %132 0
%134 = OpLoad %v2float %delta
%135 = OpCompositeExtract %float %134 1
%136 = OpFDiv %float %133 %135
%137 = OpLoad %float %114
%138 = OpFMul %float %136 %137
%139 = OpLoad %float %114
%140 = OpCompositeConstruct %v3float %float_0 %138 %139
OpStore %128 %140
OpBranch %131
%130 = OpLabel
OpStore %128 %141
OpBranch %131
%131 = OpLabel
%142 = OpLoad %v3float %128
OpReturnValue %142
OpFunctionEnd
%blend_set_color_saturation_Qh3h3h3 = OpFunction %v3float None %143
%144 = OpFunctionParameter %_ptr_Function_v3float
%145 = OpFunctionParameter %_ptr_Function_v3float
%146 = OpLabel
%sat = OpVariable %_ptr_Function_float Function
%182 = OpVariable %_ptr_Function_v3float Function
%184 = OpVariable %_ptr_Function_float Function
%196 = OpVariable %_ptr_Function_v3float Function
%198 = OpVariable %_ptr_Function_float Function
%203 = OpVariable %_ptr_Function_v3float Function
%205 = OpVariable %_ptr_Function_float Function
%218 = OpVariable %_ptr_Function_v3float Function
%220 = OpVariable %_ptr_Function_float Function
%233 = OpVariable %_ptr_Function_v3float Function
%235 = OpVariable %_ptr_Function_float Function
%240 = OpVariable %_ptr_Function_v3float Function
%242 = OpVariable %_ptr_Function_float Function
%150 = OpLoad %v3float %145
%151 = OpCompositeExtract %float %150 0
%152 = OpLoad %v3float %145
%153 = OpCompositeExtract %float %152 1
%149 = OpExtInst %float %1 FMax %151 %153
%154 = OpLoad %v3float %145
%155 = OpCompositeExtract %float %154 2
%148 = OpExtInst %float %1 FMax %149 %155
%158 = OpLoad %v3float %145
%159 = OpCompositeExtract %float %158 0
%160 = OpLoad %v3float %145
%161 = OpCompositeExtract %float %160 1
%157 = OpExtInst %float %1 FMin %159 %161
%162 = OpLoad %v3float %145
%163 = OpCompositeExtract %float %162 2
%156 = OpExtInst %float %1 FMin %157 %163
%164 = OpFSub %float %148 %156
OpStore %sat %164
%165 = OpLoad %v3float %144
%166 = OpCompositeExtract %float %165 0
%167 = OpLoad %v3float %144
%168 = OpCompositeExtract %float %167 1
%169 = OpFOrdLessThanEqual %bool %166 %168
OpSelectionMerge %172 None
OpBranchConditional %169 %170 %171
%170 = OpLabel
%173 = OpLoad %v3float %144
%174 = OpCompositeExtract %float %173 1
%175 = OpLoad %v3float %144
%176 = OpCompositeExtract %float %175 2
%177 = OpFOrdLessThanEqual %bool %174 %176
OpSelectionMerge %180 None
OpBranchConditional %177 %178 %179
%178 = OpLabel
%181 = OpLoad %v3float %144
OpStore %182 %181
%183 = OpLoad %float %sat
OpStore %184 %183
%185 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %182 %184
OpReturnValue %185
%179 = OpLabel
%186 = OpLoad %v3float %144
%187 = OpCompositeExtract %float %186 0
%188 = OpLoad %v3float %144
%189 = OpCompositeExtract %float %188 2
%190 = OpFOrdLessThanEqual %bool %187 %189
OpSelectionMerge %193 None
OpBranchConditional %190 %191 %192
%191 = OpLabel
%194 = OpLoad %v3float %144
%195 = OpVectorShuffle %v3float %194 %194 0 2 1
OpStore %196 %195
%197 = OpLoad %float %sat
OpStore %198 %197
%199 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %196 %198
%200 = OpVectorShuffle %v3float %199 %199 0 2 1
OpReturnValue %200
%192 = OpLabel
%201 = OpLoad %v3float %144
%202 = OpVectorShuffle %v3float %201 %201 2 0 1
OpStore %203 %202
%204 = OpLoad %float %sat
OpStore %205 %204
%206 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %203 %205
%207 = OpVectorShuffle %v3float %206 %206 1 2 0
OpReturnValue %207
%193 = OpLabel
OpBranch %180
%180 = OpLabel
OpBranch %172
%171 = OpLabel
%208 = OpLoad %v3float %144
%209 = OpCompositeExtract %float %208 0
%210 = OpLoad %v3float %144
%211 = OpCompositeExtract %float %210 2
%212 = OpFOrdLessThanEqual %bool %209 %211
OpSelectionMerge %215 None
OpBranchConditional %212 %213 %214
%213 = OpLabel
%216 = OpLoad %v3float %144
%217 = OpVectorShuffle %v3float %216 %216 1 0 2
OpStore %218 %217
%219 = OpLoad %float %sat
OpStore %220 %219
%221 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %218 %220
%222 = OpVectorShuffle %v3float %221 %221 1 0 2
OpReturnValue %222
%214 = OpLabel
%223 = OpLoad %v3float %144
%224 = OpCompositeExtract %float %223 1
%225 = OpLoad %v3float %144
%226 = OpCompositeExtract %float %225 2
%227 = OpFOrdLessThanEqual %bool %224 %226
OpSelectionMerge %230 None
OpBranchConditional %227 %228 %229
%228 = OpLabel
%231 = OpLoad %v3float %144
%232 = OpVectorShuffle %v3float %231 %231 1 2 0
OpStore %233 %232
%234 = OpLoad %float %sat
OpStore %235 %234
%236 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %233 %235
%237 = OpVectorShuffle %v3float %236 %236 2 0 1
OpReturnValue %237
%229 = OpLabel
%238 = OpLoad %v3float %144
%239 = OpVectorShuffle %v3float %238 %238 2 1 0
OpStore %240 %239
%241 = OpLoad %float %sat
OpStore %242 %241
%243 = OpFunctionCall %v3float %blend_set_color_saturation_helper_Qh3h3h %240 %242
%244 = OpVectorShuffle %v3float %243 %243 2 1 0
OpReturnValue %244
%230 = OpLabel
OpBranch %215
%215 = OpLabel
OpBranch %172
%172 = OpLabel
OpUnreachable
OpFunctionEnd
%main = OpFunction %void None %246
%247 = OpLabel
%_0_alpha = OpVariable %_ptr_Function_float Function
%_1_sda = OpVariable %_ptr_Function_v3float Function
%_2_dsa = OpVariable %_ptr_Function_v3float Function
%277 = OpVariable %_ptr_Function_v3float Function
%279 = OpVariable %_ptr_Function_v3float Function
%281 = OpVariable %_ptr_Function_v3float Function
%283 = OpVariable %_ptr_Function_float Function
%285 = OpVariable %_ptr_Function_v3float Function
%249 = OpAccessChain %_ptr_Uniform_v4float %13 %int_1
%253 = OpLoad %v4float %249
%254 = OpCompositeExtract %float %253 3
%255 = OpAccessChain %_ptr_Uniform_v4float %13 %int_0
%257 = OpLoad %v4float %255
%258 = OpCompositeExtract %float %257 3
%259 = OpFMul %float %254 %258
OpStore %_0_alpha %259
%261 = OpAccessChain %_ptr_Uniform_v4float %13 %int_0
%262 = OpLoad %v4float %261
%263 = OpVectorShuffle %v3float %262 %262 0 1 2
%264 = OpAccessChain %_ptr_Uniform_v4float %13 %int_1
%265 = OpLoad %v4float %264
%266 = OpCompositeExtract %float %265 3
%267 = OpVectorTimesScalar %v3float %263 %266
OpStore %_1_sda %267
%269 = OpAccessChain %_ptr_Uniform_v4float %13 %int_1
%270 = OpLoad %v4float %269
%271 = OpVectorShuffle %v3float %270 %270 0 1 2
%272 = OpAccessChain %_ptr_Uniform_v4float %13 %int_0
%273 = OpLoad %v4float %272
%274 = OpCompositeExtract %float %273 3
%275 = OpVectorTimesScalar %v3float %271 %274
OpStore %_2_dsa %275
%276 = OpLoad %v3float %_2_dsa
OpStore %277 %276
%278 = OpLoad %v3float %_1_sda
OpStore %279 %278
%280 = OpFunctionCall %v3float %blend_set_color_saturation_Qh3h3h3 %277 %279
OpStore %281 %280
%282 = OpLoad %float %_0_alpha
OpStore %283 %282
%284 = OpLoad %v3float %_2_dsa
OpStore %285 %284
%286 = OpFunctionCall %v3float %blend_set_color_luminance_Qh3h3hh3 %281 %283 %285
%287 = OpAccessChain %_ptr_Uniform_v4float %13 %int_1
%288 = OpLoad %v4float %287
%289 = OpVectorShuffle %v3float %288 %288 0 1 2
%290 = OpFAdd %v3float %286 %289
%291 = OpLoad %v3float %_2_dsa
%292 = OpFSub %v3float %290 %291
%293 = OpAccessChain %_ptr_Uniform_v4float %13 %int_0
%294 = OpLoad %v4float %293
%295 = OpVectorShuffle %v3float %294 %294 0 1 2
%296 = OpFAdd %v3float %292 %295
%297 = OpLoad %v3float %_1_sda
%298 = OpFSub %v3float %296 %297
%299 = OpCompositeExtract %float %298 0
%300 = OpCompositeExtract %float %298 1
%301 = OpCompositeExtract %float %298 2
%302 = OpAccessChain %_ptr_Uniform_v4float %13 %int_0
%303 = OpLoad %v4float %302
%304 = OpCompositeExtract %float %303 3
%305 = OpAccessChain %_ptr_Uniform_v4float %13 %int_1
%306 = OpLoad %v4float %305
%307 = OpCompositeExtract %float %306 3
%308 = OpFAdd %float %304 %307
%309 = OpLoad %float %_0_alpha
%310 = OpFSub %float %308 %309
%311 = OpCompositeConstruct %v4float %299 %300 %301 %310
OpStore %sk_FragColor %311
OpReturn
OpFunctionEnd