SKIP: FAILED



Validation Failure:
#include <metal_stdlib>

using namespace metal;
void textureSampleGrad_872f00() {
  float4 res = arg_0.sample(arg_1, float2(), 1, gradient2d(float2(), float2()), int2());
}

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

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

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


tint_9yqds2.metal:5:16: error: use of undeclared identifier 'arg_0'
  float4 res = arg_0.sample(arg_1, float2(), 1, gradient2d(float2(), float2()), int2());
               ^
tint_9yqds2.metal:5:29: error: use of undeclared identifier 'arg_1'
  float4 res = arg_0.sample(arg_1, float2(), 1, gradient2d(float2(), float2()), int2());
                            ^
2 errors generated.
