Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

01.11.2012, 12:23

Cg Shader Problem mit ddx/ddy und for/while

Hi allerseits,
Ich arbeite immer noch an meinem allgemeinen DeferredRenderer in Cg für meine Engine.
Auf meinem Desktop PC mit GTX 670 und OpenGL 4.3 (ist wahrscheinlich ein Compatibility Profile, steht aber nicht in dem Versions String) läuft alles wunderbar,
aber auf meinem Laptop mit ATI Mobility (ich glaube ne 4000er oder so) mit "OpenGL 4.2 Compatibility Profile" kann der Shader "für dieses Profile" nicht kompiliert werden.
Und zwar wegen der ddx/ddy Funktionen und der for/while Schleifen.

In irgend einem Forum habe ich gelesen, man solle "#pragma target 4.0" an den Shader Code am Anfang anhängen, ein anderer User meinte aber es würde nichts nutzen und ich kann das gerade nicht testen.

Kennt sich jemand mit Cg aus und weiß wie ich Problem lösen kann? Ich hoffe ich muss jetzt nicht noch ein komplett neues RenderSystem schreiben, das nur das OpenGL 3 bzw. 4 "Core Profile" verwendet :-(
Meine Arbeitskollegin meinte eben sogar "Lass die Finger von Cg, das ist veraltet". Falls das stimmt, muss ich meinen DeferredRenderer für GLSL, HLSL 3 und HLSL 5 schreiben, damit die meisten RenderSystem unterstützt werden.
Afaik unterstützt Direct3D11 nämlich nur noch HLSL 4 und 5.

Danke für eure Hilfe im Voraus :-)
Lukas

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.11.2012, 12:33

ddx und ddy in einer Loop ist keine gute Idee. Im besten Fall ist das Ergebnis undefiniert, sobald nicht wirklich alle Pixel den selben Pfad nehmen (exakt die gleiche Anzahl an Iterationen machen)...

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

01.11.2012, 12:35

Achso, nein nein. Ich meine nur, dass ich ddx, ddy und eine for-Schleife in meinem Code habe (die while Schleife hatte ich auch schon getestet).
Nicht aber, dass ich ddx und ddy inerhalb dieser Schleife verwende.
Diese beiden Funktionen brauche ich für das Parallax-Occlusion Mapping und Variance-Shadow-Maps. Sind in beiden Fällen außerhalb der Schleife.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

01.11.2012, 12:38

Vielleicht ein Compilerbug? Kommst du an den generierten GLSL Code ran?

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

5

01.11.2012, 12:41

Ich weiß noch nicht mit welcher Cg Funktion das gehen soll.
Dumme Frage, aber produziert Cg wirklich GLSL code oder ARB vertex/fragment program code? Ich nehme mal an GLSL, aber fragen kostet ja nicht :D

EDIT:
Geht mit "cgGetProgramString", ich probier das heute Nachmittag mal aus.

EDIT #2:
Mal so allgemein in die Runde gefragt: haltet ihr Cg für veraltet? Immerhin ist afaik vor nicht all zu langer Zeit Version 3 erschienen.
Zwar hängt Cg mit dem Feature support immer etwas hinter GLSL hinterher, aber wenn man mit mehreren RenderSystem arbeitet, gibt's nichts besseres, oder?!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

01.11.2012, 12:46

Hängt wohl vom verwendeten Target Profile ab... ;)

http://http.developer.nvidia.com/Cg/cgc.html

Werbeanzeige