PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HLSL /GLSL Unterschiede?


EcHo
2007-10-12, 03:15:44
Beide Shadersprachen dienen dem gleichen Zweck. Wie einfach ist es möglich, von einem in den anderne Code zu überfüren? Nur eine etwas andere Syntax? Gibt es Features, welche eine Sprache gegenüber der anderen hat? Ist jeder Shader 1 zu 1 in die andere übertragbar? Wo gehen die Philosophien andere Wege? Könnte man einen Konverter schreiben, der Code zwischen beiden Sprachen konvertiert?

del_4901
2007-10-12, 03:36:21
Wenn du dir Gedanken über solche Sachen machst, dann nimm Cg. Dank Shader-interfaces ist es eh die bessere Sprache von den 3en. Aber mal abgesehen davon nehmen die sich alle nichts.

ScottManDeath
2007-10-12, 03:39:44
Jo, und CG hat auch ein GLSL Backend, Semantics und Annotations und die Vektordatentypen sind nicht häßlich =)

tokugawa
2007-10-12, 17:50:12
Und bei GLSL hast du zusätzlich die Gefahr dass es nur auf den Karten eines Herstellers läuft. NVIDIA und ATI sind nämlich teilweise unterschiedlich "tolerant" gegenüber der ziemlich kryptischen Typstrenge von GLSL.

Coda
2007-10-12, 18:22:35
ATi benützt offenbar das GLSL-Frontend von 3DLabs, das wohl praktisch standardkonform ist, also sollten Shader die auf ATi laufen auch überall anders laufen.

tokugawa
2007-10-12, 19:57:32
ATi benützt offenbar das GLSL-Frontend von 3DLabs, das wohl praktisch standardkonform ist, also sollten Shader die auf ATi laufen auch überall anders laufen.

Klar, aber eben umgekehrt nicht. Und das ist schon lästig.

Wenn man standardkonform entwickelt - etwa auf ATI, hat man mit kryptischer Syntax (bzw. forcierte Unlesbarkeit aufgrund verlangter expliziter Typkonversion usw) bzw einer intoleranten Strenge, die teilweise sehr zäh ist, zu kämpfen.

Wenn man eine etwas schlauere tolerantere Implementation nutzt wie auf NVIDIA, dann hat man umgekehrt damit zu kämpfen dass es auf ATI dann unter Umständen nicht läuft.

Das allein ist ein guter Grund, Cg zu verwenden.

Gast
2007-10-12, 20:45:47
Wenn man standardkonform entwickelt - etwa auf ATI, hat man mit kryptischer Syntax (bzw. forcierte Unlesbarkeit aufgrund verlangter expliziter Typkonversion usw) bzw einer intoleranten Strenge, die teilweise sehr zäh ist, zu kämpfen.

Beispiel?
Ich dachte GLSL wäre C ähnlich, was ist da kryptisch oder unlesbar?

Xmas
2007-10-13, 01:52:07
Beide Shadersprachen dienen dem gleichen Zweck. Wie einfach ist es möglich, von einem in den anderne Code zu überfüren? Nur eine etwas andere Syntax? Gibt es Features, welche eine Sprache gegenüber der anderen hat? Ist jeder Shader 1 zu 1 in die andere übertragbar? Wo gehen die Philosophien andere Wege? Könnte man einen Konverter schreiben, der Code zwischen beiden Sprachen konvertiert?
Es gibt einen Konverter von HLSL nach GLSL: http://sourceforge.net/projects/hlsl2glsl

Bei Vergleichen kommt es natürlich auf die Sprachversionen an. D3D10-HLSL entspricht etwa GLSL+EXT_gpu_shader4, allerdings fehlt Letzterem noch der Zugriff auf Multisample-Texturen.
GLSL 1.20 fehlen gegenüber D3D9-HLSL z.B. die textureGrad-Funktionen.

tokugawa
2007-10-13, 02:39:19
Beispiel?
Ich dachte GLSL wäre C ähnlich, was ist da kryptisch oder unlesbar?

Man muß für fast jeden Scheiß (Sorry für den Ausdruck) explizit typkonvertieren (anstatt dass der Compiler das implizit selbst checkt), was den Code wirklich sehr häßlich und unlesbar macht. Das mein ich mit kryptisch.

Gast
2007-10-13, 15:29:38
ATi benützt offenbar das GLSL-Frontend von 3DLabs, das wohl praktisch standardkonform ist, also sollten Shader die auf ATi laufen auch überall anders laufen.
Haha. Das wird wohl der Grund sein, warum bei ATi schon eine X1xxx Proteine falten kann, während nicht mal der G80 dazu in der Lage ist. :D

Coda
2007-10-13, 16:29:32
Nö, da wird Direct3D verwendet.

Gast
2007-10-13, 21:18:08
Man muß für fast jeden Scheiß (Sorry für den Ausdruck) explizit typkonvertieren (anstatt dass der Compiler das implizit selbst checkt), was den Code wirklich sehr häßlich und unlesbar macht. Das mein ich mit kryptisch.

Du meinst so etwas?


int x = 10;
double a = 4.3;

a = a + (double) x;

tokugawa
2007-10-13, 22:29:43
Haha. Das wird wohl der Grund sein, warum bei ATi schon eine X1xxx Proteine falten kann, während nicht mal der G80 dazu in der Lage ist. :D

Nochmal für die mental Schwächeren unter uns: GLSL-Shader schreibt man leichter auf NVIDIA-Karten, da deren Compiler nicht so streng ist. Sprich eher laufen weniger GLSL-Shader (wobei das ja dann laut Standard dann keine mehr sind, oder zumindest mit falscher Syntax) auf ATI als auf NVIDIA.

Du meinst so etwas?


int x = 10;
double a = 4.3;

a = a + (double) x;


Sowas und viele andere Beispiele.

Aquaschaf
2007-10-14, 01:37:09
Ich bin von CG wieder dazu übergegangen alles einmal in HLSL und in GLSL zu schreiben. Zumindest als ich es das letzte Mal ausprobierte hatte CG 1.5 noch einige Bugs durch die es für mich nicht wirklich brauchbar war.