#include <metal_stdlib>

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

int tint_clamp_1(int e, int low, int high) {
  return min(max(e, low), high);
}

uint4 textureLoad_34d97c(texture2d_array<uint, access::read_write> tint_symbol) {
  uint4 res = tint_symbol.read(uint2(tint_clamp(int2(1), int2(0), int2((uint2(tint_symbol.get_width(), tint_symbol.get_height()) - uint2(1u))))), tint_clamp_1(1, 0, int((tint_symbol.get_array_size() - 1u))));
  return res;
}

fragment void fragment_main(device uint4* tint_symbol_1 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_2 [[texture(0)]]) {
  *(tint_symbol_1) = textureLoad_34d97c(tint_symbol_2);
  return;
}

kernel void compute_main(device uint4* tint_symbol_3 [[buffer(0)]], texture2d_array<uint, access::read_write> tint_symbol_4 [[texture(0)]]) {
  *(tint_symbol_3) = textureLoad_34d97c(tint_symbol_4);
  return;
}

