- tmp = texture2D(...);
- gl_FragmentColor = tmp;
DGL https://delphigl.com/forum/ |
|
Shader und Performance https://delphigl.com/forum/viewtopic.php?f=20&t=7174 |
Seite 1 von 1 |
Autor: | Krox [ Fr Jan 04, 2008 12:27 ] |
Betreff des Beitrags: | Shader und Performance |
hi, Vorrausgesetzt meine Shader funktionieren mal, haben sie für mich einen ziemlichen Black-Box Charakter, da man den compilierten Shader-Code nie zu Gescicht bekommt, und GPU-Zeiten auch so schlecht messen kann. Vielleicht kann ja jemand Licht in dieses Dunkel bringen (oder mir nen Link geben) ![]() ![]() macht es z.B einen Unterschied, ob ich schreibe Code:
oder einfach Code:
Da ich meine Shader nicht direkt schreibe sondern je nach Material generieren lasse, ist der erste Ansatz für mich oft praktischer. Am tollsten wäre natürlich eine Möglichkeit, den optimierten Source wieder auszulesen, dann könnte man einfach mal nachschauen. ![]() In meiner Szene gibt es viele unterschiedliche Objekte mit sehr unterschiedlichen Materialen. Mit/Ohne Normal-Maps, mit/ohne reflektion, etc... was ist jetzt sinnvoller, ein allgemeinen gehaltener Shader den ich per Uniform-Variable anpassen kann, oder lieber ein Dutzend spezialisierte Shader? * braucht ein shader viel Platz im GraKa-Speicher? * wie lange dauert ein glUseProgram(...) Aufruf? * wie aufwenig ist glUniform*(...) ? * wie groß ist der Performance-Unterschied zwischen einer Operation mit einer Konstanten und mit einer Uniform-Variablen? ![]() Puh, das waren eine Menge Fragezeichen ![]() |
Autor: | Lord Horazont [ Fr Jan 04, 2008 14:24 ] |
Betreff des Beitrags: | |
Zu Punkt eins: Ich glaube nicht, dass man irgendwie an den optimierten Code rankommt, außer als Assembly oder Binärcode. Ich bezweifle, dass der Shader im Reintextformat optimiert wird. Zu deinem Codebeispiel: Ich vermute, dass das zu den dingen gehört, die optimiert werden, wenn zwischen der Zuweisung auf tmp und der Zuweisung auf gl_FragColor kein Zugriff mehr auf tmp erfolgt. Zu Punkt zwei: Da viele, vorallem ältere, Grafikkarten ein Early-Out nicht unterstützen lohnt sich ein universalshader meist nicht. Das Problem ist, dass die Werte in den anderen If-Abzweigungen trotzdem berechnet, danach aber verworfen werden oder der Shader im Extremfall im Softwaremodus, also sehr langsam läuft. Zu Punkt drei: Ich kann mir gut vorstellen, dass es sich lohnt, eher die Textur-Stages zu benutzen, dann können auch besitzer von älteren Grafikkarten von den Effekten profitieren. Man kann natürlich auch Primär die Shader benutzen und nur wenn die karte keine Shader kann auf die Texturstages zurückgreifen. Gruß Lord Horazont |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |