Verwenden von Konstanten direkt in der Stammsignatur

Anwendungen können Stammkonstanten in der Stammsignatur definieren, jeweils als Satz von 32-Bit-Werten. Sie werden in high Level Shading Language (HLSL) als Konstantenpuffer angezeigt. Beachten Sie, dass Konstantenpuffer aus historischen Gründen als Sätze von 4x32-Bit-Werten betrachtet werden.

Jede Gruppe von Benutzerkonstanten wird als skalare Array von 32-Bit-Werten behandelt, dynamisch indizierbar und schreibgeschützt vom Shader. Die Indizierung außerhalb der Grenzen für einen bestimmten Satz von Stammkonstanten führt zu undefinierten Ergebnissen. In HLSL können Datenstrukturdefinitionen für die Benutzerkonstanten bereitgestellt werden, um ihnen Typen zuzuweisen. Wenn die Stammsignatur beispielsweise einen Satz von vier Stammkonstanten definiert, kann HLSL die folgende Struktur darauf überlagern.

struct DrawConstants
{
    uint foo;
    float2 bar;
    int moo;
};
ConstantBuffer<DrawConstants> myDrawConstants : register(b1, space0);

Arrays sind in Konstantenpuffern, die Stammkonstanten zugeordnet werden, nicht zulässig, da die dynamische Indizierung im Stammsignaturbereich nicht unterstützt wird. Beispielsweise ist es ungültig, einen Eintrag wie im Konstantenpuffer float myArray[2];zu haben. Ein Konstantenpuffer, der Stammkonstanten zugeordnet ist, kann selbst kein Array sein. Daher ist es ungültig, Stammkonstanten zuzuordnen cbuffer myCBArray[2] .

Konstanten können teilweise festgelegt werden. Wenn die Stammsignatur beispielsweise vier 32-Bit-Werte bei RootTableBindSlot 2 definiert, kann eine beliebige Teilmenge der vier Konstanten gleichzeitig festgelegt werden (die anderen bleiben unverändert). Dies kann in Bündeln nützlich sein, die den Stammsignaturzustand erben und teilweise ändern können.

Achten Sie beim Festlegen von Konstanten auf das vom Shader erwartete Layout des Konstantenpuffers. Es ist z. B. möglich, dass Konstanten bis zu vec4 Begrenzungen aufgefüllt werden. Um das erwartete Layout zu überprüfen, überprüfen Sie die Reflektionsinformationen aus dem HLSL-Shader.

Die folgenden APIs (über die ID3D12GraphicsCommandList-Schnittstelle ) dienen zum Direkten Festlegen von Konstanten in der Stammsignatur:

Weitere Informationen finden Sie in der D3D12_ROOT_CONSTANTS-Struktur .

Stammsignaturen