Freigeben über


Signaturen

Eine Shadersignatur ist eine Liste der Parameter, die entweder in eine Shaderfunktion eingegeben oder ausgegeben werden. In Direct3D 10 teilen sich benachbarte Phasen effektiv ein Registerarray, bei dem der Ausgabeshader (oder die Pipelinephase) Daten an bestimmte Speicherorte im Registerarray schreibt und der Eingabeshader aus denselben Speicherorten lesen muss. Die API verwendet Shadersignaturen, um Shaderausgaben 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 soll mit einer Ausgabesignatur kompatibel sein, wenn die Ausgabesignatur eine strikte Teilmenge (Argumenttyp und Reihenfolgenübereinstimmung) der Eingabesignatur ist. Die einfachste Möglichkeit, dies zu erreichen, besteht darin, entsprechende Shadereingaben und -ausgaben mit demselben Strukturtyp zu verknüpfen.

Hier sehen Sie 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 stimmt nicht mit der Reihenfolge in der Ausgabesignatur überein.

// 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 entsprechen sowohl Typ als auch Reihenfolge mit den ersten beiden Einträgen in VSOut). PSInFails ist jedoch nicht kompatibel, da die Reihenfolge nicht mit VSOut übereinstimmt.

Funktionen