Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

1

18.06.2011, 12:09

Direct3D11 Frage: Ist es OK wenn ich das InputLayout des Vertex jedesmal neu setze? [solved]

Hallo zusammen,

ich bastel gerade mal wieder an einer kleinen Direct3D11 Demo rum und da lasse ich mir zuerst einmal einen rotierenden Würfel anzeigen.

Das Layout habe ich wie folgt definiert:


Für den Würfel

C-/C++-Quelltext

1
D3D11_INPUT_ELEMENT_DESC layout[] ={ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, };


Schön - der Würfel rotiert und der Bass dröhnt aus den Boxen ... 8o

Nun möchte ich aber auch noch Text in die gleiche Scene rendern. Da bin ich dann auf die Idee gekommen zusätzlich einfach einen weiteren
Shader zu implementieren, doch der sieht etwas anders aus und benutzt das folgende Layout:

Für den Text

C-/C++-Quelltext

1
D3D11_INPUT_ELEMENT_DESC layout[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 } };


Mein Programm fing sich dann über ein Logfile ordentlich mit Fehlern auszulassen. Denn Shader X mochte das Layout von Shader Y nicht besonders gut leiden. ;(

Ich habe dann einfach bevor ich mit dem rendern der jeweiligen Scene angefangen habe den

C-/C++-Quelltext

1
...md3dDeviceContext->IASetInputLayout(pVertexLayout);


neu gesetzt. Funktioniert super, aber ist das auch best practice?

Schöne Grüße

Fireball

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fireball« (20.06.2011, 11:51)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

18.06.2011, 12:21

Ein Shader wird beim Erstellen an ein InputLayout gelinked. Damit der Shader funktioniert muss dann natürlich auch das InputLayout gesetzt sein für das der Shader erstellt wurde. Was sollte deiner Meinung nach denn passieren wenn Shader A mit einem anderen Layout ausgeführt wird als das für das er gedacht ist!?

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

3

19.06.2011, 14:56

Ein Shader wird beim Erstellen an ein InputLayout gelinked. Damit der Shader funktioniert muss dann natürlich auch das InputLayout gesetzt sein für das der Shader erstellt wurde. Was sollte deiner Meinung nach denn passieren wenn Shader A mit einem anderen Layout ausgeführt wird als das für das er gedacht ist!?
Hallo dot,

ich erhalte ansonsten die folgende Meldung:

Zitat

D3D11: WARNING: ID3D11DeviceContext::Draw: Input vertex slot 0 has stride 20 which is less than the minimum stride logically expected from the current Input Layout (24 bytes). This is OK, as hardware is perfectly capable of reading overlapping data. However the developer probably did not intend to make use of this behavior. [ EXECUTION WARNING #355: DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL ]

Zitat

D3D11: ERROR: ID3D11DeviceContext::Draw: Input Assembler - Vertex Shader linkage error: Signatures between stages are incompatible. The input stage requires Semantic/Index (TEXCOORD,0) as input, but it is not provided by the output stage. [ EXECUTION ERROR #342: DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND ]
Schöne Grüße

Fireball

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

19.06.2011, 15:25

Und was genau wundert dich dran!?

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

20.06.2011, 08:39

Und was genau wundert dich dran!?

Hallo dot,

eigentlich verwundert mich daran gar nichts, denn wenn das Layout nicht zum Shader passt, dann kann es ja nur zu einem Fehler führen.

Ich möchte nur wissen ob es OK ist wenn ich mehrere Shader, also mit unterschiedlichem Layout, vermische und immer dann wenn ich ein Objekt zeichne das Layout mit IASetInputLayout neu setze.

An dieser Stelle muss ich aber auch zugeben, dass ich am Wochenende etwas zu voreilig war, denn mein Text den ich mit einem anderen Shader zeichnen wollte erscheint nicht auf dem Screen. Ist jetzt die Frage ob ich einen Fehler gemacht habe oder es einfach nicht möglich ist mehrere Layouts in einem Device zu benutzen.

Schöne Grüße

Fireball

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

20.06.2011, 09:52

Ich möchte nur wissen ob es OK ist wenn ich mehrere Shader, also mit unterschiedlichem Layout, vermische und immer dann wenn ich ein Objekt zeichne das Layout mit IASetInputLayout neu setze.

Ja klar, was willst du sonst machen!?

Ist jetzt die Frage ob ich einen Fehler gemacht habe oder es einfach nicht möglich ist mehrere Layouts in einem Device zu benutzen.

lol, warum sollte das nicht möglich sein? Klar ist das möglich ;)

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

7

20.06.2011, 11:50

solved

Das ist eine Aussage! Danke dir, dann fange ich mal an den Fehler in meinem Code zu suchen. :-D

Werbeanzeige