Signaturen
Eine Shadersignatur ist eine Liste der Parameter, die entweder in eine Shaderfunktion eingegeben oder von einer Shaderfunktion ausgegeben werden. In Direct3D 10 teilen sich angrenzende Stufen effektiv ein Registerarray, bei dem der Ausgabe-Shader (oder die Pipelinephase) Daten an bestimmte Speicherorte im Registerarray schreibt und der Eingabe-Shader von denselben Speicherorten aus lesen muss. Die API verwendet Shadersignaturen, um Shader-Ausgaben ohne den Mehraufwand der semantischen Auflösung an Eingaben zu binden.
In Direct3D 10 werden Eingabesignaturen aus einer Shadereingabedeklaration generiert, und die Ausgabesignatur wird aus einer Shaderausgabedeklaration generiert. Eine Eingabesignatur wird als kompatibel mit einer Ausgabesignatur bezeichnet, wenn die Ausgabesignatur eine strikte Teilmenge (Argumenttyp und Reihenfolgen übereinstimmung) der Eingabesignatur ist. Die unkomplizierteste Möglichkeit, dies zu erreichen, besteht in der Verknüpfung der entsprechenden Shadereingaben und -ausgaben mit demselben Strukturtyp.
Hier ist ein Beispiel für kompatible Signaturen.
// Vertex Shader Output Signature
Struct VSOut
{
float4 Pos: SV_Position;
float3 MyNormal: Normal;
float2 MyTex : Texcoord0;
}
// Pixel Shader Input Signature
Struct PSInWorks
{
float4 Pos: SV_Position;
float3 MyNormal: Normal;
}
Hier ist ein Beispiel für inkompatible Signaturen: Die Reihenfolge der Parameter in der Eingabesignatur passt nicht zur Reihenfolge in der Ausgabesignatur.
// Vertex Shader Output Signature
Struct VSOut
{
float4 Pos: SV_Position;
float3 MyNormal: Normal;
float2 MyTex : Texcoord0;
}
// Pixel Shader Input Signature
Struct PSInFails
{
float3 MyNormal: Normal;
float4 Pos: SV_Position;
}
PSInWorks ist eine kompatible Teilmenge von VSOut (die ersten beiden Einträge übereinstimmen sowohl mit dem Typ als auch der Reihenfolge mit den ersten beiden Einträgen in VSOut). PSInFails ist jedoch inkompatibel, da die Reihenfolge nicht mit VSOut übereinstimmen kann.