#version 310 es
precision mediump float;

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


struct SB_RW {
  uint arg_0;
};

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

void atomicCompareExchangeWeak_6673da() {
  uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
}

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


#version 310 es
precision mediump float;

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


struct SB_RW {
  uint arg_0;
};

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

void atomicCompareExchangeWeak_6673da() {
  uvec2 res = tint_atomicCompareExchangeWeak(sb_rw.arg_0, 1u, 1u);
}

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


