#include <metal_stdlib>
using namespace metal;
struct tint_module_vars_struct {
  texture3d<uint, access::read_write> arg_0;
};

void textureStore_a19a12(tint_module_vars_struct tint_module_vars) {
  int3 arg_1 = int3(1);
  uint4 arg_2 = uint4(1u);
  uint4 const v = arg_2;
  tint_module_vars.arg_0.write(v, uint3(arg_1));
  tint_module_vars.arg_0.fence();
}
fragment void fragment_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
  textureStore_a19a12(tint_module_vars);
}
kernel void compute_main(texture3d<uint, access::read_write> arg_0 [[texture(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
  textureStore_a19a12(tint_module_vars);
}
