//
// fragment_main
//
#include <metal_stdlib>
using namespace metal;

struct SB_RW {
  /* 0x0000 */ atomic_uint arg_0;
};

struct tint_module_vars_struct {
  device SB_RW* sb_rw;
};

void atomicStore_cdc29e(tint_module_vars_struct tint_module_vars) {
  atomic_store_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
}

fragment void fragment_main(device SB_RW* sb_rw [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw};
  atomicStore_cdc29e(tint_module_vars);
}
//
// compute_main
//
#include <metal_stdlib>
using namespace metal;

struct SB_RW {
  /* 0x0000 */ atomic_uint arg_0;
};

struct tint_module_vars_struct {
  device SB_RW* sb_rw;
};

void atomicStore_cdc29e(tint_module_vars_struct tint_module_vars) {
  atomic_store_explicit((&(*tint_module_vars.sb_rw).arg_0), 1u, memory_order_relaxed);
}

kernel void compute_main(device SB_RW* sb_rw [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.sb_rw=sb_rw};
  atomicStore_cdc29e(tint_module_vars);
}
