struct buf0 {
  injectionSwitch : vec2<f32>;
}

var<private> gl_FragCoord : vec4<f32>;

@group(0) @binding(0) var<uniform> x_7 : buf0;

var<private> x_GLF_color : vec4<f32>;

fn fx_() -> f32 {
  let x_50 : f32 = gl_FragCoord.y;
  if ((x_50 >= 0.0)) {
    let x_55 : f32 = x_7.injectionSwitch.y;
    return x_55;
  }
  loop {
    if (true) {
    } else {
      break;
    }
    x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
  }
  return 0.0;
}

fn main_1() {
  var x2 : f32;
  var B : f32;
  var k0 : f32;
  x2 = 1.0;
  B = 1.0;
  let x_34 : f32 = fx_();
  x_GLF_color = vec4<f32>(x_34, 0.0, 0.0, 1.0);
  loop {
    let x_40 : f32 = x2;
    if ((x_40 > 2.0)) {
    } else {
      break;
    }
    let x_43 : f32 = fx_();
    let x_44 : f32 = fx_();
    k0 = (x_43 - x_44);
    let x_46 : f32 = k0;
    B = x_46;
    let x_47 : f32 = B;
    x2 = x_47;
  }
  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);
}
