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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var i : i32;
  var value : i32;
  var y : f32;
  var x_31_phi : i32;
  i = 0;
  x_31_phi = 0;
  loop {
    let x_31 : i32 = x_31_phi;
    let x_37 : f32 = x_6.injectionSwitch.x;
    if ((x_31 < (2 + i32(x_37)))) {
    } else {
      break;
    }
    var x_55_phi : f32;
    var x_46_phi : f32;
    value = x_31;
    y = 0.5;
    x_55_phi = 0.5;
    x_46_phi = 0.5;
    switch(x_31) {
      case 0: {
        let x_54 : f32 = (0.5 + 0.5);
        y = x_54;
        x_55_phi = x_54;
        fallthrough;
      }
      case 1: {
        let x_55 : f32 = x_55_phi;
        let x_47 : f32 = clamp(1.0, 0.5, x_55);
        y = x_47;
        x_46_phi = x_47;
        fallthrough;
      }
      default: {
        fallthrough;
      }
      case 2: {
        let x_46 : f32 = x_46_phi;
        if ((x_46 == 1.0)) {
          x_GLF_color = vec4<f32>(f32((x_31 + 1)), 0.0, 0.0, 1.0);
          return;
        }
      }
    }

    continuing {
      let x_32 : i32 = (x_31 + 1);
      i = x_32;
      x_31_phi = x_32;
    }
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
