Firme
Una firma dello shader è un elenco dei parametri che sono input o output da una funzione shader. In Direct3D 10 le fasi adiacenti condividono in modo efficace una matrice di registri, in cui lo shader di output (o la fase della pipeline) scrive i dati in posizioni specifiche nella matrice di registrazione e lo shader di input deve leggere dalle stesse posizioni. L'API usa firme shader per associare gli output dello shader agli input senza il sovraccarico della risoluzione semantica.
In Direct3D 10 le firme di input vengono generate da una dichiarazione di input shader e la firma di output viene generata da una dichiarazione shader-output. Si dice che una firma di input sia compatibile con una firma di output quando la firma di output è un subset rigoroso (tipo di argomento e corrispondenza dell'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 non è compatibile perché l'ordinamento non corrisponde a VSOut.
Argomenti correlati