#include <metal_stdlib>
using namespace metal;

struct FragmentOutputs {
  int loc0;
  float frag_depth;
  uint loc1;
  float loc2;
  uint sample_mask;
  float4 loc3;
};

struct tint_symbol_outputs {
  int FragmentOutputs_loc0 [[color(0)]];
  float FragmentOutputs_frag_depth [[depth(any)]];
  uint FragmentOutputs_loc1 [[color(1)]];
  float FragmentOutputs_loc2 [[color(2)]];
  uint FragmentOutputs_sample_mask [[sample_mask]];
  float4 FragmentOutputs_loc3 [[color(3)]];
};

FragmentOutputs tint_symbol_inner() {
  return FragmentOutputs{.loc0=1, .frag_depth=2.0f, .loc1=1u, .loc2=1.0f, .sample_mask=2u, .loc3=float4(1.0f, 2.0f, 3.0f, 4.0f)};
}

fragment tint_symbol_outputs tint_symbol() {
  FragmentOutputs const v = tint_symbol_inner();
  return tint_symbol_outputs{.FragmentOutputs_loc0=v.loc0, .FragmentOutputs_frag_depth=v.frag_depth, .FragmentOutputs_loc1=v.loc1, .FragmentOutputs_loc2=v.loc2, .FragmentOutputs_sample_mask=v.sample_mask, .FragmentOutputs_loc3=v.loc3};
}
