#include <metal_stdlib>

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

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float4 const x_22 = *(tint_symbol_5);
  float2 const x_23 = float2(x_22.x, x_22.y);
  *(tint_symbol_6) = float4(x_23.x, x_23.y, 0.5f, 1.0f);
  return;
}

main_out tint_symbol_inner(float4 position_param, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  *(tint_symbol_7) = position_param;
  main_1(tint_symbol_7, tint_symbol_8);
  main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_8)};
  return tint_symbol_4;
}

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;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, &(tint_symbol_9), &(tint_symbol_10));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.gl_Position = inner_result.gl_Position;
  return wrapper_result;
}

