intrinsics/gen/modf/3d00e2.wgsl:29:24 warning: use of deprecated intrinsic
  var res: vec4<f32> = modf(vec4<f32>(), &arg_1);
                       ^^^^

#include <metal_stdlib>

using namespace metal;

float4 tint_modf(float4 param_0, thread float4* param_1) {
  float4 whole;
  float4 fract = modf(param_0, whole);
  *param_1 = whole;
  return fract;
}

struct tint_symbol {
  float4 value [[position]];
};

void modf_3d00e2(thread float4* const tint_symbol_2) {
  float4 res = tint_modf(float4(), tint_symbol_2);
}

vertex tint_symbol vertex_main() {
  thread float4 tint_symbol_3 = 0.0f;
  modf_3d00e2(&(tint_symbol_3));
  tint_symbol const tint_symbol_1 = {.value=float4()};
  return tint_symbol_1;
}

fragment void fragment_main() {
  thread float4 tint_symbol_4 = 0.0f;
  modf_3d00e2(&(tint_symbol_4));
  return;
}

kernel void compute_main() {
  thread float4 tint_symbol_5 = 0.0f;
  modf_3d00e2(&(tint_symbol_5));
  return;
}

