Czy stały stan jest bardziej kosztowny niż zmiana shaderów?


14

Ogólnie rzecz biorąc, rozgałęzianie w shaderach nie jest dobrym pomysłem. Ale teraz mam moduł cieniujący z warunkiem, który jest stały w odniesieniu do całego zaproszenia do losowania. Wykonywana gałąź jest zawsze taka sama dla jednego wywołania losowania.

Czy tego rodzaju rozgałęzienie jest jeszcze bardziej kosztowne niż posiadanie wielu shaderów bez tych rozgałęzień i przełączanie się między nimi?



Jak wyjaśnia odpowiedź na moje pytanie, fragmenty są grupowane w „wypaczenia” lub „fronty fal”, a jeśli wszystkie fragmenty w takiej grupie używają tej samej gałęzi, wykonywana jest tylko ta gałąź.
Martin Ender,

Ale co z shaderem innym niż fragment?
nikitablack


1
Podejrzewam, że nie jest to duplikat, ale należy go edytować, aby wyjaśnić, o co pytano, zanim można to ustalić. Przydałby się przykładowy kod lub wyjaśnienie dwóch porównywanych opcji.
trichoplax

Odpowiedzi:


13

Na nowoczesnym sprzęcie, jeśli wszystkie wywołania w grupie podążają tą samą ścieżką, wówczas nieużywana ścieżka nie jest oceniana.

pseudo kodem:

if(cond){
   res = ...
}else{
   res = ...
}

staje się

if(anyInvocationARB(cond)){
    res1 = ...
}
if(anyInvocationARB(!cond)){
    res2 = ...
}
res = cond?res1:res2;

Gdzie anyInvocationARBbędzie prawda, jeśli jakiekolwiek wywołanie modułu cieniującego będzie miało wartość true jako cond(z rozszerzenia opengl ARB_shader_group_vote ).

Jeśli war można wyprowadzić z samych mundurów, sterownik może zoptymalizować i ocenić stan przed uruchomieniem renderowania i zastąpić if z goto do właściwej gałęzi. OpenGL ma funkcję zwaną jednolitymi podprogramami, która czyni ją jawną.


4
To prawda, ale to nie jedyna rzecz, którą trzeba rozważyć pod kątem wydajności. Procesory graficzne nadal statycznie planują zasoby na moduł cieniujący, więc mogą to być zasoby tak, jakbyś wykonywał obie gałęzie, co może zaszkodzić zajmowaniu.
John Calsbeek,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.