Shader-Compiler wird jedesmal neu geladen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4858
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Shader-Compiler wird jedesmal neu geladen?

Beitrag von Schrompf »

Hallo Leute,

während der Ausführung all meiner Programme aus Visual Studio heraus füllt sich das Log mit Zeilen wie z.B. der folgenden:
VC hat geschrieben:"Spladitor_Dbg.exe": "C:\Windows\SysWOW64\D3DCompiler_43.dll" geladen, PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
"Spladitor_Dbg.exe": "C:\Windows\SysWOW64\D3DCompiler_43.dll" entladen.
Heißt das, dass der bei jedem Shader-Kompilieren die DLL neu lädt und danach wieder rauswirft? Wie lange dauert sowas üblicherweise? Und wie könnte ich das verhindern, falls es mehr als ein paar Mikrosekunden kosten sollte? Ist für Splatter jetzt nicht so dramatisch, aber die Splitterwelten-Engine mit ihren vielen hundert dynamisch generierten Shadern könnte davon profitieren.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Krishty
Establishment
Beiträge: 8245
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Shader-Compiler wird jedesmal neu geladen?

Beitrag von Krishty »

Du solltest Shader überhaupt nicht zur Laufzeit kompilieren; das dauert nämlich deutlich länger als das Laden und Entladen der DLL.

Meine Glare-Shader haben mitunter 45 Minuten kompiliert; sowas willst du wirklich nicht beim Programmstart machen.

Ab VS 2012 kannst du .hlsl-Dateien zum Projekt hinzufügen und sie dann entweder in eine Binärdatei oder in einen C-Header kompilieren lassen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4858
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Shader-Compiler wird jedesmal neu geladen?

Beitrag von Schrompf »

Das ist eine nicht ganz zur Frage passende Antwort, aber eigentlich stimme ich Dir zu. Bei Splatter zumindest. Die Splitterwelten wie gesagt *generieren* Shader nach Parametervorgaben. Die paar hundert Permutationen, die am Ende rauskommen, sind nur ein kleines Subset der möglich Millionen Kombinationen. Nix mit Vorkompilieren.

Irgendwann bau ich das Ding auf Tiled Forward Shading um, dann werden fast alle Generierungs-Parameter zu dynamischen Verzweigungen im Shadercode.... aber hoffentlich hinreichend kohärent.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: Shader-Compiler wird jedesmal neu geladen?

Beitrag von mnemonix »

Hm, vielleicht hilft dir das ein bisschen weiter.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4858
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Shader-Compiler wird jedesmal neu geladen?

Beitrag von Schrompf »

Ja, Danke. Das hilft. Ich lese da primär raus, dass ich mir um die Zeiten für das Laden und Entladen der DLL keine Platte machen muss.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Shader-Compiler wird jedesmal neu geladen?

Beitrag von TGGC »

Schrompf hat geschrieben:Die Splitterwelten wie gesagt *generieren* Shader nach Parametervorgaben. Die paar hundert Permutationen, die am Ende rauskommen, sind nur ein kleines Subset der möglich Millionen Kombinationen. Nix mit Vorkompilieren.
Dies machen auch viele aktuelle Spiele so, von daher kein Problem.
Antworten