#include <metal_stdlib>
using namespace metal;

struct Out {
  float4 pos;
  float none;
  float flat;
  float perspective_center;
  float perspective_centroid;
  float perspective_sample;
  float linear_center;
  float linear_centroid;
  float linear_sample;
};

struct tint_symbol_outputs {
  float4 Out_pos [[position]];
  float Out_none [[user(locn0)]];
  float Out_flat [[user(locn1)]] [[flat]];
  float Out_perspective_center [[user(locn2)]] [[center_perspective]];
  float Out_perspective_centroid [[user(locn3)]] [[centroid_perspective]];
  float Out_perspective_sample [[user(locn4)]] [[sample_perspective]];
  float Out_linear_center [[user(locn5)]] [[center_no_perspective]];
  float Out_linear_centroid [[user(locn6)]] [[centroid_no_perspective]];
  float Out_linear_sample [[user(locn7)]] [[sample_no_perspective]];
};

Out tint_symbol_inner() {
  return Out{};
}

vertex tint_symbol_outputs tint_symbol() {
  Out const v = tint_symbol_inner();
  return tint_symbol_outputs{.Out_pos=v.pos, .Out_none=v.none, .Out_flat=v.flat, .Out_perspective_center=v.perspective_center, .Out_perspective_centroid=v.perspective_centroid, .Out_perspective_sample=v.perspective_sample, .Out_linear_center=v.linear_center, .Out_linear_centroid=v.linear_centroid, .Out_linear_sample=v.linear_sample};
}
