簽名
著色器簽章是著色器函式輸入或輸出的參數清單。 在 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 不符。
相關主題