#include <metal_stdlib>

using namespace metal;
struct FragmentInputs0 {
  float4 position;
  int loc0;
};

struct FragmentInputs1 {
  float4 loc3;
  uint sample_mask;
};

struct tint_symbol_2 {
  int loc0 [[user(locn0)]] [[flat]];
  uint loc1 [[user(locn1)]] [[flat]];
  float loc2 [[user(locn2)]];
  float4 loc3 [[user(locn3)]];
};

void tint_symbol_inner(FragmentInputs0 inputs0, bool front_facing, uint loc1, uint sample_index, FragmentInputs1 inputs1, float loc2) {
  if (front_facing) {
    float4 const foo = inputs0.position;
    uint const bar = (sample_index + inputs1.sample_mask);
    int const i = inputs0.loc0;
    uint const u = loc1;
    float const f = loc2;
    float4 const v = inputs1.loc3;
  }
}

fragment void tint_symbol(float4 position [[position]], bool front_facing [[front_facing]], uint sample_index [[sample_id]], uint sample_mask [[sample_mask]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  FragmentInputs0 const tint_symbol_3 = {.position=position, .loc0=tint_symbol_1.loc0};
  FragmentInputs1 const tint_symbol_4 = {.loc3=tint_symbol_1.loc3, .sample_mask=sample_mask};
  tint_symbol_inner(tint_symbol_3, front_facing, tint_symbol_1.loc1, sample_index, tint_symbol_4, tint_symbol_1.loc2);
  return;
}

