【发布时间】:2018-05-07 14:14:58
【问题描述】:
假设我有一个用 GLSL 编写的 opengl 计算着色器,在 NVidia Geforce 970 上执行。
在着色器开始时,一次调用会写入“着色器存储缓冲区对象”(SSBO)。
然后我发出一个合适的屏障,例如我的 GLSL 中的 memoryBarrier()。
然后我在每次调用时从第一步中写入的内存中读取。
第一次写入对当前计算操作中的所有调用是否可见?
在https://www.khronos.org/opengl/wiki/Memory_Model#Ensuring_visibility,Khronos 说:
“如果您使用屏障等机制在调用之间进行同步,请使用一致且适当的 memoryBarrier* 或 groupMemoryBarrier 调用。”
我很确定可以在工作组内以这种方式进行同步。但它是否适用于每个工作组中的所有调用,在整个计算操作中?
我不确定整套工作组是如何安排的。我希望它们可能按顺序运行,从而使我所询问的那种同步变得不可能?
【问题讨论】:
标签: opengl synchronization gpgpu compute-shader