#include <metal_stdlib>

using namespace metal;
struct tint_symbol {
  float4 value [[position]];
};

void textureSampleGrad_e9a2f7(texture3d<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
  float4 res = tint_symbol_2.sample(tint_symbol_3, float3(), gradient3d(float3(), float3()), int3());
}

vertex tint_symbol vertex_main(texture3d<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
  textureSampleGrad_e9a2f7(tint_symbol_4, tint_symbol_5);
  tint_symbol const tint_symbol_1 = {.value=float4()};
  return tint_symbol_1;
}

fragment void fragment_main(texture3d<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
  textureSampleGrad_e9a2f7(tint_symbol_6, tint_symbol_7);
  return;
}

kernel void compute_main(texture3d<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
  textureSampleGrad_e9a2f7(tint_symbol_8, tint_symbol_9);
  return;
}

