// 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/texture.glsl>
#include <impeller/types.glsl>

uniform sampler2D y_texture;
uniform sampler2D uv_texture;

// These values must correspond to the order of the items in the
// 'YUVColorSpace' enum class.
const float kBT601LimitedRange = 0;
const float kBT601FullRange = 1;

uniform FragInfo {
  float texture_sampler_y_coord_scale;
  mat4 matrix;
  float yuv_color_space;
}
frag_info;

in vec2 v_position;
out vec4 frag_color;

void main() {
  vec3 yuv;
  vec3 yuv_offset = vec3(0.0, 0.5, 0.5);
  if (frag_info.yuv_color_space == kBT601LimitedRange) {
    yuv_offset.x = 16.0 / 255.0;
  }

  yuv.x =
      IPSample(y_texture, v_position, frag_info.texture_sampler_y_coord_scale)
          .r;
  yuv.yz =
      IPSample(uv_texture, v_position, frag_info.texture_sampler_y_coord_scale)
          .rg;
  frag_color = frag_info.matrix * vec4(yuv - yuv_offset, 1);
}
