Condividi tramite


Firme

Una firma shader è un elenco dei parametri di input o output da una funzione shader. In Direct3D 10 le fasi adiacenti condividono in modo efficace una matrice di registro, in cui lo shader di output (o la fase della pipeline) scrive i dati in posizioni specifiche nella matrice di registro e lo shader di input deve leggere dalle stesse posizioni. L'API usa le firme shader per associare output shader con input senza sovraccarico della risoluzione semantica.

In Direct3D 10 le firme di input vengono generate da una dichiarazione shader-input e la firma di output viene generata da una dichiarazione shader-output. Una firma di input è detta compatibile con una firma di output quando la firma di output è un subset rigoroso (tipo di argomento e corrispondenza ordine) della firma di input. Il modo più semplice per ottenere questo risultato consiste nel collegare gli input e gli output dello shader corrispondenti in base allo stesso tipo di struttura.

Ecco un esempio di firme compatibili.

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

Ecco un esempio di firme incompatibili; l'ordine dei parametri nella firma di input non corrisponde all'ordine nella firma di output.

// 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 è un subset compatibile di VSOut (le prime due voci corrispondono sia al tipo che all'ordine con le prime due voci in VSOut). Tuttavia, PSInFails è incompatibile perché l'ordinamento non corrisponde a VSOut.

Funzioni