InterlockedCompareExchange() in HLSL
void InterlockedCompareExchange(
in UINT dest,
in UINT compare_value,
in UINT value,
out UINT original_value
);
// pseudocode
original_value = image[ dest ];
if ( compare_value == old_value )
{
image[ dest ] = value;
}
return original_value;