Ich habe gehört, dass if-Anweisungen in Shadern vermieden werden sollten, da beide Teile der Anweisungen ausgeführt werden und dann das falsche gelöscht wird (was die Leistung beeinträchtigt).
Es ist immer noch ein Problem in DirectX 10? Jemand hat mir gesagt, dass darin nur der richtige Zweig ausgeführt wird.
Zur Illustration habe ich den Code:
float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3;
if(x>0.5){
x = 10 * y1 + b1;
}else{
x = 10 * y2 + b2;
}
Gibt es eine andere Möglichkeit, es schneller zu machen?
Wenn ja, wie geht das?
Beide Zweige sehen ähnlich aus, der einzige Unterschied sind die Werte der "Konstanten" ( y1, y2, b1, b2
sind für alle Pixel in Pixel Shader gleich).