#include <metal_stdlib>

using namespace metal;
struct S {
  float field0;
  float field1;
  float field2;
  float field3;
  float field4;
  float field5;
};
struct tint_symbol_2 {
  float x_1_param [[user(locn1)]];
  float x_1_param_1 [[user(locn2)]] [[centroid_perspective]];
  float x_1_param_2 [[user(locn3)]] [[sample_perspective]];
  float x_1_param_3 [[user(locn4)]] [[no_perspective]];
  float x_1_param_4 [[user(locn5)]] [[centroid_no_perspective]];
  float x_1_param_5 [[user(locn6)]] [[sample_no_perspective]];
};

void main_1() {
  return;
}

void tint_symbol_inner(float x_1_param, float x_1_param_1, float x_1_param_2, float x_1_param_3, float x_1_param_4, float x_1_param_5, thread S* const tint_symbol_3) {
  (*(tint_symbol_3)).field0 = x_1_param;
  (*(tint_symbol_3)).field1 = x_1_param_1;
  (*(tint_symbol_3)).field2 = x_1_param_2;
  (*(tint_symbol_3)).field3 = x_1_param_3;
  (*(tint_symbol_3)).field4 = x_1_param_4;
  (*(tint_symbol_3)).field5 = x_1_param_5;
  main_1();
}

fragment void tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread S tint_symbol_4 = {};
  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_1.x_1_param_3, tint_symbol_1.x_1_param_4, tint_symbol_1.x_1_param_5, &(tint_symbol_4));
  return;
}

