Tôi đã nghe nói rằng nếu các câu lệnh nên tránh trong shader, bởi vì cả hai phần của câu lệnh sẽ được thực thi, và hơn là sai sẽ bị loại bỏ (điều này gây hại cho hiệu suất).
Nó vẫn là một vấn đề trong DirectX 10? Ai đó nói với tôi, rằng trong đó chỉ có nhánh bên phải sẽ được thực thi.
Để minh họa tôi có mã:
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;
}
Có cách nào khác để làm cho nó nhanh hơn?
Nếu vậy, làm thế nào?
Cả hai nhánh trông giống nhau, sự khác biệt duy nhất là các giá trị của "hằng số" ( y1, y2, b1, b2
giống nhau cho tất cả các pixel trong Pixel Shader).