研究the OpenGL memory model之后,我有2个问题:
如何将原子操作(例如,ssbo中的atomicAdd()
)视为不连贯的?这是否意味着我必须声明ssbo相干并在memoryBarrierBuffer()
之后使用atommicAdd()
绑定?
为了确保跨多个计算着色器调用的内存一致性,我使用了多个调度,一次一次,每个调度都有一个工作组。每次调用都调用groupMemoryBarrier()
以确保仅内部工作组的内存一致性,并且在分派之后我发出glMemoryBuffer(GL_TEXTURE_FETCH_BARRIER_BIT|GL_SHADER_STORAGE_BARRIER_BIT)
以确保下一次分派的外部可见性。我是否可以安全地假设在memoryBarrierImage()
之后发出imageStore()
甚至可以在同一调度的多个工作组之间授予内部内存一致性(以便我可以在一个以上的工作组中启动一个调度)? / p>