#include <metal_stdlib>

using namespace metal;
struct ComputeInputs0 {
  uint3 local_invocation_id;
};

struct ComputeInputs1 {
  uint3 workgroup_id;
};

void tint_symbol_inner(ComputeInputs0 inputs0, uint local_invocation_index, uint3 global_invocation_id, ComputeInputs1 inputs1) {
  uint const foo = (((inputs0.local_invocation_id[0] + local_invocation_index) + global_invocation_id[0]) + inputs1.workgroup_id[0]);
}

kernel void tint_symbol(uint3 local_invocation_id [[thread_position_in_threadgroup]], uint local_invocation_index [[thread_index_in_threadgroup]], uint3 global_invocation_id [[thread_position_in_grid]], uint3 workgroup_id [[threadgroup_position_in_grid]]) {
  ComputeInputs0 const tint_symbol_1 = {.local_invocation_id=local_invocation_id};
  ComputeInputs1 const tint_symbol_2 = {.workgroup_id=workgroup_id};
  tint_symbol_inner(tint_symbol_1, local_invocation_index, global_invocation_id, tint_symbol_2);
  return;
}

