Verlangsamen If-Anweisungen meinen Shader?

Ich möchte wissen, ob "If-Anweisungen" in Shadern (Vertex / Fragment / Pixel ...) die Shader-Leistung wirklich verlangsamen. Beispielsweise

Ist es besser, dies zu verwenden:

vec3 output;
output = input*enable + input2*(1-enable);

anstatt dies zu benutzen:

vec3 output;
if(enable == 1)
{
    output = input;
}
else
{
    output = input2;
}

in einem anderen Forum wurde darüber gesprochen (2013):http: //answers.unity3d.com/questions/442688/shader-if-else-performance.htm Hier sagen die Jungs, dass die If-Anweisungen wirklich schlecht für die Leistung des Shaders sind.

Auch hier wird darüber gesprochen, wie viel in den if / else-Anweisungen (2012) enthalten ist:https: //www.opengl.org/discussion_boards/showthread.php/177762-Performance-alternative-for-if- (-)

Möglicherweise ist die Hardware oder der Shader-Compiler jetzt besser und sie beheben auf irgendeine Weise dieses (möglicherweise nicht vorhandene) Leistungsproblem.

BEARBEITEN

Was ist in diesem Fall, hier sagen wir, enable ist eine einheitliche Variable und wird immer auf 0 gesetzt:

if(enable == 1) //never happens
{
    output = vec4(0,0,0,0);
}
else  //always happens
{
    output = calcPhong(normal, lightDir);
}

Ich denke, hier haben wir einen Zweig im Shader, der den Shader verlangsamt. Ist das korrekt

Ist es sinnvoller, zwei verschiedene Shader wie den einen für das else und den anderen für das if-Teil zu erstellen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage