シグネチャ (DirectX HLSL)
シェーダー シグネチャは、シェーダー関数への入力またはシェーダー関数からの出力のいずれかであるパラメーターのリストです。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 の適合するサブセットです (PSInWorks の最初の 2 つのエントリが、型および順序ともに、VSOut 内の最初の 2 つのエントリと一致しています)。しかし、PSInFails は、順序が VSOut と一致していないために不適合となります。