#include <metal_stdlib>
using namespace metal;
struct tint_module_vars_struct {
  texture2d_array<int, access::read_write> arg_0;
};
struct vertex_main_outputs {
  float4 tint_symbol [[position]];
};

void textureStore_1a6c0b(tint_module_vars_struct tint_module_vars) {
  tint_module_vars.arg_0.write(int4(1), uint2(1u), 1u);
  tint_module_vars.arg_0.fence();
}
float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
  textureStore_1a6c0b(tint_module_vars);
  return float4(0.0f);
}
fragment void fragment_main(texture2d_array<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_1a6c0b(tint_module_vars);
}
kernel void compute_main(texture2d_array<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_1a6c0b(tint_module_vars);
}
vertex vertex_main_outputs vertex_main(texture2d_array<int, access::read_write> arg_0 [[texture(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.arg_0=arg_0};
  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
}
