Seite 1 von 1

Shader-Compiler wird jedesmal neu geladen?

Verfasst: 28.04.2013, 19:56
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.

Re: Shader-Compiler wird jedesmal neu geladen?

Verfasst: 28.04.2013, 20:43
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.

Re: Shader-Compiler wird jedesmal neu geladen?

Verfasst: 28.04.2013, 20:50
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.

Re: Shader-Compiler wird jedesmal neu geladen?

Verfasst: 28.04.2013, 22:54
von mnemonix
Hm, vielleicht hilft dir das ein bisschen weiter.

Re: Shader-Compiler wird jedesmal neu geladen?

Verfasst: 28.04.2013, 23:27
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.

Re: Shader-Compiler wird jedesmal neu geladen?

Verfasst: 29.04.2013, 08:34
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.