[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

[[block]]
struct buf1 {
  injectionSwitch : vec2<f32>;
};

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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
  var x_104 : f32;
  var x_104_phi : f32;
  var x_107_phi : i32;
  x_104_phi = -0.5;
  x_107_phi = 1;
  loop {
    var x_126 : f32;
    var x_125 : f32;
    var x_108 : i32;
    var x_105_phi : f32;
    x_104 = x_104_phi;
    let x_107 : i32 = x_107_phi;
    if ((x_107 < 800)) {
    } else {
      break;
    }
    var x_124 : f32;
    var x_125_phi : f32;
    if (((x_107 % 32) == 0)) {
      x_126 = (x_104 + 0.400000006);
      x_105_phi = x_126;
    } else {
      let x_118 : f32 = *(thirty_two);
      x_125_phi = x_104;
      if (((f32(x_107) - (round(x_118) * floor((f32(x_107) / round(x_118))))) <= 0.01)) {
        x_124 = (x_104 + 100.0);
        x_125_phi = x_124;
      }
      x_125 = x_125_phi;
      x_105_phi = x_125;
    }
    var x_105 : f32;
    x_105 = x_105_phi;
    let x_128 : f32 = *(limit);
    if ((f32(x_107) >= x_128)) {
      return x_105;
    }

    continuing {
      x_108 = (x_107 + 1);
      x_104_phi = x_105;
      x_107_phi = x_108;
    }
  }
  return x_104;
}

fn main_1() {
  var c : vec3<f32>;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var x_54 : vec3<f32>;
  var x_74_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_56 : f32 = x_10.resolution.x;
  let x_58 : f32 = round((x_56 * 0.125));
  let x_60 : f32 = gl_FragCoord.x;
  param = x_60;
  param_1 = x_58;
  let x_61 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_61;
  let x_64 : f32 = gl_FragCoord.y;
  param_2 = x_64;
  param_3 = x_58;
  let x_65 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_65;
  let x_67 : f32 = c.x;
  let x_68 : vec3<f32> = c;
  x_54 = x_68;
  let x_70 : f32 = x_54.y;
  c.z = (x_67 + x_70);
  x_74_phi = 0;
  loop {
    var x_75 : i32;
    let x_74 : i32 = x_74_phi;
    if ((x_74 < 3)) {
    } else {
      break;
    }
    let x_81 : f32 = c[x_74];
    if ((x_81 >= 1.0)) {
      let x_86 : f32 = x_16.injectionSwitch.x;
      let x_88 : f32 = x_16.injectionSwitch.y;
      if ((x_86 > x_88)) {
        discard;
      }
      let x_92 : f32 = c[x_74];
      let x_93 : f32 = c[x_74];
      c[x_74] = (x_92 * x_93);
    }

    continuing {
      x_75 = (x_74 + 1);
      x_74_phi = x_75;
    }
  }
  let x_95 : vec3<f32> = c;
  let x_97 : vec3<f32> = normalize(abs(x_95));
  x_GLF_color = vec4<f32>(x_97.x, x_97.y, x_97.z, 1.0);
  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);
}
