SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

using namespace metal;
void textureDimensions_2efa05() {
  int3 res = int3(arg_0.get_width(1), arg_0.get_height(1), arg_0.get_depth(1));
}

vertex void vertex_main() {
  textureDimensions_2efa05();
  return;
}

fragment void fragment_main() {
  textureDimensions_2efa05();
  return;
}

kernel void compute_main() {
  textureDimensions_2efa05();
  return;
}


tint_27jxuk.metal:5:19: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(1), arg_0.get_height(1), arg_0.get_depth(1));
                  ^
tint_27jxuk.metal:5:39: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(1), arg_0.get_height(1), arg_0.get_depth(1));
                                      ^
tint_27jxuk.metal:5:60: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(1), arg_0.get_height(1), arg_0.get_depth(1));
                                                           ^
3 errors generated.
