#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 color_out_1;
  float gl_FragDepth_1;
};
struct tint_symbol_1 {
  float4 color_out_1 [[color(0)]];
  float gl_FragDepth_1 [[depth(any)]];
};

void main_1(thread float4* const tint_symbol_4, thread float* const tint_symbol_5) {
  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  *(tint_symbol_5) = 0.5f;
  return;
}

fragment tint_symbol_1 tint_symbol() {
  thread float4 tint_symbol_6 = 0.0f;
  thread float tint_symbol_7 = 0.0f;
  main_1(&(tint_symbol_6), &(tint_symbol_7));
  main_out const tint_symbol_2 = {.color_out_1=tint_symbol_6, .gl_FragDepth_1=tint_symbol_7};
  tint_symbol_1 const tint_symbol_3 = {.color_out_1=tint_symbol_2.color_out_1, .gl_FragDepth_1=tint_symbol_2.gl_FragDepth_1};
  return tint_symbol_3;
}

