#include <metal_stdlib>

using namespace metal;
struct FragmentOutputs {
  float frag_depth;
  uint sample_mask;
};

struct tint_symbol_1 {
  float frag_depth [[depth(any)]];
  uint sample_mask [[sample_mask]];
};

FragmentOutputs tint_symbol_inner() {
  FragmentOutputs const tint_symbol_2 = {.frag_depth=1.0f, .sample_mask=1u};
  return tint_symbol_2;
}

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

