#include <metal_stdlib>

using namespace metal;
struct S {
  /* 0x0000 */ float f;
  /* 0x0004 */ uint u;
  /* 0x0008 */ int8_t tint_pad[120];
  /* 0x0080 */ packed_float4 v;
  /* 0x0090 */ int8_t tint_pad_1[112];
};
struct tint_symbol_1 {
  float f [[user(locn0)]];
  uint u [[user(locn1)]];
};

void frag_main_inner(device S& output, S input) {
  float const f = input.f;
  uint const u = input.u;
  float4 const v = input.v;
  output = input;
}

fragment void frag_main(float4 v [[position]], tint_symbol_1 tint_symbol [[stage_in]], device S& output [[buffer(0)]]) {
  S const tint_symbol_2 = {.f=tint_symbol.f, .u=tint_symbol.u, .v=v};
  frag_main_inner(output, tint_symbol_2);
  return;
}

