#version 310 es
precision mediump float;

struct SB_RW_atomic {
  int arg_0;
};

struct SB_RW {
  int arg_0;
};

layout(binding = 0, std430) buffer SB_RW_atomic_1 {
  int arg_0;
} sb_rw;
void atomicStore_d1e9a6() {
  int arg_1 = 0;
  arg_1 = 1;
  atomicExchange(sb_rw.arg_0, arg_1);
  return;
}

void fragment_main_1() {
  atomicStore_d1e9a6();
  return;
}

void fragment_main() {
  fragment_main_1();
}

void main() {
  fragment_main();
  return;
}
#version 310 es

struct SB_RW_atomic {
  int arg_0;
};

struct SB_RW {
  int arg_0;
};

layout(binding = 0, std430) buffer SB_RW_atomic_1 {
  int arg_0;
} sb_rw;
void atomicStore_d1e9a6() {
  int arg_1 = 0;
  arg_1 = 1;
  atomicExchange(sb_rw.arg_0, arg_1);
  return;
}

void compute_main_1() {
  atomicStore_d1e9a6();
  return;
}

void compute_main() {
  compute_main_1();
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
  compute_main();
  return;
}
