Gibt es DirectX-Richtlinien zum Binden und Aufheben der Bindung von Ressourcen zwischen Draw-Aufrufen?

Alle DirectX-Bücher und Tutorials werden dringend empfohlenReduzierung der Ressourcenzuweisungen zwischen Ziehungsaufrufen auf ein Minimum - Ich kann jedoch keine Richtlinien finden, die detailliertere Informationen enthalten. Nach Durchsicht vieler im Web gefundener Beispielcodes bin ich zu dem Schluss gekommen, dass Programmierer in Bezug auf dieses Thema völlig unterschiedliche Codierungsprinzipien haben. Einige setzen und setzen sogar

VS/PS 
VS/PS ResourceViews
RasterizerStage 
DepthStencilState
PrimitiveTopology
... 

vorher und nachherjeden Anruf zeichnen (obwohl das Setup unverändert bleibt) und andere nicht.

Ich denke, das ist ein bisschen übertrieben ...

Aus meinen eigenen Experimenten habe ich herausgefunden, dass die einzigen Ressourcen, die ich bei jedem Draw Call binden muss, die sindShaderResourceViews (zuVS undPS in meinem Fall). Diese Anforderung kann durch die Verwendung von Compute-Shadern verursacht werden, da ich die Bindung aufhebeUAVs zu Puffern, die gebunden sind anVS / PS später.

Ich habe viele Stunden Arbeit verloren, bevor ich feststellte, dass dieses Nachbinden notwendig war. Und ich denke, viele Programmierer sind sich auch nicht sicher und ziehen es vor, ein wenig zu viel zu lösen und erneut zu binden, anstatt in eine ähnliche Falle zu geraten.

Frage 1: Gibt es zumindest einige Faustregeln zu diesem Problem?

Frage 2: Ist es möglich, dass meineShaderResourceViews gebunden anVS/PS sind vom Treiber / DirectX-Kern ungebunden, weil ich bindeUAVs zu den gleichen Puffern vor dem CS-VersandaufrufSRVs mich selber)?

Frage 3: Ich setze nicht einmalVS/PS auf null setzen, bevor ich die Compute-Shader verwende. Funktioniert ohne Probleme, aber ich bin mir ständig unsicher, ob ich meine nächste Falle mit einem so "faulen" Ansatz ausgrabe oder nicht.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage