#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 = INFINITY;
  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;
}

