#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;
}

