OpenGL umożliwia współdzielenie tego samego modułu cieniującego między wieloma programami. Czy oprócz oszczędzania niewielkiej ilości pamięci i uchwytu modułu cieniującego są jakieś korzyści związane z wydajnością po stronie GPU?
OpenGL umożliwia współdzielenie tego samego modułu cieniującego między wieloma programami. Czy oprócz oszczędzania niewielkiej ilości pamięci i uchwytu modułu cieniującego są jakieś korzyści związane z wydajnością po stronie GPU?
Odpowiedzi:
Wątpię, czy istnieje korzyść z wydajności po stronie GPU.
Gdy na przykład powiążesz ogólny moduł cieniujący z programem, wydajna implementacja powinna być w stanie usunąć nieużywane atrybuty między tym modułem cieniującym a innymi modułami cieniującymi w tym programie, a być może nawet uprościć logikę modułu cieniującego. Oczywiście nie stanowi to żadnej realnej korzyści w porównaniu z ręcznie dostrojoną kombinacją modułów cieniujących, ale pomaga w zarządzaniu złożonością / kombinatoryką i może zmniejszyć liczbę kompilacji, które musi wykonać sterownik.
Może to jednak mieć wady związane z trafieniem w nieefektywne implementacje sterowników i kompilatorów. A jest ich kilka, sprawdź: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ tylko kilka prostych rzeczy, które niektóre implementacje mogą popsuć.