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.
Související témata