// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <impeller/color.glsl>
#include <impeller/types.glsl>

// A color filter that applies the sRGB gamma curve to the color.
//
// This filter is used so that the colors are suitable for display in monitors.

uniform f16sampler2D input_texture;

uniform FragInfo {
  float16_t input_alpha;
}
frag_info;

in highp vec2 v_texture_coords;

out f16vec4 frag_color;

void main() {
  f16vec4 input_color =
      texture(input_texture, v_texture_coords) * frag_info.input_alpha;

  f16vec4 color = IPHalfUnpremultiply(input_color);
  for (int i = 0; i < 3; i++) {
    if (color[i] <= 0.0031308hf) {
      color[i] = (color[i]) * 12.92hf;
    } else {
      color[i] = 1.055hf * pow(color[i], (1.0hf / 2.4hf)) - 0.055hf;
    }
  }

  frag_color = IPHalfPremultiply(color);
}
