在 PMB 中使用 GL_MAP_COHERENT_BIT 时是否需要 fence/sync?

Do I need to fence/sync when I use GL_MAP_COHERENT_BIT in a PMB?

我看到过关于它的相互矛盾的文档。在 Khronos documentation 中,我是否需要 glFinish(或变体)有点模棱两可。我目前正在对我的缓冲区进行三重缓冲以避免这个问题(因为我动态使用 PMB),但它显然会消耗大量内存。我知道该标志使数据更改对 GPU 和 CPU 都自动可见,但不知道我是否必须将写入与读取同步。我需要知道我是否真的需要同步 GL_MAP_COHERENT_BIT 标志或存在隐式同步。

没有隐式同步,因为 driver/GPU 不知道您何时访问映射指针。毕竟,这就是持久映射的意义所在。

是的,您仍然需要同步。如果您想阅读 GPU 编写的内容...您需要 GPU 编写 才能阅读。和 vice-versa 用于写作;您不想写入 GPU 正在读取的数据。

所以使用同步。如果您是 triple-buffering,那么 wait-fence 通话很快 no-op 的可能性很大。