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.
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.
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.
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 ?
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.
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. ^^
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.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.