Q:OpenGL ImageAtomicCompsSwap互斥锁,无限循环

Q:OpenGL ImageAtomicCompsSwap互斥锁,无限循环,opengl,glsl,shader,Opengl,Glsl,Shader,由于imageAtomicCompSwap互斥,此着色器将运行到无限循环中。代码是学习OpenGL编程指南(第八版) void takeLock(ivec2 vPos) { uint-ilockable; 做 { ilockAvailable=imageAtomicCompSwap(uLockImage,VPO,uint(0),uint(1)); }而(ilockAvailable!=uint(0)); } 无效释放锁(ivec2 vPos) { //imageStore(uLockImage、

由于imageAtomicCompSwap互斥,此着色器将运行到无限循环中。代码是学习OpenGL编程指南(第八版)

void takeLock(ivec2 vPos)
{
uint-ilockable;
做
{
ilockAvailable=imageAtomicCompSwap(uLockImage,VPO,uint(0),uint(1));
}而(ilockAvailable!=uint(0));
}
无效释放锁(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
所以。。。你的问题是什么?做。。虽然会导致“检测到TDR”,但请将其放在您的问题中。还有,什么是“TDR”?谁在报告此错误?准确解释发生了什么。这本书显示的是
do{…}while(iLockAvailable==0)
而不是
=和您一样。我调用takeLock,将值存储在图像中,然后释放lock(),但我在片段着色器中遇到了无休止的循环,渲染时间过长时会出现错误“TDR”。。。你的问题是什么?做。。虽然会导致“检测到TDR”,但请将其放在您的问题中。还有,什么是“TDR”?谁在报告此错误?准确解释发生了什么。这本书显示的是
do{…}while(iLockAvailable==0)
而不是
=和您一样。我调用takeLock,将值存储在图像中,然后释放lock(),但我在片段着色器中遇到了无休止的循环,渲染时间过长时会出现错误“TDR”
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));
}