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值直接刷新到快速本地或专用内存.如果不这样做,全局内存的内存控制器(包含__constant内存)也能够在__constant部分上更快地工作,因为内核代码不能有更新请求.
OpenGL中的制服在调用glUniformXX时直接传输.
考虑到您还可以创建统一的缓冲区对象.在这种情况下,访问由统一的缓冲区绑定点控制.这很安静,类似于OpenGL中的纹理处理.有关UBO使用的更多信息,请访问:http: //www.lighthouse3d.com/tutorials/glsl-core-tutorial/3490-2/