Assinaturas
Uma assinatura de sombreador é uma lista dos parâmetros que são de entrada ou saída de uma função de sombreador. No Direct3D 10, os estágios adjacentes compartilham efetivamente uma matriz de registro, em que o sombreador de saída (ou estágio de pipeline) grava dados em locais específicos na matriz de registro e o sombreador de entrada deve ler dos mesmos locais. A API usa assinaturas de sombreador para associar saídas de sombreador com entradas sem a sobrecarga de resolução semântica.
No Direct3D 10, as assinaturas de entrada são geradas a partir de uma declaração de entrada de sombreador e a assinatura de saída é gerada a partir de uma declaração de saída de sombreador. Uma assinatura de entrada é considerada compatível com uma assinatura de saída quando a assinatura de saída é um subconjunto estrito (tipo de argumento e correspondência de ordem) da assinatura de entrada. A maneira mais simples de fazer isso é vincular entradas e saídas de sombreador correspondentes pelo mesmo tipo de estrutura.
Aqui está um exemplo de assinaturas compatíveis.
// 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;
}
Aqui está um exemplo de assinaturas incompatíveis; a ordem dos parâmetros na assinatura de entrada não corresponde à ordem na assinatura de saída.
// 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 é um subconjunto compatível do VSOut (as duas primeiras entradas correspondem ao tipo e à ordem com as duas primeiras entradas no VSOut). No entanto, PSInFails é incompatível porque a ordenação não corresponde ao VSOut.
Tópicos relacionados