Signatures

Une signature de nuanceur est une liste des paramètres qui sont en entrée ou en sortie d’une fonction de nuanceur. Dans Direct3D 10, les phases adjacentes partagent efficacement un tableau de registre, où le nuanceur de sortie (ou étape de pipeline) écrit des données dans des emplacements spécifiques du tableau de registre et où le nuanceur d’entrée doit lire à partir des mêmes emplacements. L’API utilise des signatures de nuanceur pour lier des sorties de nuanceur avec des entrées sans surcharge de résolution sémantique.

Dans Direct3D 10, les signatures d’entrée sont générées à partir d’une déclaration d’entrée de nuanceur et la signature de sortie est générée à partir d’une déclaration de sortie de nuanceur. Une signature d’entrée est dite compatible avec une signature de sortie lorsque la signature de sortie est un sous-ensemble strict (correspondance entre le type d’argument et l’ordre) de la signature d’entrée. La façon la plus simple d’y parvenir consiste à lier les entrées et sorties correspondantes du nuanceur par le même type de structure.

Voici un exemple de signatures compatibles.

// 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;
}

Voici un exemple de signatures incompatibles ; l’ordre des paramètres dans la signature d’entrée ne correspond pas à l’ordre dans la signature de sortie.

// 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 est un sous-ensemble compatible de VSOut (les deux premières entrées correspondent à la fois au type et à l’ordre avec les deux premières entrées dans VSOut). Toutefois, PSInFails est incompatible, car le classement ne correspond pas à VSOut.

Fonctions