#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_1 {
  int loc0 [[color(0)]];
  uint loc1 [[color(1)]];
  float loc2 [[color(2)]];
  float4 loc3 [[color(3)]];
  float frag_depth [[depth(any)]];
  uint sample_mask [[sample_mask]];
};

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

fragment tint_symbol_1 tint_symbol() {
  FragmentOutputs const inner_result = tint_symbol_inner();
  tint_symbol_1 wrapper_result = {};
  wrapper_result.loc0 = inner_result.loc0;
  wrapper_result.frag_depth = inner_result.frag_depth;
  wrapper_result.loc1 = inner_result.loc1;
  wrapper_result.loc2 = inner_result.loc2;
  wrapper_result.sample_mask = inner_result.sample_mask;
  wrapper_result.loc3 = inner_result.loc3;
  return wrapper_result;
}

