[[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);
}
