1

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));
}
youyouyou
  • 23
  • 4

0 Answers0