次の方法で共有


シグネチャ (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 と一致していないために不適合となります。