#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 atomicOr_8d96a0() {
  int arg_1 = 0;
  int res = 0;
  arg_1 = 1;
  int x_13 = atomicOr(sb_rw.arg_0, arg_1);
  res = x_13;
  return;
}

void fragment_main_1() {
  atomicOr_8d96a0();
  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 atomicOr_8d96a0() {
  int arg_1 = 0;
  int res = 0;
  arg_1 = 1;
  int x_13 = atomicOr(sb_rw.arg_0, arg_1);
  res = x_13;
  return;
}

void compute_main_1() {
  atomicOr_8d96a0();
  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;
}
