#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
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_6, thread int* const tint_symbol_4, thread float4* const tint_symbol_5) {
  int a = 0;
  *(tint_symbol_4) = 0;
  while (true) {
    int const x_8 = *(tint_symbol_4);
    float const x_46 = x_6.injectionSwitch.x;
    if ((x_8 < int((x_46 + 2.0f)))) {
    } else {
      break;
    }
    int const x_9 = *(tint_symbol_4);
    *(tint_symbol_4) = (x_9 + 1);
  }
  int const x_11 = *(tint_symbol_4);
  a = x_11;
  while (true) {
    int const x_12 = *(tint_symbol_4);
    float const x_56 = x_6.injectionSwitch.y;
    if ((x_12 < int(x_56))) {
    } else {
      break;
    }
    int const x_13 = *(tint_symbol_4);
    *(tint_symbol_4) = (x_13 + 1);
  }
  int const x_15 = a;
  a = x_15;
  int const x_16 = a;
  if ((x_16 == 2)) {
    *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_5) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

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

