DX11 Inputlayout Shader Differenzen [GELÖST]
DX11 Inputlayout Shader Differenzen [GELÖST]
Hallo ZFX'ler,
nach langer Zeit will ich mich wieder mit dem Thema 3D bzw. DX beschäftigen.
Nun schwirrt mir folgende Frage im Kopf herum. Wie verhält sich ein Shader wenn das InputLayout nicht übereinstimmt ?
Zum Beispiel wenn das InputLayout POSITION, TEXCOORD und NORMAL enthält. Wie wirkt sich das auf Shader aus die mehr bzw weniger Attribute verlangen ?
Es geht mir bei diesen Fragen darum ob es Sinn macht für ein Spiel/Engine ein möglichst umfangreiches InputLayout ( alle möglichen Attribute ob unnötig oder nicht ) vorzugeben oder ob man
besser die InputLayouts "dynamisch" zusammensetzen sollte.
mfg
Furb
nach langer Zeit will ich mich wieder mit dem Thema 3D bzw. DX beschäftigen.
Nun schwirrt mir folgende Frage im Kopf herum. Wie verhält sich ein Shader wenn das InputLayout nicht übereinstimmt ?
Zum Beispiel wenn das InputLayout POSITION, TEXCOORD und NORMAL enthält. Wie wirkt sich das auf Shader aus die mehr bzw weniger Attribute verlangen ?
Es geht mir bei diesen Fragen darum ob es Sinn macht für ein Spiel/Engine ein möglichst umfangreiches InputLayout ( alle möglichen Attribute ob unnötig oder nicht ) vorzugeben oder ob man
besser die InputLayouts "dynamisch" zusammensetzen sollte.
mfg
Furb
Zuletzt geändert von furbolg am 25.10.2012, 16:03, insgesamt 1-mal geändert.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: DX11 Inputlayout Shader Differenzen
Das Input Layout muss mit der Input Signature des Shader exakt übereinstimmen:
MSDN hat geschrieben:Each input-layout object is created based on a shader signature; this allows the API to validate the input-layout-object elements against the shader-input signature to make sure that there is an exact match of types and semantics. You can create a single input-layout object for many shaders, as long as all of the shader-input signatures exactly match.
Re: DX11 Inputlayout Shader Differenzen
Hi dot,
danke für die Antwort.
Wie regelt man sonst diese Shader <-> InputLayout Geschichte ? Gebt ihr den Shadern entsprechende Namen (ptn_foo.hlsl etc.) ?
danke für die Antwort.
Wie regelt man sonst diese Shader <-> InputLayout Geschichte ? Gebt ihr den Shadern entsprechende Namen (ptn_foo.hlsl etc.) ?
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: DX11 Inputlayout Shader Differenzen
Ich versteh nicht ganz, was genau ist denn das Problem mit der "Shader <-> InputLayout Geschichte " bzw. was genau ist dabei unklar!?
Re: DX11 Inputlayout Shader Differenzen
Ich würde gerne die ganze Geschichte automatisieren z.B.
Das würde einen Shader mit POSITION und TEXCOORD benötigen.
Wenn jetzt noch Normals dazu kommen müsste ein anderer Shader gewählt werden ( ptn_foo.hlsl statt pt_foo.hlsl ).
Oder verstehe ich das falsch ?
Code: Alles auswählen
Mesh würfel; // Mesh ist eine selbstprogrammierte Klasse welche die nötigen BufferObjekte etc enthält
würfel.addvertex(...);
würfel.adduv(...);
Wenn jetzt noch Normals dazu kommen müsste ein anderer Shader gewählt werden ( ptn_foo.hlsl statt pt_foo.hlsl ).
Oder verstehe ich das falsch ?
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: DX11 Inputlayout Shader Differenzen
Das hängt alles irgendwie einfach viel zu sehr vom Design deiner Anwendung ab, als dass man da irgendwas Allgemeines dazu sagen könnte. Auch ist mir immer noch unklar, auf was genau für eine Antwort du wartest. Du kannst verschiedenste Shader mit verschiedensten Input Formaten verknüpfen. Für jede Kombination aus Input Format und Shader Signature brauchst du eben ein eigenes Input Layout; das ist ja gerade der Sinn des Input Layout: Es verknüpft den Shader mit den Daten. Deine Inputdaten können aber z.B. mehr enthalten als der Shader nutzt, die überflüssigen Daten werden dann eben nicht verwendet...
Re: DX11 Inputlayout Shader Differenzen
Ach so, nochmal kurz für mich:dot hat geschrieben:Für jede Kombination aus Input Format und Shader Signature brauchst du eben ein eigenes Input Layout; das ist ja gerade der Sinn des Input Layout: Es verknüpft den Shader mit den Daten. Deine Inputdaten können aber z.B. mehr enthalten als der Shader nutzt, die überflüssigen Daten werden dann eben nicht verwendet...
1. Das heisst ich kann im InputLayout spezifizieren über welche Attribute das Model/Mesh verfügt und der Shader nutzt die Daten welche er benötigt ?
2. Wenn der Shader Attribute benötigt welche im InputLayout nicht vorkommen, dann erhalte ich eine Exception/nullptr ?
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: DX11 Inputlayout Shader Differenzen
Nein, das Layout verknüpft einen Shader einer konkreten Signatur mit Daten einer konkreten Form. Beim Erzeugen des Input Layout übergibst du ein Array aus Input Element Deskriptoren, welches dein Daten Layout beschreibt und eine Shader Signatur. Das resultierende Input Layout verbindet Daten genau dieser Form mit Shadern genau dieser Signatur. Anderes Daten Layout und/oder andere Signatur benötigen ein anderes Input Layout. Du kannst aber eben für beliebige Vertex Buffer und beliebige Shader das selbe Input Layout verwenden, so lange da daten das selbe Daten Layout haben und die Shader sie selbe Input Signatur...furbolg hat geschrieben:1. Das heisst ich kann im InputLayout spezifizieren über welche Attribute das Model/Mesh verfügt und der Shader nutzt die Daten welche er benötigt ?
Vermutlich wird einfach die Erstellung des Layout fehlschlagen. Die Debug Runtime sollte dich auf jeden Fall darauf hinweisen. Unter gewissen Umständen schlägt auch nichts fehl und du hast dann eben sowas wie undefiniertes Verhalten. Im schlechtesten Fall funktioniert es auf manchen Karten und Treibern einfach und du bemerkst es nicht, im besten Fall stürzt es ab. In jedem Fall ist es ein Bug...furbolg hat geschrieben:2. Wenn der Shader Attribute benötigt welche im InputLayout nicht vorkommen, dann erhalte ich eine Exception/nullptr ?
Re: DX11 Inputlayout Shader Differenzen
Danke dot für deine Hilfestellung, ich werde mir das ganze am Wochende in Ruhe nochmal genauer anschauen.
Ist schon ne kleine Umstellung von Dx9 (FFP ;)) auf DX11 (Shader).
Aber danke für deine Erklärungen.
Ist schon ne kleine Umstellung von Dx9 (FFP ;)) auf DX11 (Shader).
Aber danke für deine Erklärungen.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: DX11 Inputlayout Shader Differenzen
Naja, in D3D9 gabs auch schon VertexDeclarations. Aber gut, wenn du nur mit der FFP gearbeitet hast, dann ist das natürlich eine gewaltige Umstellung... ;)