GLSL最大指令数

Ali*_*lin 14 glsl

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

Dam*_*mon 37

有几个硬性和软性限制,其中一些并不是立即显而易见的:

  • 指令槽:硬件可以在本地存储器中容纳的指令总数.
  • 执行的指令:将执行的最大指令数(包括在循环中多次运行的指令)
  • 单个GLSL指令可以映射到十几个或更多指令
  • 几个GLSL指令可以映射到单个指令,具体取决于优化器的质量(例如,multiply-add,dot,lerp)
  • 有限的临时寄存器(仅32个)可能需要比SM4之前的硬件更多的指令(​​4096没有这样的问题).
  • 混写通常不花费时下额外的指令,但确实在一些比较老的硬件,并且可以在某些情况下对一些硬件(特别是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上的条件移动,其他一切必须通过代码复制和循环展开来容纳,或者必须失败

  • 这是一个很好的答案,但是对于一些参考文献会更好. (10认同)

Dan*_*vil 2

着色器可以拥有的最大指令数量是有限制的。据我所知,不同 GPU 的情况有所不同。如果你的着色器太大,编译会产生错误。