Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 12:48

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Aufrufe im Shader
BeitragVerfasst: So Jan 19, 2014 17:43 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

_________________
OpenGL


Zuletzt geändert von mathias am So Jan 19, 2014 18:29, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: So Jan 19, 2014 17:55 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: So Jan 19, 2014 18:33 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: Mi Apr 09, 2014 18:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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 ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: Mi Apr 09, 2014 18:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: Mo Aug 04, 2014 16:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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 ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: Mo Aug 04, 2014 17:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
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. ^^

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Aufrufe im Shader
BeitragVerfasst: Mo Aug 04, 2014 20:47 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.064s | 19 Queries | GZIP : On ]