(gelöst) Direct3DShaderValidatorCreate9()

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst) Direct3DShaderValidatorCreate9()

Beitrag von Krishty »

Hi,

Meine Anwendung verbringt mehr CPU-Zeit in besagter Funktion als in allem Text, den ich selber geschrieben habe. (Aufgerufen wird sie von Present() aus, also beim Abarbeiten der Draw Calls.) Kann mir jemand sagen, was es damit auf sich hat und ob das jetzt normal oder schlecht ist?

Ist das dieses berühmte „Jeder Shader wird verifiziert bevor ihn die GPU ausführt“, was sie mit D3D10 abgeschafft haben?

Gruß
Zuletzt geändert von Krishty am 23.02.2013, 18:36, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Direct3DShaderValidatorCreate9()

Beitrag von CodingCat »

Hm, schon versucht mit D3DXSHADER_SKIPVALIDATION zu compilieren? Auch wenn das hier nicht viel Hoffnung macht: :-/
Do not validate the generated code against known capabilities and constraints. This option is recommended only when compiling shaders that are known to work (that is, shaders that have compiled before without this option). Shaders are always validated by the runtime before they are set to the device.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Direct3DShaderValidatorCreate9()

Beitrag von Krishty »

CodingCat hat geschrieben:Hm, schon versucht mit D3DXSHADER_SKIPVALIDATION zu compilieren? Auch wenn das hier nicht viel Hoffnung macht: :-/
Japp, das bezieht sich nur auf die Validierung im Shader Compiler und hat keine Bedeutung für den Bytecode, der am Ende rauskommt …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Direct3DShaderValidatorCreate9()

Beitrag von Krishty »

Der Profiler hatte keine Symbolinformationen geladen, und Direct3DShaderValidatorCreate9() war wohl einfach die nächste Funktion, die in der Nähe rumlag. Die Lösung war also schlicht, den Profiler mit aktuellen Symbolinformationen zu versorgen – jetzt sieht die Situation komplett anders aus.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
mnemonix
Establishment
Beiträge: 101
Registriert: 09.04.2010, 20:38

Re: (gelöst) Direct3DShaderValidatorCreate9()

Beitrag von mnemonix »

Und wie sieht die Situation jetzt aus nachdem du den Profiler mit den aktuellen Symbolinfos versorgt hast? Bin neugierig. :)
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: (gelöst) Direct3DShaderValidatorCreate9()

Beitrag von dot »

Untitled.png
Untitled2.png
Kann ich jedem nur empfehlen... ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: (gelöst) Direct3DShaderValidatorCreate9()

Beitrag von Krishty »

@dot: Ich benutze aber nicht den in Visual Studio integrierten Profiler … Very Sleepy hat eine ähnliche Funktion aber zum Glück auch.

@mnemonix: Ich habe einen ziemlich exotischen Anwendungsfall, in dem ich alten Kram emuliere, und strikt die Render-Ordnung einhalten muss.

Die Situation ist immernoch katastrophal; das Umschalten zwischen Vertexdaten, Texturen, und Shader-Konstanten mit zahlreichen (einigen tausend) sehr kleinen (im Schnitt 15 Primitives) Draw Calls tötet die Leistung noch immer. Der letzte Leistungssprung um eine Prozent kam zustande indem ich Backface Culling auf der CPU durchgeführt habe.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten