SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

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

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

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

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


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