GLSL中的函数调用是否昂贵(对于PowerVR芯片)?

时间:2012-08-01 20:41:14

标签: glsl

我的假设是GLSL编译器只是简单地内联所有函数调用,使它们便宜。但是,如果GLSL中的函数调用实现了堆栈帧等,那么它们可能非常昂贵。有谁知道GLSL函数调用是否很昂贵?

2 个答案:

答案 0 :(得分:4)

通常,即使没有内联,函数调用也应该便宜,因为不存在堆栈帧(GLSL中没有递归!)。因此,函数调用不应该是任何架构上的禁止开销(可能是1-2个周期)。

但是,函数调用通常发生在条件分支的上下文中,例如if(foo) bar(); else baz();,当工作组中的分支发散时,它本身在GPU上非常昂贵(也就是说,并非所有线程都采用完全相同的路径。) 如果只有一个线程,或可以采取工作组内的不同路径,GPU必须执行两个路径,然后执行条件移动(上一代硬件上的通常情况),或者同步点(隐式)插入最新一代硬件上。在这种情况下,每个线程只评估所采用的路径(这可以节省一些功率)但实际上所有线程都运行锁步,并且短路径与长路径一样长。换句话说,工作组中的所有像素(或顶点或工作项)的处理速度与组中最慢的处理速度一样快。

答案 1 :(得分:1)

根据您的设备,函数调用可能很昂贵。我建议你看看Aras(来自Unity)的GLSL优化器:

https://github.com/aras-p/glsl-optimizer