#version 310 es
precision mediump float;

ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
  ivec2 result;
  result.x = atomicCompSwap(param_0, param_1, param_2);
  result.y = result.x == param_2 ? 1 : 0;
  return result;
}


struct SB_RW {
  int arg_0;
};

layout (binding = 0) buffer SB_RW_1 {
  int arg_0;
} sb_rw;

void atomicCompareExchangeWeak_12871c() {
  ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
}

void fragment_main() {
  atomicCompareExchangeWeak_12871c();
  return;
}
void main() {
  fragment_main();
}


#version 310 es
precision mediump float;

ivec2 tint_atomicCompareExchangeWeak(inout int param_0, int param_1, int param_2) {
  ivec2 result;
  result.x = atomicCompSwap(param_0, param_1, param_2);
  result.y = result.x == param_2 ? 1 : 0;
  return result;
}


struct SB_RW {
  int arg_0;
};

layout (binding = 0) buffer SB_RW_1 {
  int arg_0;
} sb_rw;

void atomicCompareExchangeWeak_12871c() {
  ivec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1, 1);
}

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


