Sdílet prostřednictvím


Podpisy

Podpis shaderu je seznam parametrů, které jsou vstupní nebo výstupní z funkce shaderu. V direct3D 10 sousední fáze efektivně sdílejí pole registru, kde výstupní shader (nebo fáze kanálu) zapisuje data do konkrétních umístění v matici registru a vstupní shader musí číst ze stejných umístění. Rozhraní API používá podpisy shaderu k vytvoření vazby výstupů shaderu se vstupy bez režie sémantického rozlišení.

V Direct3D 10 se vstupní podpisy generují z deklarace vstupu shaderu a výstupní podpis se generuje z deklarace shader-output. Vstupní podpis se říká, že je kompatibilní s výstupním podpisem, když je výstupní podpis striktní podmnožinou (typ argumentu a shoda pořadí) vstupního podpisu. Nejjednodušším způsobem, jak toho dosáhnout, je propojit odpovídající vstupy a výstupy shaderu stejným typem struktury.

Tady je příklad kompatibilních podpisů.

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

Tady je příklad nekompatibilních podpisů; pořadí parametrů ve vstupním podpisu neodpovídá pořadí ve výstupním podpisu.

// 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 je kompatibilní podmnožina VSOut (první dvě položky odpovídají typu a pořadí s prvními dvěma položkami v VSOut). Služba PSInFails je však nekompatibilní, protože řazení neodpovídá VSOutu.

Functions