在 glBindImageTexture()
、access
可以是 GL_READ_ONLY
、GL_WRITE_ONLY
或 GL_READ_WRITE
。
我假设这些应该与图像单元上的readonly
和writeonly
限定符匹配(例如image2D
或 GLSL 中的 imageBuffer
)。
我在设置只读或只写时没有注意到任何差异(2013,NVIDIA 319.49 驱动程序)。当然,我可能不会做任何会导致速度减慢的事情,因此看不到任何改进。当前 GL 实现也可能会简单地忽略这些限定符。
- GL 实现在什么情况下可以使用 readonly/writeonly,为什么它们存在?
我想到了缓存一致性,但是 coherent
/volatile
限定符不是已经涵盖了这一点吗?我已经使用过这些并且它们似乎有效。
- 是否有人在使用 readonly/writeonly 时体验到性能或结果的差异,它们有多重要?
如果已经过去了很多年,请不要害怕回复,我很想知道,而且我相信其他人也有兴趣。
最佳答案
它只是告诉驱动程序如何使用内存。是否进行优化取决于驱动程序。我没有看到 NVidia 驱动程序有任何差异。有一点是肯定的,如果你写入只读图像,结果是不确定的。读取只写图像也是如此。但即使它对今天的驱动程序没有影响,您仍然应该将它们与您实际对这些图像所做的事情保持一致: future 的驱动程序可能会使用这些提示来优化内存访问。
关于opengl - 在 GLSL 中的图像单元上设置只读/只写对性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655396/