#include <metal_stdlib>
using namespace metal;

struct FragmentInputs {
  int loc0;
  uint loc1;
  float loc2;
  float4 loc3;
};

struct tint_symbol_inputs {
  int FragmentInputs_loc0 [[user(locn0)]] [[flat]];
  uint FragmentInputs_loc1 [[user(locn1)]] [[flat]];
  float FragmentInputs_loc2 [[user(locn2)]];
  float4 FragmentInputs_loc3 [[user(locn3)]];
};

void tint_symbol_inner(FragmentInputs inputs) {
  int const i = inputs.loc0;
  uint const u = inputs.loc1;
  float const f = inputs.loc2;
  float4 const v = inputs.loc3;
}

fragment void tint_symbol(tint_symbol_inputs inputs [[stage_in]]) {
  tint_symbol_inner(FragmentInputs{.loc0=inputs.FragmentInputs_loc0, .loc1=inputs.FragmentInputs_loc1, .loc2=inputs.FragmentInputs_loc2, .loc3=inputs.FragmentInputs_loc3});
}
