OpenCL对GLSL的统一变量的等价物是什么?
在OpenCL术语中,统一变量位于GPU内存中的哪个位置? 它们何时从主机传递到GPU?
我理解答案可能取决于具体的OpenGL实现,但我想知道是否有一些规则或合理的假设。
答案 0 :(得分:5)
在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中的制服会直接传输。
考虑您还可以创建统一的缓冲区对象。在这种情况下,访问由统一缓冲区绑定点控制。这很安静,类似于OpenGL中的纹理处理。有关UBO使用的更多信息,请访问: http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/3490-2/