SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

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

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

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

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


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