#include <metal_stdlib>

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

void main_1(thread float3* const tint_symbol_6, thread float4* const tint_symbol_7) {
  float3 const x_21 = *(tint_symbol_6);
  *(tint_symbol_7) = float4(x_21.x, x_21.y, x_21.z, 1.0f);
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float3 tint_symbol_8 = 0.0f;
  thread float4 tint_symbol_9 = 0.0f;
  float3 const position_param = tint_symbol_1.position_param;
  tint_symbol_8 = position_param;
  main_1(&(tint_symbol_8), &(tint_symbol_9));
  main_out const tint_symbol_4 = {.gl_Position=tint_symbol_9};
  tint_symbol_3 const tint_symbol_5 = {.gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

