DGL https://delphigl.com/forum/ |
|
Erste Versuche mit Geometrie-Shader https://delphigl.com/forum/viewtopic.php?f=20&t=11227 |
Seite 1 von 1 |
Autor: | mathias [ Fr Aug 22, 2014 20:22 ] | ||
Betreff des Beitrags: | Erste Versuche mit Geometrie-Shader | ||
Ich habe ein bisschen mit dem Geometrie-Shader gebastelt. Mein Object wird kopiert und anschliessend wird beim linken Object die Normale berechnet. Beim rechten Object ist die Normale eine Konstante. Die 3 Shader: Code:
Code:
Code:
Ich kann mir vorstellen, das es noch einige hat was man noch verbessern könnte. Ich sehe schon, mit der GPU kann man sehr viel anstellen. ![]()
|
Autor: | glAwesome [ Fr Aug 22, 2014 23:00 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
mathias hat geschrieben: Ich kann mir vorstellen, das es noch einige hat was man noch verbessern könnte. Du könntest z.B. die for-Schleife in GetNormal() ersetzen durchCode:
|
Autor: | mathias [ So Aug 24, 2014 16:30 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
Ich habe GetNormal abgeändert, auch habe ich am Anfang von main noch was verbessert. Code:
|
Autor: | glAwesome [ So Aug 24, 2014 18:41 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
glAwesome hat geschrieben: Für das Kreuzprodukt gibt es auch eine eingebaute Funktion. *Wink mit dem Zaunpfahl* Die Funktion heißt übrigens cross().
|
Autor: | mathias [ So Aug 24, 2014 19:11 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
Schon wieder ein bisschen einfacher. Der cross Befehl spart einiges. Code:
Noch einfacher währe in main Code:
2. Problem: Kann man dies auch vereinfachen ? Code:
etwa so oder ähnlich ? Code:
Hier noch GetNormal2: Code:
|
Autor: | glAwesome [ Di Aug 26, 2014 22:00 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
Falls das missverständen wurde, möchte ich betonen, dass es keinen Performance-Vorteil bringt, durch Inlining die Anzahl der mit Semikolon abgeschlossenen Anweisungen zu reduzieren. Beispiel: Code:
Ebenso sind Zuweisungen als kostenlos zu betrachten, wenn sie keinerlei Rechenoperationen beinhalten, sondern nur kopieren: Code:
|
Autor: | TAK2004 [ Mi Aug 27, 2014 08:02 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
glAwesome hat geschrieben: Falls das missverständen wurde, möchte ich betonen, dass es keinen Performance-Vorteil bringt, durch Inlining die Anzahl der mit Semikolon abgeschlossenen Anweisungen zu reduzieren. Beispiel: Code:
Ebenso sind Zuweisungen als kostenlos zu betrachten, wenn sie keinerlei Rechenoperationen beinhalten, sondern nur kopieren: Code:
Dazu will ich noch als Hinweis geben, dass Optimierungen nicht aus einem gemeinsammen Compiler passieren, sondern jeder Grafikkarten Hersteller eigene Treiber mit eigenen Compilern liefert und die Qualität der Optimierung geht von wahnsinn bis gar keine. Apple's iOS Shader Compiler z.b. konnte bis zur meiner letzten nutzung(knapp 1-2Jahren) nix, nicht mal das obige Beispiel oder if(true)... else ... optimieren. Unity3D hat extra deswegen ein Shader Optimizer geschrieben, der auf den Mesa Parser und Optimizer basiert, weil dies auch wohl auf den meisten Android Geräten der Fall war. Da der immer noch für alle Mobile Platformen aktive verwendet wird, geh ich davon aus, dass dies wohl immer noch der Fall ist. Die Optimierungen kann man sich also nur sparen, wenn man explizit auf Nvidia, Intel und AMD Karten setzt. http://developer.amd.com/tools-and-sdks/graphics-development/gpu-shaderanalyzer/ kann helfen aber seit 2Jahren auch nicht mehr geupdated wurden, schätze es ist ein Teil von CodeXL nun und ich find es einfach unter den vielen anderen Tools ned :\ |
Autor: | OpenglerF [ Mi Aug 27, 2014 14:54 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
Nvidia bietet auch noch Nsight, das unter-anderem Shader-Debugging erlaubt. CodeXL sollte das, soweit ich weiß, nicht beherrschen. Bei der Gelegenheit möchte ich auch nochmal darauf hinweisen das auf halbwegs moderner Hardware auch auch "cross" und die meisten solcher Funktionen grundsätzlich erstmal keinen Performancevorteil bieten. Die Zeit bei dem komplexe Vektorinstruktionen gibt ist anscheinend vorbei, man vereinfacht lieber den Befehlssatz und integriert noch mehr parallel laufende Shaderprozessoren. Wenn man genau das selbe per Hand macht, ist "cross" natürlich aus Lesbarkeitsgründen zu bevorzugen. Interessantes Material dazu: ftp://download.nvidia.com/developer/cuda/seminar/TDCI_Arch.pdf http://www.humus.name/Articles/Persson_LowLevelThinking.pdf http://www.humus.name/Articles/Persson_LowlevelShaderOptimization.pdf |
Autor: | TAK2004 [ Mi Aug 27, 2014 16:32 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
CodeXL kann Shader Debugging, ich hab es noch nicht benutzt, weil ich noch auf mein AMD System warte aber in der Tutorial Sektion von der Hilfe wird es Schritt für Schritt erklärt und das gab es auch schon im vorigen gDebugger. Auf der GDC2014 war ein Talk von Nvidia wo die Speaker Optimierungspunkte erklärt haben und bei Shadern meinte der eine, dass die wichtigste Optimierung das parallelisieren des Shaders ist. Es gibt in der Shader Language Funktionen die synchronisieren müssen, auf Werte zurück greifen, die ein Warten auslösen und natürlich Hardware bedingte Sync. Operationen wie z.B. Texel zugriff. Dies sind Hotspots und für diese muss man optimieren, weil diese das skalieren auf Grakas reduzieren. Ein gutes Beispiel ist z.B. Texels aus verschiedenen Blöcken einer DXT Textur zu zugreifen, das erzeugt mehr Cache misses und die Shader Unit muss für ein VRAM Sync warten. Je mehr Shader Units aus dem gleichen Texturblock lesen, je höher die Performance, weil zum einen kein Sync passiert und zum zweiten der Cache um längen schneller ist als VRAM. So kann also ein schlecht gewählter noise lookup für SSAO starke Performanceunterschiede hervor rufen. Es ist ab einer zu testenden Reichweite schneller ein horizontalen blur über mehere Schritte nacheinander zu machen als in ein Step und gleiches für den vertikalen Schritt. |
Autor: | glAwesome [ Mi Aug 27, 2014 19:21 ] |
Betreff des Beitrags: | Re: Erste Versuche mit Geometrie-Shader |
OpenglerF hat geschrieben: Nvidia bietet auch noch Nsight, das unter-anderem Shader-Debugging erlaubt. CodeXL sollte das, soweit ich weiß, nicht beherrschen. Wann gibt es diese Tools endlich als Standalone? Ich habe und will kein Visual Studio/Eclipse...OpenglerF hat geschrieben: Bei der Gelegenheit möchte ich auch nochmal darauf hinweisen das auf halbwegs moderner Hardware auch auch "cross" und die meisten solcher Funktionen grundsätzlich erstmal keinen Performancevorteil bieten. Dennoch sollte cross() verwendet werden. Diese eingebauten Funktionen sind alle optimal, d.h. es ist nicht möglich, die Funktionalität mit anderem Code nachzubauen, der schneller läuft. Der Nachbau von solchen Funktionen kann also höchstens gleich schnell sein. Und dass aktuelle Nvidia-Hardware skalar statt vektoriell arbeitet, mag derzeit stimmen, jedoch gibt's auch noch ältere Hardware und in Zukunft kann das auch wieder anders aussehen. Und bei anderen Herstellern ist es vielleicht auch anders. Nur damit sich hier niemand berufen fühlt, eingebaute Funktionen nicht zu benutzen.Edit: Habe jetzt das Dokument http://www.humus.name/Articles/Persson_LowLevelThinking.pdf durch. Wenn das (auch für OpenGL) stimmt, was da steht, sollten neue OpenGL-Versionen hier ansetzen. Es kann doch wohl nicht wahr sein, dass ein Shader-Compiler unter dem Vorwand der IEEE-Kompatibilität solche einfachen Zusammenhänge nicht erkennt: Code:
|
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |