OpenCL 中与 GLSL 的统一变量等价的是什么?

在 OpenCL 术语中,统一变量位于 GPU 内存中的什么位置?
它们什么时候从主机传递到 GPU?

我知道答案可能取决于特定的 OpenGL 实现,但我想知道是否有一些规则或合理的假设。

最佳答案

在 GLSL 中,可以从每个着色器阶段和实例以只读方式访问制服。所以它显示了相应的 OpenCl 全局内存的行为。考虑到这些值的常量性(您无法在着色器内修改它们),它尤其等于 OpenCL 的 __constant 内存。

更多信息可以在这里找到:
http://www.opengl.org/wiki/Uniform_(GLSL)
和这里:
http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/constant.html

由于优化的可能性,我更喜欢 __constant 内存解决方案。如果内核内存占用有足够的空间,一些 OpenCL 驱动程序可能会将这些 __constant 值直接刷新到快速本地或私有(private)内存中。如果不这样做,全局内存(包含 __constant 内存)的内存 Controller 也能够在 __constant 部分更快地工作,因为内核代码无法发出更新请求。

调用glUniformXX时直接调用OpenGL中的uniforms。

考虑到您还可以创建统一的缓冲区对象。这种情况下的访问由统一缓冲区绑定(bind)点控制。这与 OpenGL 中的纹理处理类似。有关 UBO 用法的更多信息,请访问:
http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/3490-2/

关于opengl - OpenCL 中等效的 GLSL 统一变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21478443/

10-11 15:12
查看更多