#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 gl_Position;
  uint pos_1;
};
struct tint_symbol_2 {
  float4 position_param [[attribute(0)]];
};
struct tint_symbol_3 {
  uint pos_1 [[user(locn0)]];
  float4 gl_Position [[position]];
};

void main_1(thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread uint* const tint_symbol_8) {
  float4 const x_22 = *(tint_symbol_6);
  *(tint_symbol_7) = x_22;
  *(tint_symbol_8) = 0u;
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread float4 tint_symbol_10 = 0.0f;
  thread uint tint_symbol_11 = 0u;
  float4 const position_param = tint_symbol_1.position_param;
  tint_symbol_9 = position_param;
  main_1(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
  main_out const tint_symbol_4 = {.gl_Position=tint_symbol_10, .pos_1=tint_symbol_11};
  tint_symbol_3 const tint_symbol_5 = {.pos_1=tint_symbol_4.pos_1, .gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

