Ich versuche, DirectX-Code zu schreiben, der einen kompilierten Shader verwendet und mithilfe von Reflektion automatisch Eingabe-Layouts für Vertex-Shader erstellt. Ich habe einen einfachen Vertex-Shader, die ausgelegt ist, den Vorteil von Instancing zu nehmen, ist dies die Eingabe es akzeptiert:DirectX 11 Vertex Shader Reflexion
struct VertexIn
{
// Per-vertex data
float3 pos : POSITION;
float4 color : COLOR;
// Per-instance data
matrix worldMatrix : WORLDMATRIX;
};
Und mein Layout, wenn ich es von Hand zu schreiben, wäre:
// Per-vertex data
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
// Per-instance data.
{ "WORLDMATRIX", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 2, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 },
{ "WORLDMATRIX", 3, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_INSTANCE_DATA, 1 }
wenn ich den kompilierten Shader reflect erhalte ich die richtige Anzahl von Eingabeparametern, aber wenn ich versuche, die Eingänge Beschreibungen durch D3D11_SIGNATURE_PARAMTER_DESC
zu lesen, kann ich die Details nicht finden, dass ich die D3D11_INPUT_ELEMENT_DESC
Mitglieder InputSlot
, InputSlotClass
und InstanceDataStepRate
füllen müssen? Sehe ich in die falsche Beschreibung für diese Information oder bekomme ich durch Nachdenken Instanziierungsdetails nicht möglich?
Wenn dies nicht möglich ist, dann bin zu raten, ich die einzige andere Alternative, die ich habe, ist das erwartete Vertex Eingang Layout und prüfen Sie alle Parameter zu übergeben?
Ah das ist ein fairer Punkt in Bezug auf den Kommentar im Shader selbst, erwähnt eigentlich nichts über Slot-Nummern. Ich mag die semantische Idee, könnte es versuchen. Wenn Sie erwähnen, dass Sie wissen müssen, welche Eingabedaten Sie haben, was meinen Sie damit? Aufrufe wie IASetVertexBuffers? – TheRarebit
Ja, ich meine, dass Sie wissen müssen, welche Scheitelpunktdaten Sie haben (z. B. die mit IASetVertexBuffers). Sie können zwar ein Schema in den Shader einfügen, um dies zu definieren, aber am Ende müssen Sie noch die Eckendaten haben. – MuertoExcobito
Okay yeah Ich verstehe, nicht alles kann automatisiert werden Ich schätze, die Idee der Eingabe-Layout-Generation ist zwar automatisiert, aber vielleicht geben Sie Ihren Vorschlägen einen Versuch. Prost für das Feedback. – TheRarebit