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) :D

:arrow: Der GLSL-Compiler optimiert den SourceCode, das ist klar, aber wie weit geht das?
macht es z.B einen Unterschied, ob ich schreibe
Code:
  1. tmp = texture2D(...);
  2. gl_FragmentColor = tmp;

oder einfach
Code:
  1. gl_FragmentColor = texture2D(...);

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.

:arrow: viele oder wenige shader?
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?

:arrow: lohnt sich ein Shader überhaupt, wenn man den gleichen Effekt auch mit klassischen Texture-Stages erzielen kann, oder ist GLSL dann nur Verschwendung?

Puh, das waren eine Menge Fragezeichen :lol: . Danke schonmal für die Antworten

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/