#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float4 func_(thread float4* const tint_symbol_5) {
  float x = 0.0f;
  x = 1.0f;
  float const x_30 = (*(tint_symbol_5)).x;
  if ((x_30 < 0.0f)) {
    x = 0.5f;
  }
  float const x_34 = x;
  return float4(x_34, 0.0f, 0.0f, 1.0f);
}

void main_1(thread float4* const tint_symbol_6, thread float4* const tint_symbol_7) {
  *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  while (true) {
    float4 const x_26 = func_(tint_symbol_7);
    *(tint_symbol_6) = x_26;
    if (false) {
    } else {
      break;
    }
  }
  return;
}

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

