struct buf1 {
  one : u32;
};

type Arr = [[stride(16)]] array<i32, 1>;

struct buf0 {
  x_GLF_uniform_int_values : Arr;
};

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(1)]] var<uniform> x_8 : buf1;

var<private> x_GLF_color : vec4<f32>;

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

fn func_() -> f32 {
  switch(1) {
    case 0: {
      return 1.0;
    }
    default: {
    }
  }
  return 0.0;
}

fn main_1() {
  var v : vec4<f32>;
  v = vec4<f32>(1.0, 1.0, 1.0, 1.0);
  let x_38 : f32 = gl_FragCoord.y;
  if ((x_38 < 0.0)) {
    let x_42 : f32 = func_();
    v = vec4<f32>(x_42, x_42, x_42, x_42);
  }
  let x_44 : vec4<f32> = v;
  if ((pack4x8unorm(x_44) == 1u)) {
    return;
  }
  let x_50 : u32 = x_8.one;
  if (((1u << x_50) == 2u)) {
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  } else {
    let x_57 : i32 = x_10.x_GLF_uniform_int_values[0];
    let x_58 : f32 = f32(x_57);
    x_GLF_color = vec4<f32>(x_58, x_58, x_58, x_58);
  }
  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);
}
