DX11 Inputlayout Shader Differenzen [GELÖST]

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
furbolg
Beiträge: 10
Registriert: 03.03.2009, 01:55

DX11 Inputlayout Shader Differenzen [GELÖST]

Beitrag von furbolg »

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
Zuletzt geändert von furbolg am 25.10.2012, 16:03, insgesamt 1-mal geändert.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 Inputlayout Shader Differenzen

Beitrag von dot »

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.
furbolg
Beiträge: 10
Registriert: 03.03.2009, 01:55

Re: DX11 Inputlayout Shader Differenzen

Beitrag von furbolg »

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.) ?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 Inputlayout Shader Differenzen

Beitrag von dot »

Ich versteh nicht ganz, was genau ist denn das Problem mit der "Shader <-> InputLayout Geschichte " bzw. was genau ist dabei unklar!?
furbolg
Beiträge: 10
Registriert: 03.03.2009, 01:55

Re: DX11 Inputlayout Shader Differenzen

Beitrag von furbolg »

Ich würde gerne die ganze Geschichte automatisieren z.B.

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(...);
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 ?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 Inputlayout Shader Differenzen

Beitrag von dot »

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...
furbolg
Beiträge: 10
Registriert: 03.03.2009, 01:55

Re: DX11 Inputlayout Shader Differenzen

Beitrag von furbolg »

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...
Ach so, nochmal kurz für mich:
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 ?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 Inputlayout Shader Differenzen

Beitrag von dot »

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 ?
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:2. Wenn der Shader Attribute benötigt welche im InputLayout nicht vorkommen, dann erhalte ich eine Exception/nullptr ?
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
Beiträge: 10
Registriert: 03.03.2009, 01:55

Re: DX11 Inputlayout Shader Differenzen

Beitrag von furbolg »

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.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 Inputlayout Shader Differenzen

Beitrag von dot »

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... ;)
Antworten