#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_6, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  bool x_30 = false;
  float x_47 = 0.0f;
  float const x_29 = x_6.injectionSwitch.x;
  x_30 = (x_29 > 1.0f);
  if (x_30) {
    while (true) {
      float x_47_phi = 0.0f;
      while (true) {
        float const x_41 = (*(tint_symbol_5)).x;
        if ((x_41 < 0.0f)) {
          if (x_30) {
            x_47_phi = 1.0f;
            break;
          } else {
            continue;
          }
          continue;
        }
        x_47_phi = 0.0f;
        break;
      }
      x_47 = x_47_phi;
      break;
    }
    float4 x_48_1 = float4(0.0f, 0.0f, 0.0f, 0.0f);
    x_48_1.y = x_47;
    float4 const x_48 = x_48_1;
    *(tint_symbol_6) = x_48;
  }
  *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

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

