#include <metal_stdlib>

using namespace metal;
struct S {
  int f0;
  bool3 f1;
};
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  float arr[9];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, thread float4* const tint_symbol_5) {
  S ll = {};
  tint_array_wrapper sums = {};
  S const tint_symbol_3 = {.f0=0, .f1=bool3(true, true, true)};
  ll = tint_symbol_3;
  while (true) {
    S const x_12 = ll;
    float const x_45 = x_7.injectionSwitch.y;
    if ((x_12.f0 != int(x_45))) {
    } else {
      break;
    }
    sums.arr[0] = 0.0f;
    {
      S const x_13 = ll;
      S const x_50 = ll;
      S x_51_1 = x_50;
      x_51_1.f0 = as_type<int>((as_type<uint>(x_13.f0) + as_type<uint>(1)));
      S const x_51 = x_51_1;
      ll = x_51;
    }
  }
  float const x_53 = sums.arr[0];
  float2 const x_54 = float2(x_53, x_53);
  *(tint_symbol_5) = float4(1.0f, x_54.x, x_54.y, 1.0f);
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_6 = 0.0f;
  main_1(x_7, &(tint_symbol_6));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_6};
  tint_symbol_1 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_4;
}

