#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ int one;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

float4 func_(constant buf0& x_6) {
  int const x_48 = x_6.one;
  if ((x_48 == 1)) {
    return float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    return float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return float4(0.0f, 0.0f, 0.0f, 0.0f);
}

void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
  int i = 0;
  *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  i = 0;
  while (true) {
    int const x_33 = i;
    int const x_35 = x_6.one;
    if ((x_33 <= x_35)) {
    } else {
      break;
    }
    int const x_38 = i;
    switch(x_38) {
      case 1: {
        float4 const x_43 = func_(x_6);
        *(tint_symbol_4) = x_43;
        /* fallthrough */
      }
      default: {
        /* fallthrough */
      }
      case 0: {
        (*(tint_symbol_4)).y = 0.0f;
        break;
      }
    }
    {
      int const x_44 = i;
      i = (x_44 + 1);
    }
  }
  return;
}

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

