SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

using namespace metal;
void textureDimensions_c7943d() {
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
}

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

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

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


tint_3yQidg.metal:5:19: error: use of undeclared identifier 'arg_0'
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
                  ^
tint_3yQidg.metal:5:38: error: use of undeclared identifier 'arg_0'
  int2 res = int2(arg_0.get_width(), arg_0.get_height());
                                     ^
2 errors generated.
