#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
constant const half sk_PrivkGuardedDivideEpsilon = half(false ? 1e-08 : 0.0);
struct Uniforms {
    half4 src;
    half4 dst;
};
struct Inputs {
};
struct Outputs {
    half4 sk_FragColor [[color(0)]];
};
half soft_light_component_Qhh2h2(half2 s, half2 d);
half soft_light_component_Qhh2h2(half2 s, half2 d) {
    if (2.0h * s.x <= s.y) {
        return (((d.x * d.x) * (s.y - 2.0h * s.x)) / (d.y + sk_PrivkGuardedDivideEpsilon) + (1.0h - d.y) * s.x) + d.x * ((-s.y + 2.0h * s.x) + 1.0h);
    } else if (4.0h * d.x <= d.y) {
        half DSqd = d.x * d.x;
        half DCub = DSqd * d.x;
        half DaSqd = d.y * d.y;
        half DaCub = DaSqd * d.y;
        return (((DaSqd * (s.x - d.x * ((3.0h * s.y - 6.0h * s.x) - 1.0h)) + ((12.0h * d.y) * DSqd) * (s.y - 2.0h * s.x)) - (16.0h * DCub) * (s.y - 2.0h * s.x)) - DaCub * s.x) / (DaSqd + sk_PrivkGuardedDivideEpsilon);
    } else {
        return ((d.x * ((s.y - 2.0h * s.x) + 1.0h) + s.x) - sqrt(d.y * d.x) * (s.y - 2.0h * s.x)) - d.y * s.x;
    }
}
fragment Outputs fragmentMain(Inputs _in [[stage_in]], constant Uniforms& _uniforms [[buffer(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) {
    Outputs _out;
    (void)_out;
    _out.sk_FragColor = _uniforms.dst.w == 0.0h ? _uniforms.src : half4(soft_light_component_Qhh2h2(_uniforms.src.xw, _uniforms.dst.xw), soft_light_component_Qhh2h2(_uniforms.src.yw, _uniforms.dst.yw), soft_light_component_Qhh2h2(_uniforms.src.zw, _uniforms.dst.zw), _uniforms.src.w + (1.0h - _uniforms.src.w) * _uniforms.dst.w);
    return _out;
}
