如何强制 GLSL 分支?

How to force GLSL branching?

我正在研究片段着色器。它可以工作,但它仍然需要一些优化。

据我所知,GLSL中的大部分case分支都是扁平化的,所以两种case都执行了。我已经消除了大部分 if-else 条件,但其中有一些必须保持原样,因为这两个分支的执行成本都很高。我知道,在 HLSL 中有一个 [branch] 关键字来解决这个问题。但是GLSL怎么可能解决呢?

我的代码是这样的(条件不统一,它们的结果取决于着色器中的计算):

if( condition ) {
    expensive calculations...
}

if( condition2 ) {
    expensive calculations...
}

if( condition3 ) {
    expensive calculations...
}

...

一个“昂贵的计算”可以修改条件所依赖的变量。有可能执行了多个计算。

我知道,有一些旧的或移动的 GPU-s,它们根本不支持分支。那样的话,这个问题就没有关系了

GLSL 没有强制执行 分支(或强制展平分支)的机制。