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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
  var x_66 : f32;
  var x_67 : f32;
  var x_68 : f32;
  var param : vec2<f32>;
  var param_1 : vec2<f32>;
  var param_2 : vec2<f32>;
  var param_3 : vec2<f32>;
  var param_4 : vec2<f32>;
  var param_5 : vec2<f32>;
  var x_135 : bool;
  var x_172 : bool;
  var x_136_phi : bool;
  var x_173_phi : bool;
  let x_69 : ptr<function, f32> = &((*(p)).x);
  let x_70 : f32 = *(x_69);
  let x_71 : ptr<function, f32> = &((*(a)).x);
  let x_72 : f32 = *(x_71);
  let x_74 : ptr<function, f32> = &((*(p)).y);
  let x_75 : f32 = *(x_74);
  let x_76 : ptr<function, f32> = &((*(a)).y);
  let x_77 : f32 = *(x_76);
  let x_80 : ptr<function, f32> = &((*(b)).x);
  let x_81 : f32 = *(x_80);
  let x_82 : f32 = *(x_71);
  let x_84 : ptr<function, f32> = &((*(b)).y);
  let x_85 : f32 = *(x_84);
  let x_86 : f32 = *(x_76);
  param = vec2<f32>((x_70 - x_72), (x_75 - x_77));
  param_1 = vec2<f32>((x_81 - x_82), (x_85 - x_86));
  let x_90 : f32 = param.x;
  let x_92 : f32 = param_1.y;
  let x_95 : f32 = param_1.x;
  let x_97 : f32 = param.y;
  let x_99 : f32 = ((x_90 * x_92) - (x_95 * x_97));
  x_68 = x_99;
  let x_100 : f32 = *(x_69);
  let x_101 : f32 = *(x_80);
  let x_103 : f32 = *(x_74);
  let x_104 : f32 = *(x_84);
  let x_107 : ptr<function, f32> = &((*(c)).x);
  let x_108 : f32 = *(x_107);
  let x_109 : f32 = *(x_80);
  let x_111 : ptr<function, f32> = &((*(c)).y);
  let x_112 : f32 = *(x_111);
  let x_113 : f32 = *(x_84);
  param_2 = vec2<f32>((x_100 - x_101), (x_103 - x_104));
  param_3 = vec2<f32>((x_108 - x_109), (x_112 - x_113));
  let x_117 : f32 = param_2.x;
  let x_119 : f32 = param_3.y;
  let x_122 : f32 = param_3.x;
  let x_124 : f32 = param_2.y;
  let x_126 : f32 = ((x_117 * x_119) - (x_122 * x_124));
  x_67 = x_126;
  let x_127 : bool = (x_99 < 0.0);
  let x_129 : bool = (x_127 & (x_126 < 0.0));
  x_136_phi = x_129;
  if (!(x_129)) {
    x_135 = ((x_99 >= 0.0) & (x_126 >= 0.0));
    x_136_phi = x_135;
  }
  let x_136 : bool = x_136_phi;
  if (!(x_136)) {
    return 0;
  }
  let x_140 : f32 = *(x_69);
  let x_141 : f32 = *(x_107);
  let x_143 : f32 = *(x_74);
  let x_144 : f32 = *(x_111);
  let x_147 : f32 = *(x_71);
  let x_148 : f32 = *(x_107);
  let x_150 : f32 = *(x_76);
  let x_151 : f32 = *(x_111);
  param_4 = vec2<f32>((x_140 - x_141), (x_143 - x_144));
  param_5 = vec2<f32>((x_147 - x_148), (x_150 - x_151));
  let x_155 : f32 = param_4.x;
  let x_157 : f32 = param_5.y;
  let x_160 : f32 = param_5.x;
  let x_162 : f32 = param_4.y;
  let x_164 : f32 = ((x_155 * x_157) - (x_160 * x_162));
  x_66 = x_164;
  let x_166 : bool = (x_127 & (x_164 < 0.0));
  x_173_phi = x_166;
  if (!(x_166)) {
    x_172 = ((x_99 >= 0.0) & (x_164 >= 0.0));
    x_173_phi = x_172;
  }
  let x_173 : bool = x_173_phi;
  if (!(x_173)) {
    return 0;
  }
  return 1;
}

fn main_1() {
  var param_6 : vec2<f32>;
  var param_7 : vec2<f32>;
  var param_8 : vec2<f32>;
  var param_9 : vec2<f32>;
  let x_55 : vec4<f32> = gl_FragCoord;
  let x_58 : vec2<f32> = x_17.resolution;
  param_6 = (vec2<f32>(x_55.x, x_55.y) / x_58);
  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_60 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_60 == 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);
}
