#include <metal_stdlib>

using namespace metal;
struct ComputeInputs {
  uint3 local_invocation_id;
  uint local_invocation_index;
  uint3 global_invocation_id;
  uint3 workgroup_id;
  uint3 num_workgroups;
};

void tint_symbol_inner(ComputeInputs inputs) {
  uint const foo = ((((inputs.local_invocation_id.x + inputs.local_invocation_index) + inputs.global_invocation_id.x) + inputs.workgroup_id.x) + inputs.num_workgroups.x);
}

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]], uint3 num_workgroups [[threadgroups_per_grid]]) {
  ComputeInputs const tint_symbol_1 = {.local_invocation_id=local_invocation_id, .local_invocation_index=local_invocation_index, .global_invocation_id=global_invocation_id, .workgroup_id=workgroup_id, .num_workgroups=num_workgroups};
  tint_symbol_inner(tint_symbol_1);
  return;
}

