opengl - 在 GLSL 中的图像单元上设置只读/只写对性能的影响

标签 opengl glsl image-unit

glBindImageTexture()access 可以是 GL_READ_ONLYGL_WRITE_ONLYGL_READ_WRITE。 我假设这些应该与图像单元上的readonlywriteonly限定符匹配(例如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/

相关文章:

c# - 如何在 OpenTK 的 GlControl 中实现更好的抗锯齿?

c++ - openGL 中带有/对象的静态背景。 "bake"的最佳方式?

c++ - 我尝试运行 OpenGl,但 GLUT 屏幕只是呈现白屏?

类似于 MeshLab 的可视化工具的 OpenGL 着色器为每张脸着色

c++ - 无法编译顶点着色器 : Unexpected $end at token "<EOF>"

c++ - 在片段着色器 OpenGL 中写入多个 3d 纹理

opengl - 使用单个 GL_TRIANGLE_STRIP 的立方体

c++ - OpenGL找不到一些统一变量

opengl - 你如何在 GLSL 中像 textureSize 一样获得图像单元(例如 image2D)的大小