type Arr = [[stride(16)]] array<f32, 2>;

[[block]]
struct buf0 {
  x_GLF_uniform_float_values : Arr;
};

type Arr_1 = [[stride(16)]] array<i32, 3>;

[[block]]
struct buf1 {
  x_GLF_uniform_int_values : Arr_1;
};

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

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : f32;
  var b : f32;
  var c : f32;
  var i : i32;
  let x_35 : f32 = x_6.x_GLF_uniform_float_values[1];
  a = x_35;
  let x_37 : f32 = x_6.x_GLF_uniform_float_values[1];
  b = x_37;
  let x_39 : f32 = x_6.x_GLF_uniform_float_values[1];
  c = x_39;
  let x_41 : i32 = x_11.x_GLF_uniform_int_values[1];
  i = x_41;
  loop {
    let x_46 : i32 = i;
    let x_48 : i32 = x_11.x_GLF_uniform_int_values[0];
    if ((x_46 < x_48)) {
    } else {
      break;
    }
    let x_51 : i32 = i;
    let x_53 : i32 = x_11.x_GLF_uniform_int_values[2];
    if ((x_51 == x_53)) {
      let x_57 : f32 = a;
      let x_60 : f32 = x_6.x_GLF_uniform_float_values[1];
      b = (dpdx(x_57) + x_60);
    }
    let x_62 : f32 = a;
    c = dpdx(x_62);
    let x_64 : f32 = c;
    let x_65 : f32 = b;
    a = (x_64 / x_65);

    continuing {
      let x_67 : i32 = i;
      i = (x_67 + 1);
    }
  }
  let x_69 : f32 = a;
  let x_71 : f32 = x_6.x_GLF_uniform_float_values[0];
  if ((x_69 == x_71)) {
    let x_77 : i32 = x_11.x_GLF_uniform_int_values[2];
    let x_80 : i32 = x_11.x_GLF_uniform_int_values[1];
    let x_83 : i32 = x_11.x_GLF_uniform_int_values[1];
    let x_86 : i32 = x_11.x_GLF_uniform_int_values[2];
    x_GLF_color = vec4<f32>(f32(x_77), f32(x_80), f32(x_83), f32(x_86));
  } else {
    let x_90 : i32 = x_11.x_GLF_uniform_int_values[1];
    let x_91 : f32 = f32(x_90);
    x_GLF_color = vec4<f32>(x_91, x_91, x_91, x_91);
  }
  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);
}
