struct S {
  float f;
  uint u;
  float4 v;
  float16_t x;
  vector<float16_t, 3> y;
};

RWByteAddressBuffer output : register(u0, space0);

struct tint_symbol_1 {
  float f : TEXCOORD0;
  nointerpolation uint u : TEXCOORD1;
  float16_t x : TEXCOORD2;
  vector<float16_t, 3> y : TEXCOORD3;
  float4 v : SV_Position;
};

void output_store(uint offset, S value) {
  output.Store((offset + 0u), asuint(value.f));
  output.Store((offset + 4u), asuint(value.u));
  output.Store4((offset + 128u), asuint(value.v));
  output.Store<float16_t>((offset + 160u), value.x);
  output.Store<vector<float16_t, 3> >((offset + 192u), value.y);
}

void frag_main_inner(S input) {
  const float f = input.f;
  const uint u = input.u;
  const float4 v = input.v;
  const float16_t x = input.x;
  const vector<float16_t, 3> y = input.y;
  output_store(0u, input);
}

void frag_main(tint_symbol_1 tint_symbol) {
  const S tint_symbol_2 = {tint_symbol.f, tint_symbol.u, tint_symbol.v, tint_symbol.x, tint_symbol.y};
  frag_main_inner(tint_symbol_2);
  return;
}
