#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  float arr[3];
};
struct main_out {
  float4 x_2_1;
};
struct tint_symbol_2 {
  float x_1_param [[attribute(4)]];
  float x_1_param_1 [[attribute(5)]];
  float x_1_param_2 [[attribute(6)]];
};
struct tint_symbol_3 {
  float4 x_2_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(float x_1_param, float x_1_param_1, float x_1_param_2, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6) {
  (*(tint_symbol_5)).arr[0] = x_1_param;
  (*(tint_symbol_5)).arr[1] = x_1_param_1;
  (*(tint_symbol_5)).arr[2] = x_1_param_2;
  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 tint_array_wrapper tint_symbol_7 = {};
  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_1.x_1_param_2, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_3 wrapper_result = {};
  wrapper_result.x_2_1 = inner_result.x_2_1;
  return wrapper_result;
}

