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

var<private> x_GLF_color : vec4<f32>;

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

fn computeColor_() -> vec3<f32> {
  var x_injected_loop_counter : i32;
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  x_injected_loop_counter = 1;
  loop {
    let x_38 : f32 = x_7.injectionSwitch.x;
    if ((x_38 > 1.0)) {
      let x_43 : f32 = x_7.injectionSwitch.x;
      if ((x_43 > 1.0)) {
        continue;
      } else {
        continue;
      }
      continue;
    }
    return vec3<f32>(1.0, 1.0, 1.0);
  }
  return vec3<f32>(0.0, 0.0, 0.0);
}

fn main_1() {
  let x_31 : vec3<f32> = computeColor_();
  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);
}
