This shader will run into endless loop because of imageAtomicCompSwap mutex. The code is learn form OpenGL Programming Guide(Eighth Edition)
void takeLock(ivec2 vPos)
{
uint iLockAvaiable;
do
{
iLockAvaiable = imageAtomicCompSwap(uLockImage, vPos, uint(0), uint(1));
}while(iLockAvaiable != uint(0));
}
void releaseLock(ivec2 vPos)
{
//imageStore(uLockImage, vPos, uint(0));
uint uiValue = imageAtomicExchange(uLockImage, vPos, uint(0));
}
void main()
{
takeLock(ivec2(f2TexCoord));
float BaseDepth = imageLoad(uDepthTest, ivec2(f2TexCoord)).x;
if(BaseDepth == 0.0 || refScreenCoord.z < BaseDepth)
imageStore(uDepthTest, ivec2(f2TexCoord), vec4(refScreenCoord.z));
releaseLock(ivec2(f2TexCoord));
}