#include <metal_stdlib>

using namespace metal;
void textureNumLevels_f46ec6(texturecube_array<uint, access::sample> tint_symbol_1) {
  int res = int(tint_symbol_1.get_num_mip_levels());
}

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

float4 vertex_main_inner(texturecube_array<uint, access::sample> tint_symbol_2) {
  textureNumLevels_f46ec6(tint_symbol_2);
  return float4(0.0f);
}

vertex tint_symbol vertex_main(texturecube_array<uint, access::sample> tint_symbol_3 [[texture(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(texturecube_array<uint, access::sample> tint_symbol_4 [[texture(0)]]) {
  textureNumLevels_f46ec6(tint_symbol_4);
  return;
}

kernel void compute_main(texturecube_array<uint, access::sample> tint_symbol_5 [[texture(0)]]) {
  textureNumLevels_f46ec6(tint_symbol_5);
  return;
}

