#include <metal_stdlib>

using namespace metal;
struct tint_symbol {
  float4 value [[position]];
};

void textureNumLayers_be3acb(texture2d_array<float, access::read> tint_symbol_2) {
  int res = int(tint_symbol_2.get_array_size());
}

vertex tint_symbol vertex_main(texture2d_array<float, access::read> tint_symbol_3 [[texture(0)]]) {
  textureNumLayers_be3acb(tint_symbol_3);
  tint_symbol const tint_symbol_1 = {.value=float4()};
  return tint_symbol_1;
}

fragment void fragment_main(texture2d_array<float, access::read> tint_symbol_4 [[texture(0)]]) {
  textureNumLayers_be3acb(tint_symbol_4);
  return;
}

kernel void compute_main(texture2d_array<float, access::read> tint_symbol_5 [[texture(0)]]) {
  textureNumLayers_be3acb(tint_symbol_5);
  return;
}

