PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [D3D10] Vertex Layouts


Coda
2007-05-08, 21:15:46
Ich bastel grad an meinem ersten D3D10-Dingens und hab dazu eine Frage, die mir hoffentlich hier jemand beantworten kann.

Je nach Art der Geometrie brauche ich unterschiedlich verschiedene Vertexinputs für eigentlich den gleichen Shader (ich wollte mit einer CBuffer-Variablen festlegen wie viele verwendet werden). D3D10 sagt mir jetzt aber dass ich 16 unterschiedliche Input-Layouts und damit auch Shader anlegen muss.

Geht das auch irgendwie einfacher bzw. effizienter?

Demirug
2007-05-08, 21:34:09
Die Regel ist das du für jede Kombination aus Input Elements und shader Signatur ein Input Layout brauchst. Daran führt kein Weg vorbei weil die Input Layouts ja gerade dazu eingeführt wurden um das teure Just in Time binden zu umgehen.

Im Prinzip kommst du auch mit einem Shader aus. Wenn deine Vertex Buffer aber immer anders aufgebaut sind musst du für jede Variante ein Input Layout anlegen.

Ich würde in dem Fall aber die Anzahl der verwendeten Elemente nicht über eine C Buffer variable festlegen sondern über den Präprozessor die notwendigen Permutationen erzeugen. Nur so kannst du ausschließen das der Shader am Ende nicht doch alles fetched.

Coda
2007-05-08, 21:46:22
Das heißt es ist gar nicht mehr so schlimm in D3D10 mehrere Shader zu verwenden? Bzw. der Overhead für den Shader-State-Change ist nicht mehr so hoch?

Demirug
2007-05-09, 08:01:10
Wie bei allen anderen calls auch wurde der Overhead reduziert. Ein Teil was die VS Changes ja so teuer gemacht hat war ja das jedes Mal die Bindung gesucht werden musste. Der Treiber spielt da natürlich auch noch eine Rolle aber da kann man wie üblich nichts allgemein Gültiges sagen.

mickii
2007-05-09, 09:13:37
das teure an shaderchanges ist nicht die d3d api (gewesen) sondern dass die treiber das eben an die hardware binden muessen, das bleibt weiterhin teuer.

Coda
2007-05-09, 09:53:24
Wie bei allen anderen calls auch wurde der Overhead reduziert. Ein Teil was die VS Changes ja so teuer gemacht hat war ja das jedes Mal die Bindung gesucht werden musste. Der Treiber spielt da natürlich auch noch eine Rolle aber da kann man wie üblich nichts allgemein Gültiges sagen.
Ich dachte halt weil du meintest, dass ich die Permutationen über den Präprozessor erzeugen sollte. Schlägst du das auch für den Pixelshader vor?