#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[2];
};
struct buf1 {
  /* 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 buf0 {
  /* 0x0000 */ tint_array_wrapper_1 x_GLF_uniform_int_values;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf1& x_7, constant buf0& x_9, thread float4* const tint_symbol_4) {
  float a = 0.0f;
  float b = 0.0f;
  a = 1.0f;
  float const x_33 = x_7.x_GLF_uniform_float_values.arr[1].el;
  float const x_34 = a;
  b = clamp(x_33, select(0.0f, x_34, false), 1.0f);
  float const x_37 = b;
  float const x_39 = x_7.x_GLF_uniform_float_values.arr[1].el;
  if ((x_37 == x_39)) {
    float const x_44 = b;
    float const x_46 = x_7.x_GLF_uniform_float_values.arr[0].el;
    int const x_49 = x_9.x_GLF_uniform_int_values.arr[0].el;
    int const x_52 = x_9.x_GLF_uniform_int_values.arr[0].el;
    int const x_55 = x_9.x_GLF_uniform_int_values.arr[1].el;
    *(tint_symbol_4) = float4((x_44 * x_46), float(x_49), float(x_52), float(x_55));
  } else {
    int const x_59 = x_9.x_GLF_uniform_int_values.arr[0].el;
    float const x_60 = float(x_59);
    *(tint_symbol_4) = float4(x_60, x_60, x_60, x_60);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf1& x_7 [[buffer(1)]], constant buf0& x_9 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_7, x_9, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

