[[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_94 : ptr<function, f32> = &((*(p)).x);
      let x_95 : f32 = *(x_94);
      let x_96 : ptr<function, f32> = &((*(a_1)).x);
      let x_97 : f32 = *(x_96);
      let x_99 : ptr<function, f32> = &((*(p)).y);
      let x_100 : f32 = *(x_99);
      let x_101 : ptr<function, f32> = &((*(a_1)).y);
      let x_102 : f32 = *(x_101);
      let x_105 : ptr<function, f32> = &((*(b_1)).x);
      let x_106 : f32 = *(x_105);
      let x_107 : f32 = *(x_96);
      let x_109 : ptr<function, f32> = &((*(b_1)).y);
      let x_110 : f32 = *(x_109);
      let x_111 : f32 = *(x_101);
      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 = *(x_94);
      let x_116 : f32 = *(x_105);
      let x_118 : f32 = *(x_99);
      let x_119 : f32 = *(x_109);
      let x_122 : ptr<function, f32> = &((*(c)).x);
      let x_123 : f32 = *(x_122);
      let x_124 : f32 = *(x_105);
      let x_126 : ptr<function, f32> = &((*(c)).y);
      let x_127 : f32 = *(x_126);
      let x_128 : f32 = *(x_109);
      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 = *(x_94);
      let x_146 : f32 = *(x_122);
      let x_148 : f32 = *(x_99);
      let x_149 : f32 = *(x_126);
      let x_152 : f32 = *(x_96);
      let x_153 : f32 = *(x_122);
      let x_155 : f32 = *(x_101);
      let x_156 : f32 = *(x_126);
      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);
}
