[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(0)]] var<uniform> x_24 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
  let x_79 : f32 = (*(a)).x;
  let x_81 : f32 = (*(b)).y;
  let x_84 : f32 = (*(b)).x;
  let x_86 : f32 = (*(a)).y;
  return ((x_79 * x_81) - (x_84 * x_86));
}

fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
  var x_90 : bool = false;
  var x_91 : i32;
  var pab : f32;
  var param : vec2<f32>;
  var param_1 : vec2<f32>;
  var pbc : f32;
  var param_2 : vec2<f32>;
  var param_3 : vec2<f32>;
  var pca : f32;
  var param_4 : vec2<f32>;
  var param_5 : vec2<f32>;
  var x_140 : bool;
  var x_168 : bool;
  var x_141_phi : bool;
  var x_169_phi : bool;
  var x_173_phi : i32;
  switch(0u) {
    default: {
      let x_95 : f32 = (*(p)).x;
      let x_97 : f32 = (*(a_1)).x;
      let x_100 : f32 = (*(p)).y;
      let x_102 : f32 = (*(a_1)).y;
      let x_106 : f32 = (*(b_1)).x;
      let x_107 : f32 = (*(a_1)).x;
      let x_110 : f32 = (*(b_1)).y;
      let x_111 : f32 = (*(a_1)).y;
      param = vec2<f32>((x_95 - x_97), (x_100 - x_102));
      param_1 = vec2<f32>((x_106 - x_107), (x_110 - x_111));
      let x_114 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
      pab = x_114;
      let x_115 : f32 = (*(p)).x;
      let x_116 : f32 = (*(b_1)).x;
      let x_118 : f32 = (*(p)).y;
      let x_119 : f32 = (*(b_1)).y;
      let x_123 : f32 = (*(c)).x;
      let x_124 : f32 = (*(b_1)).x;
      let x_127 : f32 = (*(c)).y;
      let x_128 : f32 = (*(b_1)).y;
      param_2 = vec2<f32>((x_115 - x_116), (x_118 - x_119));
      param_3 = vec2<f32>((x_123 - x_124), (x_127 - x_128));
      let x_131 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
      pbc = x_131;
      let x_134 : bool = ((x_114 < 0.0) & (x_131 < 0.0));
      x_141_phi = x_134;
      if (!(x_134)) {
        x_140 = ((x_114 >= 0.0) & (x_131 >= 0.0));
        x_141_phi = x_140;
      }
      let x_141 : bool = x_141_phi;
      if (!(x_141)) {
        x_90 = true;
        x_91 = 0;
        x_173_phi = 0;
        break;
      }
      let x_145 : f32 = (*(p)).x;
      let x_146 : f32 = (*(c)).x;
      let x_148 : f32 = (*(p)).y;
      let x_149 : f32 = (*(c)).y;
      let x_152 : f32 = (*(a_1)).x;
      let x_153 : f32 = (*(c)).x;
      let x_155 : f32 = (*(a_1)).y;
      let x_156 : f32 = (*(c)).y;
      param_4 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
      param_5 = vec2<f32>((x_152 - x_153), (x_155 - x_156));
      let x_159 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
      pca = x_159;
      let x_162 : bool = ((x_114 < 0.0) & (x_159 < 0.0));
      x_169_phi = x_162;
      if (!(x_162)) {
        x_168 = ((x_114 >= 0.0) & (x_159 >= 0.0));
        x_169_phi = x_168;
      }
      let x_169 : bool = x_169_phi;
      if (!(x_169)) {
        x_90 = true;
        x_91 = 0;
        x_173_phi = 0;
        break;
      }
      x_90 = true;
      x_91 = 1;
      x_173_phi = 1;
    }
  }
  let x_173 : i32 = x_173_phi;
  return x_173;
}

fn main_1() {
  var pos : vec2<f32>;
  var param_6 : vec2<f32>;
  var param_7 : vec2<f32>;
  var param_8 : vec2<f32>;
  var param_9 : vec2<f32>;
  let x_67 : vec4<f32> = gl_FragCoord;
  let x_70 : vec2<f32> = x_24.resolution;
  let x_71 : vec2<f32> = (vec2<f32>(x_67.x, x_67.y) / x_70);
  pos = x_71;
  param_6 = x_71;
  param_7 = vec2<f32>(0.699999988, 0.300000012);
  param_8 = vec2<f32>(0.5, 0.899999976);
  param_9 = vec2<f32>(0.100000001, 0.400000006);
  let x_72 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_72 == 1)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
