#include <metal_stdlib>

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

struct FragmentInputs1 {
  float4 loc3;
  half3 loc5;
  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)]];
  half loc4 [[user(locn4)]];
  half3 loc5 [[user(locn5)]];
};

void tint_symbol_inner(FragmentInputs0 inputs0, bool front_facing, uint loc1, uint sample_index, FragmentInputs1 inputs1, float loc2, half loc4) {
  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;
    half const x = loc4;
    half3 const y = inputs1.loc5;
  }
}

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, .loc5=tint_symbol_1.loc5, .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, tint_symbol_1.loc4);
  return;
}

