#include <metal_stdlib>

using namespace metal;
struct S {
  float field0;
  float field1;
};
struct tint_array_wrapper {
  float arr[2];
};
struct tint_symbol_2 {
  float x_1_param [[user(locn1)]] [[flat]];
  float x_1_param_1 [[user(locn2)]] [[flat]];
  float x_2_param [[user(locn5)]] [[flat]];
  float x_2_param_1 [[user(locn6)]] [[flat]];
};

void main_1() {
  return;
}

fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread tint_array_wrapper tint_symbol_3 = {};
  thread S tint_symbol_4 = {};
  float const x_1_param = tint_symbol_1.x_1_param;
  float const x_1_param_1 = tint_symbol_1.x_1_param_1;
  float const x_2_param = tint_symbol_1.x_2_param;
  float const x_2_param_1 = tint_symbol_1.x_2_param_1;
  tint_symbol_3.arr[0] = x_1_param;
  tint_symbol_3.arr[1] = x_1_param_1;
  tint_symbol_4.field0 = x_2_param;
  tint_symbol_4.field1 = x_2_param_1;
  main_1();
  return;
}

