簽章
著色器簽章是著色器函式輸入或輸出的參數清單。 在 Direct3D 10 中,相鄰階段會有效地共用暫存器陣列,其中輸出著色器 (或管線階段) 將資料寫入暫存器陣列中的特定位置,而且輸入著色器必須從相同的位置讀取。 API 會使用著色器簽章,將著色器輸出與輸入系結,而不會造成語意解析的額外負荷。
在 Direct3D 10 中,輸入簽章是從著色器輸入宣告產生,而輸出簽章則是從著色器輸出宣告產生。 當輸出簽章是嚴格的子集 (引數類型和順序比對) 輸入簽章時,輸入簽章稱為與輸出簽章相容。 若要達成此目的,最簡單的方式是連結相同結構類型的對應著色器輸入和輸出。
以下是相容簽章的範例。
// 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;
}
以下是不相容簽章的範例;輸入簽章中的參數順序不符合輸出簽章中的順序。
// 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 是 VSOut 的相容子集, (前兩個專案符合 VSOut 中前兩個專案的類型和順序) 。 不過,PSInFails 不相容,因為順序與 VSOut 不符。
相關主題