【发布时间】:2014-02-24 01:14:27
【问题描述】:
OpenCL 中与 GLSL 的统一变量等价的是什么?
在 OpenCL 术语中,统一变量位于 GPU 内存中的什么位置? 它们何时从主机传递到 GPU?
我知道答案可能取决于具体的 OpenGL 实现,但我想知道这是否有一些规则或合理的假设。
【问题讨论】:
标签: opengl glsl opencl gpu gpgpu
OpenCL 中与 GLSL 的统一变量等价的是什么?
在 OpenCL 术语中,统一变量位于 GPU 内存中的什么位置? 它们何时从主机传递到 GPU?
我知道答案可能取决于具体的 OpenGL 实现,但我想知道这是否有一些规则或合理的假设。
【问题讨论】:
标签: opengl glsl opencl gpu gpgpu
在 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 值直接刷新到快速本地或私有内存中。如果不这样做,全局内存(包含 __constant 内存)的内存控制器也能够在 __constant 部分上更快地工作,因为内核代码无法发出更新请求。
调用glUniformXX时直接调用OpenGL中的uniform。
考虑到您也可以创建统一的缓冲区对象。在这种情况下,访问由统一缓冲区绑定点控制。这类似于 OpenGL 中的纹理处理。关于 UBO 使用的更多信息可以在这里找到: http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/3490-2/
【讨论】: