Seite 1 von 1

(gelöst) Direct3DShaderValidatorCreate9()

Verfasst: 05.07.2011, 11:16
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ß

Re: Direct3DShaderValidatorCreate9()

Verfasst: 05.07.2011, 11:23
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.

Re: Direct3DShaderValidatorCreate9()

Verfasst: 05.07.2011, 11:34
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 …

Re: Direct3DShaderValidatorCreate9()

Verfasst: 23.02.2013, 18:35
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.

Re: (gelöst) Direct3DShaderValidatorCreate9()

Verfasst: 24.02.2013, 15:44
von mnemonix
Und wie sieht die Situation jetzt aus nachdem du den Profiler mit den aktuellen Symbolinfos versorgt hast? Bin neugierig. :)

Re: (gelöst) Direct3DShaderValidatorCreate9()

Verfasst: 24.02.2013, 16:06
von dot
Untitled.png
Untitled2.png
Kann ich jedem nur empfehlen... ;)

Re: (gelöst) Direct3DShaderValidatorCreate9()

Verfasst: 24.02.2013, 16:11
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.