#include <metal_stdlib>

using namespace metal;
struct tint_padded_array_element {
  /* 0x0000 */ float el;
  /* 0x0004 */ int8_t tint_pad[12];
};
struct tint_array_wrapper {
  /* 0x0000 */ tint_padded_array_element arr[1];
};
struct buf0 {
  /* 0x0000 */ tint_array_wrapper x_GLF_uniform_float_values;
};
struct tint_padded_array_element_1 {
  /* 0x0000 */ int el;
  /* 0x0004 */ int8_t tint_pad_1[12];
};
struct tint_array_wrapper_1 {
  /* 0x0000 */ tint_padded_array_element_1 arr[2];
};
struct buf1 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
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_8, constant buf1& x_10, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float f0 = 0.0f;
  float f1 = 0.0f;
  f0 = NAN;
  float const x_35 = f0;
  f1 = fract(x_35);
  float const x_38 = (*(tint_symbol_5)).x;
  float const x_40 = x_8.x_GLF_uniform_float_values.arr[0].el;
  if ((x_38 > x_40)) {
    int const x_46 = x_10.x_GLF_uniform_int_values.arr[1].el;
    int const x_49 = x_10.x_GLF_uniform_int_values.arr[0].el;
    int const x_52 = x_10.x_GLF_uniform_int_values.arr[0].el;
    int const x_55 = x_10.x_GLF_uniform_int_values.arr[1].el;
    *(tint_symbol_6) = float4(float(x_46), float(x_49), float(x_52), float(x_55));
  } else {
    float const x_58 = f1;
    *(tint_symbol_6) = float4(x_58, x_58, x_58, x_58);
  }
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[buffer(0)]], constant buf1& x_10 [[buffer(1)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_8, x_10, &(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;
}

