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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
  let x_85 : f32 = (*(a)).x;
  let x_87 : f32 = (*(b)).y;
  let x_90 : f32 = (*(b)).x;
  let x_92 : f32 = (*(a)).y;
  return ((x_85 * x_87) - (x_90 * x_92));
}

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 var_y : f32;
  var x_96 : f32;
  var x_97 : f32;
  var clamp_y : f32;
  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_173 : bool;
  var x_205 : bool;
  var x_174_phi : bool;
  var x_206_phi : bool;
  let x_99 : f32 = x_15.resolution.x;
  let x_101 : f32 = x_15.resolution.y;
  if ((x_99 == x_101)) {
    let x_106 : ptr<function, f32> = &((*(c)).y);
    let x_107 : f32 = *(x_106);
    let x_108 : vec2<f32> = vec2<f32>(0.0, x_107);
    if (true) {
      let x_112 : f32 = *(x_106);
      x_97 = x_112;
    } else {
      x_97 = 1.0;
    }
    let x_113 : f32 = x_97;
    let x_114 : f32 = *(x_106);
    let x_116 : vec2<f32> = vec2<f32>(1.0, max(x_113, x_114));
    let x_117 : vec2<f32> = vec2<f32>(x_108.x, x_108.y);
    x_96 = x_107;
  } else {
    x_96 = -1.0;
  }
  let x_118 : f32 = x_96;
  var_y = x_118;
  let x_119 : ptr<function, f32> = &((*(c)).y);
  let x_120 : f32 = *(x_119);
  let x_121 : f32 = *(x_119);
  let x_122 : f32 = var_y;
  clamp_y = clamp(x_120, x_121, x_122);
  let x_124 : ptr<function, f32> = &((*(p)).x);
  let x_125 : f32 = *(x_124);
  let x_126 : ptr<function, f32> = &((*(a_1)).x);
  let x_127 : f32 = *(x_126);
  let x_129 : ptr<function, f32> = &((*(p)).y);
  let x_130 : f32 = *(x_129);
  let x_131 : ptr<function, f32> = &((*(a_1)).y);
  let x_132 : f32 = *(x_131);
  let x_135 : ptr<function, f32> = &((*(b_1)).x);
  let x_136 : f32 = *(x_135);
  let x_137 : f32 = *(x_126);
  let x_139 : ptr<function, f32> = &((*(b_1)).y);
  let x_140 : f32 = *(x_139);
  let x_141 : f32 = *(x_131);
  param = vec2<f32>((x_125 - x_127), (x_130 - x_132));
  param_1 = vec2<f32>((x_136 - x_137), (x_140 - x_141));
  let x_144 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
  pab = x_144;
  let x_145 : f32 = *(x_124);
  let x_146 : f32 = *(x_135);
  let x_148 : f32 = *(x_129);
  let x_149 : f32 = *(x_139);
  let x_152 : ptr<function, f32> = &((*(c)).x);
  let x_153 : f32 = *(x_152);
  let x_154 : f32 = *(x_135);
  let x_156 : f32 = clamp_y;
  let x_157 : f32 = *(x_139);
  param_2 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
  param_3 = vec2<f32>((x_153 - x_154), (x_156 - x_157));
  let x_160 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
  pbc = x_160;
  let x_161 : f32 = pab;
  let x_163 : f32 = pbc;
  let x_165 : bool = ((x_161 < 0.0) & (x_163 < 0.0));
  x_174_phi = x_165;
  if (!(x_165)) {
    let x_169 : f32 = pab;
    let x_171 : f32 = pbc;
    x_173 = ((x_169 >= 0.0) & (x_171 >= 0.0));
    x_174_phi = x_173;
  }
  let x_174 : bool = x_174_phi;
  if (!(x_174)) {
    return 0;
  }
  let x_178 : f32 = *(x_124);
  let x_179 : f32 = *(x_152);
  let x_181 : f32 = *(x_129);
  let x_182 : f32 = *(x_119);
  let x_185 : f32 = *(x_126);
  let x_186 : f32 = *(x_152);
  let x_188 : f32 = *(x_131);
  let x_189 : f32 = *(x_119);
  param_4 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
  param_5 = vec2<f32>((x_185 - x_186), (x_188 - x_189));
  let x_192 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
  pca = x_192;
  let x_193 : f32 = pab;
  let x_195 : f32 = pca;
  let x_197 : bool = ((x_193 < 0.0) & (x_195 < 0.0));
  x_206_phi = x_197;
  if (!(x_197)) {
    let x_201 : f32 = pab;
    let x_203 : f32 = pca;
    x_205 = ((x_201 >= 0.0) & (x_203 >= 0.0));
    x_206_phi = x_205;
  }
  let x_206 : bool = x_206_phi;
  if (!(x_206)) {
    return 0;
  }
  return 1;
}

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_72 : vec4<f32> = gl_FragCoord;
  let x_75 : vec2<f32> = x_15.resolution;
  pos = (vec2<f32>(x_72.x, x_72.y) / x_75);
  let x_77 : vec2<f32> = pos;
  param_6 = x_77;
  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_78 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_78 == 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);
}
