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

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

var<private> x_GLF_color : vec4<f32>;

fn makeFrame_() -> f32 {
  var x_60 : f32;
  var x_63_phi : f32;
  loop {
    var x_41 : bool;
    var x_44 : f32;
    var x_45 : f32;
    var x_42 : bool;
    var x_41_phi : bool;
    var x_8_phi : i32;
    var x_44_phi : f32;
    var x_60_phi : f32;
    var x_61_phi : bool;
    x_41_phi = false;
    x_8_phi = 0;
    x_44_phi = 0.0;
    loop {
      var x_50 : f32;
      var x_9 : i32;
      var x_52 : bool;
      var x_7 : i32;
      var x_50_phi : f32;
      var x_9_phi : i32;
      var x_52_phi : bool;
      var x_45_phi : f32;
      var x_42_phi : bool;
      x_41 = x_41_phi;
      let x_8 : i32 = x_8_phi;
      x_44 = x_44_phi;
      x_60_phi = x_44;
      x_61_phi = x_41;
      if ((x_8 < 1)) {
      } else {
        break;
      }
      x_50_phi = x_44;
      x_9_phi = x_8;
      x_52_phi = x_41;
      loop {
        x_50 = x_50_phi;
        x_9 = x_9_phi;
        x_52 = x_52_phi;
        let x_54 : f32 = x_6.injectionSwitch.y;
        x_45_phi = x_50;
        x_42_phi = x_52;
        if ((1 < i32(x_54))) {
        } else {
          break;
        }
        x_45_phi = 1.0;
        x_42_phi = true;
        break;

        continuing {
          x_50_phi = 0.0;
          x_9_phi = 0;
          x_52_phi = false;
        }
      }
      x_45 = x_45_phi;
      x_42 = x_42_phi;
      x_60_phi = x_45;
      x_61_phi = x_42;
      if (x_42) {
        break;
      }

      continuing {
        x_7 = bitcast<i32>((x_9 + bitcast<i32>(1)));
        x_41_phi = x_42;
        x_8_phi = x_7;
        x_44_phi = x_45;
      }
    }
    x_60 = x_60_phi;
    let x_61 : bool = x_61_phi;
    x_63_phi = x_60;
    if (x_61) {
      break;
    }
    x_63_phi = 1.0;
    break;
  }
  let x_63 : f32 = x_63_phi;
  return x_63;
}

fn main_1() {
  let x_34 : f32 = makeFrame_();
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  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);
}
