SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

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

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

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

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


tint_mQ7t9w.metal:5:19: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(), arg_0.get_height(), arg_0.get_depth());
                  ^
tint_mQ7t9w.metal:5:38: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(), arg_0.get_height(), arg_0.get_depth());
                                     ^
tint_mQ7t9w.metal:5:58: error: use of undeclared identifier 'arg_0'
  int3 res = int3(arg_0.get_width(), arg_0.get_height(), arg_0.get_depth());
                                                         ^
3 errors generated.
