Tanda tangan

Tanda tangan shader adalah daftar parameter yang merupakan input ke atau output dari fungsi shader. Dalam Direct3D 10, tahap yang berdampingan secara efektif berbagi array register, di mana shader output (atau tahap alur) menulis data ke lokasi tertentu dalam array register dan shader input harus membaca dari lokasi yang sama. API menggunakan tanda tangan shader untuk mengikat output shader dengan input tanpa overhead resolusi semantik.

Dalam Direct3D 10, tanda tangan input dihasilkan dari deklarasi shader-input dan tanda tangan output dihasilkan dari deklarasi shader-output. Tanda tangan input dikatakan kompatibel dengan tanda tangan output ketika tanda tangan output adalah subset yang ketat (jenis argumen dan kecocokan urutan) dari tanda tangan input. Cara paling mudah untuk mencapainya adalah dengan menautkan input dan output shader yang sesuai dengan jenis struktur yang sama.

Berikut adalah contoh tanda tangan yang kompatibel.

// 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;
}

Berikut adalah contoh tanda tangan yang tidak kompatibel; urutan parameter dalam tanda tangan input tidak cocok dengan urutan dalam tanda tangan output.

// 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 adalah subset VSOut yang kompatibel (dua entri pertama cocok dengan jenis dan urutan dengan dua entri pertama di VSOut). Namun, PSInFails tidak kompatibel karena pengurutan tidak cocok dengan VSOut.

Fungsi