#include <metal_stdlib>

using namespace metal;
int3 tint_clamp(int3 e, int3 low, int3 high) {
  return min(max(e, low), high);
}

void clamp_5f0819(device packed_int3* const tint_symbol_1) {
  int3 arg_0 = int3(1);
  int3 arg_1 = int3(1);
  int3 arg_2 = int3(1);
  int3 res = tint_clamp(arg_0, arg_1, arg_2);
  *(tint_symbol_1) = packed_int3(res);
}

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

float4 vertex_main_inner(device packed_int3* const tint_symbol_2) {
  clamp_5f0819(tint_symbol_2);
  return float4(0.0f);
}

vertex tint_symbol vertex_main(device packed_int3* tint_symbol_3 [[buffer(0)]]) {
  float4 const inner_result = vertex_main_inner(tint_symbol_3);
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main(device packed_int3* tint_symbol_4 [[buffer(0)]]) {
  clamp_5f0819(tint_symbol_4);
  return;
}

kernel void compute_main(device packed_int3* tint_symbol_5 [[buffer(0)]]) {
  clamp_5f0819(tint_symbol_5);
  return;
}

