シグネチャ

シェーダーシグネチャは、シェーダー関数への入力またはシェーダー関数からの出力であるパラメーターの一覧です。 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 の互換性のあるサブセットです (最初の 2 つのエントリは、型と順序の両方と VSOut の最初の 2 つのエントリと一致します)。 ただし、順序が VSOut と一致しないため、PSInFails には互換性がありません。

関数