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

struct buf1 {
  x_GLF_uniform_int_values : Arr;
};

type Arr_1 = [[stride(16)]] array<f32, 1>;

struct buf0 {
  x_GLF_uniform_float_values : Arr_1;
};

struct buf2 {
  injectionSwitch : vec2<f32>;
};

var<private> x_GLF_color : vec4<f32>;

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

var<private> gl_FragCoord : vec4<f32>;

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

[[group(0), binding(2)]] var<uniform> x_11 : buf2;

fn main_1() {
  var i : i32;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  let x_42 : i32 = x_7.x_GLF_uniform_int_values[1];
  i = x_42;
  loop {
    let x_47 : i32 = i;
    let x_49 : i32 = x_7.x_GLF_uniform_int_values[0];
    if ((x_47 < x_49)) {
    } else {
      break;
    }
    let x_52 : i32 = i;
    let x_54 : i32 = x_7.x_GLF_uniform_int_values[1];
    if ((x_52 != x_54)) {
      return;
    }

    continuing {
      let x_58 : i32 = i;
      i = (x_58 + 1);
    }
  }
  let x_61 : f32 = gl_FragCoord.y;
  let x_63 : f32 = x_9.x_GLF_uniform_float_values[0];
  if ((x_61 < x_63)) {
    return;
  }
  let x_68 : f32 = x_11.injectionSwitch.y;
  x_GLF_color = vec4<f32>(vec3<f32>(1.0, 1.0, 1.0).x, vec3<f32>(1.0, 1.0, 1.0).y, vec3<f32>(1.0, 1.0, 1.0).z, x_68);
  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);
}
