#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_2_1;
};
struct tint_symbol_2 {
  float4 x_1_param [[attribute(9)]];
  float4 x_1_param_1 [[attribute(10)]];
};
struct tint_symbol_3 {
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(float4 x_1_param, float4 x_1_param_1, thread float2x4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  (*(tint_symbol_5))[0] = x_1_param;
  (*(tint_symbol_5))[1] = x_1_param_1;
  main_1();
  main_out const tint_symbol_4 = {.x_2_1=*(tint_symbol_6)};
  return tint_symbol_4;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float2x4 tint_symbol_7 = float2x4(0.0f);
  thread float4 tint_symbol_8 = 0.0f;
  main_out const inner_result = tint_symbol_inner(tint_symbol_1.x_1_param, tint_symbol_1.x_1_param_1, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

