PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VertexShader 2.0 vs. 1.1


aths
2002-12-03, 00:59:09
In den letzten Tagen beschäftigte mich u.a. folgende Frage: Wieviel Praxisnutzen bringt VS.2.0 von der Funktionalität her? Dass die T&L-Leistung auf DX9-HW höher ist als bei DX8-HW ist, ist schon klar. Was aber bringen die neuen Befehle, bzw. die erweiterte Befehls-Anzahl?

Konkret: Alles, was man "in nächster Zeit" (bis ca. Mitte 2005) so "brauchen" könnte, wäre das auch mit VS.1.1 schon machbar, oder böte 2.0 da einen echten Mehrnutzen?

betasilie
2002-12-03, 01:14:47
Ich habe zwar bei weitem nicht die Kenntnisse, wie einge anderen hier, aber das habe ich mich auch schon gefragt.

Insbesondere der Weg von NVidia, die Funktionalität ihrer VS so auzubohren, bedeutet ja enorme Entwicklungskosten, die sich erstmal für den Kunden (Gamer) rechnen müssen und ich denke, dass Du dich auf den Nutzen in Spielen beziehst.

Fortschritte im AA-Bereich und bei Texturfiltern wären jedenfalls sofort greifbar gewesen.

... ich werde mal die Diskussion verfolgen. :)

Demirug
2002-12-03, 11:53:38
Bei den neuen Befehle gibt es zwei Gruppen arithmetic und Flow Control. Wobei die neuen arithmetic Befehle fast ausschliess nur Makros sind. Dadurch wird lediglich eine verkleinerung des Shadercodes erreicht und möglicherweise den Treibern zusätzliche optimierungs möglichkeiten gegeben.

Das Interesante sind die Flow-Control Befehle. Man kann damit zwar nicht unbedingt neue Effekte erreiche aber die bekannten mit Teilweise weniger aufwand erreichen. Beispiel:

Braucht man innerhalb des Shadercodes eine Schleife so muss man diese bei den 1.1 Shader komplett aufrollen und für jede mögliche Anzahl von Durchläufen einen eigenen Shader schreiben. Mit den 2.0 Shader schreibt man nur noch einen Shader und kann die Anzahl der Durchläufe pro Primitive festlegen mit den 2.0+ sollte es sogar pro vertex möglich sein.

Als folge daraus kann man sagen das VS 2.0 sich positive auf die Performancen auswirken weil man Shaderwechsel minimieren kann und dem entwickler arbeit sparen weil es in Summe weniger Shader schreiben muss.

starfish
2002-12-04, 19:48:45
Originally posted by Demirug
Bei den neuen Befehle gibt es zwei Gruppen arithmetic und Flow Control. Wobei die neuen arithmetic Befehle fast ausschliess nur Makros sind. Dadurch wird lediglich eine verkleinerung des Shadercodes erreicht und möglicherweise den Treibern zusätzliche optimierungs möglichkeiten gegeben.

Das Interesante sind die Flow-Control Befehle. Man kann damit zwar nicht unbedingt neue Effekte erreiche aber die bekannten mit Teilweise weniger aufwand erreichen. Beispiel:

Braucht man innerhalb des Shadercodes eine Schleife so muss man diese bei den 1.1 Shader komplett aufrollen und für jede mögliche Anzahl von Durchläufen einen eigenen Shader schreiben. Mit den 2.0 Shader schreibt man nur noch einen Shader und kann die Anzahl der Durchläufe pro Primitive festlegen mit den 2.0+ sollte es sogar pro vertex möglich sein.

Als folge daraus kann man sagen das VS 2.0 sich positive auf die Performancen auswirken weil man Shaderwechsel minimieren kann und dem entwickler arbeit sparen weil es in Summe weniger Shader schreiben muss.


heisst das jetzt, die vs 2.0 wirken sich "nur" auf die performence aus oder noch auf andere dinge?
ich mein das würde ja heissen, ich kann mit meiner 4200er dann dx9 spiele auch "komplett" sehen?

Doomtrain
2002-12-04, 19:57:30
Originally posted by starfish7985



heisst das jetzt, die vs 2.0 wirken sich "nur" auf die performence aus oder noch auf andere dinge?
ich mein das würde ja heissen, ich kann mit meiner 4200er dann dx9 spiele auch "komplett" sehen?

Ja, aber nur theoretisch. Ganz davon zu schweigen das das Spiel und auch der Treiber derartige Operationen unterstützen müssen, ist der DX8 Shader viel zu langsam beim ausführen der Befehle. Wenn du dich mit 1fps zufrieden gibst....

Fazit: Nein, keine DX9 Effekte auf GeForce4 Karten.

Demirug
2002-12-04, 20:28:03
Was die Makro befehle angeht so werden diese auch schon bei den 1.1 Vertexshadern eingesetzt. Dort hat man nur anstat einer Makro anweisung die entsprechende Anweisungssequenz benutzt.

Die Flow Control Befehle sind aber etwas vollkommen neues und können auch nicht direkt von den DX8 Shadern (1.1) emuliert werden. Die Entwickler müssen solche Schader dann noch einmal für die Version 1.1 erstellen. Bei diesem Vorgang entstehen aus einem 2.0 Shader dann entweder mehrer 1.1 Shader was dann dazu führt das man öfter einen Shaderwechsel durchführen muss (schlecht für die Performance) oder der 1.1 Shader braucht viel mehr takte als der ursprüngliche 2.0 Shader (auch schlecht). Als Alternative bleibt noch das man den Shader von der CPU emulieren läst was aber in der Regel zu noch schlechteren ergebnissen führt.

DX9 Spiele werden sich aber sowieso eher über den Pixel Shader definieren und dort sind die möglichkeiten ein PS 2.0 Programm auf einer DX8 Karte zum laufen noch viel eingeschränkter als bei den Vertex Shader. Teilweise ist es sogar schlicht unmöglich (ausser man gibt sich mit einer Diashow zufrieden).

Also gibt wie auch schon in der Vergangenheit.

Keine DX a Spiele auf DX b Karten wenn a > b.

3dfx Voodoo5 5500
2002-12-15, 21:18:42
gabs den früher schon (so zu dx5 zeiten (war ja imho das erste richtige windows 9x dx)) karten die explitzit für ein dx entwickelt wurden?
die nv1 oder die voodoo1 / 2?

Demirug
2002-12-15, 21:45:49
Originally posted by Wolfsheim1983
gabs den früher schon (so zu dx5 zeiten (war ja imho das erste richtige windows 9x dx)) karten die explitzit für ein dx entwickelt wurden?
die nv1 oder die voodoo1 / 2?

Ja das dunkel Zeitalter der 3D-Grafikchips. Jeder Hersteller hatte seine eigene API und die waren natürlich nicht kompatibel zueinander. OpenGL erschien den meisten Chip hersteller als zu kompliziert um es richtig unterstüzen zu können.

MS hat natürlich bei der Spezifikation von DX mit den Chipherstellern gesprochen aber scheinbar nicht mit den Entwicklern den die D3D API war vor der Version 7 ein Horror für die Entwickler. Mit der Version 8.0 wurde es dann recht gut.

Wenn man sich die Situation anschaut scheint auch die Version 8.0 die erste zu sein die als Basis für Chipentwickler gedient hat. Anders kann ich mir die plötzliche Schwemme an DX8 Chips nicht erklären. Die sogenannten DX7 Chip sind in der Ausprägung zu unterschiedlich um da ein klares gemeinsames Bild zu erkennen.