#include <metal_stdlib>

using namespace metal;
struct FragmentInputs0 {
  float4 position;
  int loc0;
};
struct FragmentInputs1 {
  float4 loc3;
  uint sample_mask;
};
struct tint_symbol_4 {
  int loc0 [[user(locn0)]];
  uint loc1 [[user(locn1)]];
  float loc2 [[user(locn2)]];
  float4 loc3 [[user(locn3)]];
};

fragment void tint_symbol(float4 tint_symbol_2 [[position]], bool front_facing [[front_facing]], uint sample_index [[sample_id]], uint tint_symbol_3 [[sample_mask]], tint_symbol_4 tint_symbol_1 [[stage_in]]) {
  FragmentInputs0 const inputs0 = {.position=tint_symbol_2, .loc0=tint_symbol_1.loc0};
  uint const loc1 = tint_symbol_1.loc1;
  FragmentInputs1 const inputs1 = {.loc3=tint_symbol_1.loc3, .sample_mask=tint_symbol_3};
  float const loc2 = tint_symbol_1.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;
  }
  return;
}

