#include <metal_stdlib>

using namespace metal;
struct VertexInputs0 {
  uint vertex_index;
  int loc0;
};

struct VertexInputs1 {
  uint loc1;
  float4 loc3;
};

struct tint_symbol_2 {
  int loc0 [[attribute(0)]];
  uint loc1 [[attribute(1)]];
  uint loc1_1 [[attribute(2)]];
  float4 loc3 [[attribute(3)]];
};

struct tint_symbol_3 {
  float4 value [[position]];
};

float4 tint_symbol_inner(VertexInputs0 inputs0, uint loc1, uint instance_index, VertexInputs1 inputs1) {
  uint const foo = (inputs0.vertex_index + instance_index);
  return float4(0.0f);
}

vertex tint_symbol_3 tint_symbol(uint vertex_index [[vertex_id]], uint instance_index [[instance_id]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  VertexInputs0 const tint_symbol_4 = {.vertex_index=vertex_index, .loc0=tint_symbol_1.loc0};
  VertexInputs1 const tint_symbol_5 = {.loc1=tint_symbol_1.loc1_1, .loc3=tint_symbol_1.loc3};
  float4 const inner_result = tint_symbol_inner(tint_symbol_4, tint_symbol_1.loc1, instance_index, tint_symbol_5);
  tint_symbol_3 wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

