PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SM3.0 Programmierbarkeit


HolgeRath@work
2005-03-10, 15:44:14
Hallo,

kennt jemand eine guter Übersicht der die Programmierbarkeiten der verschiedenen GPUs vergleicht?

Wenn ich mir eine Shader 3.0 Karte kaufe - welche neuen Möglichkeiten habe ich damit in GLSL - im Vergleich zur 2.0 Karte? Also welche neuen Funktionen, welcher Code würde auf einer SM2 Karte nur in Software laufen, aber auf einer SM3 Karte in Hardware. Insbesondere interessant wären fp blending Operationen.

Aber ebenso auch bezogen auf bedingte Sprünge und eingeschränkte Schleifen und wo genau abgegrenzt werden kann, was den Grad der Programmierbarkeit betrifft.

Vielen Dank

Asmodeus
2005-03-10, 16:43:07
Also, im Grunde könnten man die "3.0" Sache unter GLSL wie folgt darstellen:

1. Zugriff auf Texturen im Vertexprogramm:

Ist überhaupt kein Problem, legst Dir einfach einen sampler im Vertexprogramm an und greifst darauf zu, wie du es schon aus Fragmentprogrammen gewohnt bist. Allerdings habe ich den Eindruck das die ganze Sache noch nicht wirklich performant im Treiber implementiert ist.
Bei "2.0" gibt es keine alternative in Software, geht einfach nicht.

2. Zugriff auf FaceRegister im Fragmentprogramm:

Ist einfach über die Bool-Variable gl_FrontFacing möglich.

3. Schreiben in mehrere Rendertargets im Fragmentprogramm:

Ist möglich, indem man statt gl_FragColor dann gl_FragColor[0] ... gl_FragColor[n] verwendet.

4. Verwenden von Schleifen und dynamischen Verzweigungen im Fragmentprogramm:

Direkten Einfluss hat man von GLSL aus nicht. Man muss sich darauf verlassen, was der Treiber beim Kompilieren daraus macht. Es ist oft aber so, das kurze Verzweigungen mit sehr wenigen Anweisungen ausgerollt werden und nur bei Verzweigungen mit einer entsprechenden Anzahl von Anweisungen diese auch wirklich in einen eigenen Zweig verpackt werden. (Einfach beim Kompilieren mal den Assembly-Code ausgeben lassen).
Bei "2.0" gibt es keine Alternative in Software, es werden also immer alle Befehle abgearbeitet.

5. FP-Texturierung und FP-Blending im Fragmentprogramm:

Meines Wissens nach arbeitet GLSL da transparent, da es wohl z.B. eher eine Frage der verwendeten Texturformate ist. Nur sind die ja nicht abhängig von der Umsetzung in GLSL.
Bei "2.0" Hardware werden dann einfach die bestimmten Texturformate nicht unterstützt.

Gruss, Carsten.

marco42
2005-03-11, 20:46:53
3. Schreiben in mehrere Rendertargets im Fragmentprogramm:

Ist möglich, indem man statt gl_FragColor dann gl_FragColor[0] ... gl_FragColor[n] verwendet.


fl_FragData[]

Asmodeus
2005-03-15, 10:54:30
Zu bemerken wäre noch, dass gl_FrontFacing auch im 71.84 Treiber noch nicht richtig implementiert scheint. Der Cg Compiler Version 1.3 unterstützt zwar die FACE Semantik, aber unter GLSL funktioniert die Sache trotzdem nicht so richtig. Das Kompilieren des GLSL-Codes funktioniert bei mir zwar, aber beim Linken kommt dann immer die Fehlermeldung:

error: unknown fragment shader builtin varying parameter (named gl_FrontFacing) encountered


Gruss, Carsten.