#include <metal_stdlib>
using namespace metal;

struct FragmentOutputs {
  int loc0;
  float frag_depth;
  uint loc1;
  float loc2;
  uint sample_mask;
  float4 loc3;
  half loc4;
  half3 loc5;
};

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)]];
  half FragmentOutputs_loc4 [[color(4)]];
  half3 FragmentOutputs_loc5 [[color(5)]];
};

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), .loc4=2.25h, .loc5=half3(3.0h, 5.0h, 8.0h)};
}

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, .FragmentOutputs_loc4=v.loc4, .FragmentOutputs_loc5=v.loc5};
}
