#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  texture2d<int, access::read_write> arg_0;
};

void textureStore_2f29ea(tint_module_vars_struct tint_module_vars) {
  tint_module_vars.arg_0.write(int4(1), uint2(int2(1)));
  const_cast<texture2d<int, access::read_write>thread &>(tint_module_vars.arg_0).fence();
}

fragment void fragment_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
  textureStore_2f29ea(tint_module_vars);
}

kernel void compute_main(texture2d<int, access::read_write> arg_0 [[texture(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
  textureStore_2f29ea(tint_module_vars);
}
