DGL
https://delphigl.com/forum/

Aufrufe im Shader
https://delphigl.com/forum/viewtopic.php?f=20&t=11095
Seite 1 von 1

Autor:  mathias [ So Jan 19, 2014 17:43 ]
Betreff des Beitrags:  Aufrufe im Shader

Verstehe ich das richtig ?

Der Fragment/Vertex-Shader wird bei jedem Vertex aufgerufen, bei einem Dreieck dreimal und der Fragment-Shader bei jedem Pixel. Das währen bei einem 100x100 Pixel grossen Dreieck 5000 Aufrufe.

Autor:  OpenglerF [ So Jan 19, 2014 17:55 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

Zitat:
Der Fragment-Shader wird bei jedem Vertex aufgerufen,

Nein, er wird bei jeden Fragment aufgerufen. Nicht bei jeden Vertex.

Zitat:
Fragment-Shader bei jedem Pixel

Nicht ganz. In DirectX-Kreisen ist der OpenGL Fragmentshader auch als Pixelshader bekannt. Fragment trifft es aber eigentlich besser, weil ein Pixel sich aus mehreren Fragmenten zusammensetzen kann. Zum Beispiel beim Multisampling zum Unterdrücken von Aliasing.

Zitat:
Das währen bei einem 100x100 Pixel grossen Dreieck 5000 Aufrufe.

Annäherungsweise 100 * 100 * Samples pro Pixel. Wenn nicht zb. noch der Tiefentest(Early-Z) oder der Stenciltest dazwischen kommt.
Bei 4 fach Antialiasing wären das dann ~40000 Aufrufe, wenn keine Fragmente vorher bei einen Test rausfallen.

Vertexshader: Einmal pro Vertex. (In der Praxis manchmal mehrmals, wenn ein Vertex über Indices mehrfach benutzt wird und die Berechnungen des vorherigen Aufrufes nicht mehr gecachted sind.)
Fragmentshader: Einmal pro "sichtbares" Fragment.
Geometryshader: Einmal pro Grundgeometrie also Punkt/Linie/Dreieck.

Autor:  mathias [ So Jan 19, 2014 18:33 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

Wen ich bei meiner Frage die beiden Shader nicht verwechselt hätte, dann währe meine Behauptung bei einem gewöhnlichen Dreieck ohne Z-Buffer, Filter etc. fast richtig gewesen.

Autor:  mathias [ Mi Apr 09, 2014 18:42 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

Ich habe eine Artikel über eine Grafikkarte gelesen, welche 2880 Shadereinheiten besitzt.
Verstehe ich dies richtig, das die einfachen OpenGL 3.3-Programme 2 Stück davon brauchen ?

Autor:  Sascha Willems [ Mi Apr 09, 2014 18:50 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

mathias hat geschrieben:
Ich habe eine Artikel über eine Grafikkarte gelesen, welche 2880 Shadereinheiten besitzt.
Verstehe ich dies richtig, das die einfachen OpenGL 3.3-Programme 2 Stück davon brauchen ?


Nein, moderne Karten haben i.d.R. mehrere Tausend Shaderkerne die unabhängig voneinander z.B. Texel berechnen können. Das hat nichts mit der Zuordnung Vertex, Fragment oder Geometrieshader, also der eigentlichen Pipeline zu tun. Wie diese Shaderkerne verwendet werden (und auch wann wie viele) regelt der Treiber bzw. die GPU selbst.

Autor:  mathias [ Mo Aug 04, 2014 16:51 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

Zitat:
Nein, moderne Karten haben i.d.R. mehrere Tausend Shaderkerne die unabhängig voneinander z.B. Texel berechnen können.

Wen ich ein Dreieck zeichne, kann es sein, das die GPU für jedes Pixel eine eigene Pipeline verwendet ?

Autor:  yunharla [ Mo Aug 04, 2014 17:32 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

mathias hat geschrieben:
Zitat:
Nein, moderne Karten haben i.d.R. mehrere Tausend Shaderkerne die unabhängig voneinander z.B. Texel berechnen können.

Wen ich ein Dreieck zeichne, kann es sein, das die GPU für jedes Pixel eine eigene Pipeline verwendet ?


Nein,das hat nichts mit deinen Objekten zu tun. Die Pipeline ist sozusagen die äußere Funktion, welche die Reihenfolge der einzelnen Unterprogramme festlegt. Sprich hier wird halt festgelegt das der Vertexshader vor dem Fragmentshader ausgeführt wird. Das hat aber noch nichts damit zu tun wie die einzelnen Kerne ausgelastet werden. Das geschieht viel tiefer im Treiber. Denk zum Beispiel mal an einen If-Zweig, der für Pixel A ausgeführt wird aber nicht für Pixel B. In diesen Fall wäre Pixel B schneller fertig als Pixel A und der Kern könnte nun wieder eine andere Aufgabe übernehmen.

Nimm das jetzt aber bitte nicht wörtlich, denn soweit ich weiß können GPUs noch nicht soweit optimieren. ^^

Autor:  OpenglerF [ Mo Aug 04, 2014 20:47 ]
Betreff des Beitrags:  Re: Aufrufe im Shader

Ich denke, es ist ein wenig missverständlich zu sagen, sie wären noch nicht so weit optimiert. Schließlich sind diese teilweise inhärenten Eigenschaften der GPU der Grund dafür, warum sie bei gut parallelisierbaren Problemen wie Grafik generell so weit weit schneller ist als die CPU.

Verzweigungen werden teilweise beide Pfade ausgeführt. Das liegt zum Beispiel daran weil die Pixel oder besser gesagt Fragmente in Blöcken parallel ausgeführt werden und dabei die Anweisungen teilen. Wenn einer anders springt als die anderen, geht das nicht. Dieses Gruppieren ist teilweise auch notwendig. Man denke nur mal zum Beispiel an die Ableitungsfunktion. Das geht sonst überhaupt nicht.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/