#include <metal_stdlib>

using namespace metal;
struct VertexInputs {
  uint vertex_index;
  uint instance_index;
};
struct tint_symbol_1 {
  float4 value [[position]];
};

float4 tint_symbol_inner(VertexInputs inputs) {
  uint const foo = (inputs.vertex_index + inputs.instance_index);
  return float4();
}

vertex tint_symbol_1 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]]) {
  VertexInputs const tint_symbol_2 = {.vertex_index=vertex_index, .instance_index=instance_index};
  float4 const inner_result = tint_symbol_inner(tint_symbol_2);
  tint_symbol_1 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

