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ß
(gelöst) Direct3DShaderValidatorCreate9()
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
(gelöst) Direct3DShaderValidatorCreate9()
Zuletzt geändert von Krishty am 23.02.2013, 18:36, insgesamt 1-mal geändert.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Direct3DShaderValidatorCreate9()
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
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Direct3DShaderValidatorCreate9()
Japp, das bezieht sich nur auf die Validierung im Shader Compiler und hat keine Bedeutung für den Bytecode, der am Ende rauskommt …CodingCat hat geschrieben:Hm, schon versucht mit D3DXSHADER_SKIPVALIDATION zu compilieren? Auch wenn das hier nicht viel Hoffnung macht: :-/
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Direct3DShaderValidatorCreate9()
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.
Re: (gelöst) Direct3DShaderValidatorCreate9()
Und wie sieht die Situation jetzt aus nachdem du den Profiler mit den aktuellen Symbolinfos versorgt hast? Bin neugierig. :)
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: (gelöst) Direct3DShaderValidatorCreate9()
Kann ich jedem nur empfehlen... ;)
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: (gelöst) Direct3DShaderValidatorCreate9()
@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.
@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.