¿Las declaraciones If ralentizan mi sombreador?

Quiero saber si las "declaraciones If" dentro de los sombreadores (vértice / fragmento / píxel ...) realmente están ralentizando el rendimiento del sombreador. Por ejemplo:

¿Es mejor usar esto?

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

en lugar de usar esto:

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

en otro foro se habló sobre eso (2013):http://answers.unity3d.com/questions/442688/shader-if-else-performance.html Aquí los muchachos dicen que las declaraciones If son realmente malas para el rendimiento del sombreador.

También aquí están hablando de cuánto hay dentro de las declaraciones if / else (2012):https://www.opengl.org/discussion_boards/showthread.php/177762-Performance-alternative-for-if-(-)

tal vez el hardware o el shadercompiler son mejores ahora y solucionan de alguna manera este problema de rendimiento (tal vez no existente).

EDITAR:

En este caso, digamos que enable es una variable uniforme y siempre se establece en 0:

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

Creo que aquí tenemos una rama dentro del sombreador que ralentiza el sombreador. ¿Es eso correcto?

¿Tiene más sentido hacer 2 sombreadores diferentes como uno para el otro y el otro para la parte if?

Respuestas a la pregunta(2)

Su respuesta a la pregunta