GLSL最大指令数

时间:2010-04-11 17:29:51

标签: glsl

是否有最大数量的汇编语言指令要加载到片段程序单元中? 我有一个从cpu到gpu的算法,显然它不适合gpu。

2 个答案:

答案 0 :(得分:35)

有几个硬性和软性限制,其中一些并不是很明显:

  • 指令槽:硬件可以在本地存储器中容纳的指令总数。
  • 执行的指令:将执行的最大指令数(包括在循环中多次运行的指令)
  • 单个GLSL指令可以映射到十几个或更多指令
  • 根据优化程序的质量,多个GLSL指令可以映射到单个指令(例如,multiply-add,dot,lerp)
  • 有限的临时寄存器(仅32个)可能需要比SM4之前的硬件更多的指令(​​4096没有这样的问题)。
  • Swizzling现在通常不会花费额外的指令,但在某些旧硬件上执行,并且在某些情况下可能在某些硬件上(特别是gl_FragColor是这样的候选者)
  • 无论实际指示如何,OpenGL 2.0兼容硬件仅限于8个相关纹理提取(在可以执行OpenGL 2.1或更高版本的硬件上无限制)

你有这些保证最低限度(大多数卡有更多):

  • 支持OpenGL 2.x(SM3)硬件的顶点和像素着色器的512个指令槽
    • 65536执行说明
  • 3.x(SM4)硬件上的4096个顶点和65536个像素着色器指令槽
    • 65536执行顶点着色器指令,无限制像素着色器指令
  • 2.x(SM3)硬件上至少有24个动态分支
  • SM4硬件上的全动态分支(无限制)
  • 只有SM2.x上的条件移动,其他一切必须通过代码复制和循环展开来容纳,或者必须失败

答案 1 :(得分:2)

着色器可以拥有的最大指令数量有限制。据我所知,它从GPU到GPU不等。如果着色器太大,编译将产生错误。