Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os valores gerados pelo sistema são gerados pelo estágio Input Assembler (IA) (baseada na semântica de entrada fornecida pelo usuário) para permitir certas eficiências nas operações de sombreador. Ao anexar dados, como um ID de instância (visível para o estágio Vertex Shader (VS)), um ID de vértice (visível para VS) ou um ID primitivo (visível para estágio Geometry Shader (GS)/estágio Pixel Shader (PS)), um estágio de sombreador subsequente pode procurar esses valores do sistema para otimizar o processamento nesse estágio.
Por exemplo, a etapa VS pode procurar por o ID da instância para obter dados adicionais por vértice para o sombreador ou para executar outras operações; as etapas GS e PS podem usar o ID primitivo para capturar dados por primitiva da mesma forma.
VertexID
Um ID de vértice é usado por cada estágio de sombreador para identificar cada vértice. É um inteiro não assinado de 32 bits cujo valor padrão é 0. Ele é atribuído a um vértice quando a primitiva é processada pelo estágio Input Assembler (IA). Anexe a semântica de identificação de vértice à declaração de entrada do sombreador para informar o estágio IA para gerar uma ID por vértice.
O IA adicionará um ID de vértice a cada vértice para uso por estágios de sombreador. Para cada chamada de desenho, o ID de vértice é incrementado por 1. Em chamadas de sorteio indexadas, a contagem é redefinida para o valor inicial. Se o ID do vértice transbordar (exceder 2³²– 1), ele será encapsulado em 0.
Para todos os tipos primitivos, os vértices têm um ID de vértice associado a eles (independentemente da adjacência).
PrimitiveID
Um ID primitivo é usado por cada estágio de sombreador para identificar cada primitivo. É um inteiro não assinado de 32 bits cujo valor padrão é 0. Ele é atribuído a uma primitiva quando a primitiva é processada pelo estágio Input Assembler (IA). Para informar o estágio IA para gerar uma ID primitiva, anexe a semântica primitive-ID à declaração de entrada do sombreador.
O estágio IA adicionará um ID primitivo a cada primitivo para uso pelo estágio Geometry Shader (GS) ou pelo estágio Vertex Shader (VS) (o que for o primeiro estágio ativado após o estágio IA). Para cada chamada de desenho indexada, a ID primitiva é incrementada em 1, no entanto, a ID primitiva é redefinida para 0 sempre que uma nova instância começa. Todas as outras chamadas de desenho não alteram o valor do identificador da instância. Se o ID da instância atingir o limite (exceder 2³²– 1), ele voltará para 0.
O estágio Pixel Shader (PS) não possui uma entrada independente para um ID de primitivo; no entanto, qualquer entrada de sombreador de pixel que especifique um ID de primitivo utiliza um modo de interpolação constante.
Não há suporte para gerar automaticamente um ID primitivo para primitivos adjacentes. Para tipos primitivos com adjacência, como uma faixa de triângulo com adjacência, um ID primitivo só é mantido para os primitivos interiores (os primitivos não adjacentes), assim como o conjunto de primitivos em uma faixa de triângulo sem adjacência.
ID da instância
Um ID de instância é usado por cada estágio de sombreador para identificar a instância da geometria que está sendo processada no momento. É um inteiro não assinado de 32 bits cujo valor padrão é 0.
O estágio do Input Assembler (IA) adicionará um ID de instância a cada vértice se a declaração de entrada do sombreador de vértice incluir a semântica de ID de instância. Para cada chamada de desenho indexada, o ID da instância é incrementado em 1. Todas as outras chamadas de desenho não alteram o valor do ID da instância. Se o ID da instância estourar (exceder 2³²– 1), ele será encapsulado em 0.
Exemplo
A ilustração a seguir mostra como os valores do sistema são anexados a uma faixa de triângulos instanciada no estágio Input Assembler (IA).
Estas tabelas mostram os valores do sistema gerados para ambas as instâncias da mesma tira de triângulo. A primeira instância (instância U) é mostrada em azul, a segunda instância (instância V) é mostrada em verde. As linhas sólidas conectam os vértices nos objetos primitivos, as linhas tracejadas conectam os vértices adjacentes.
As tabelas a seguir mostram os valores gerados pelo sistema para a instância U.
| Dados Vertex | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| ID de Instância | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
A instância da faixa triangular U tem 3 primitivas de triângulo, com os seguintes valores gerados pelo sistema:
| Valor 1 | Valor 2 | Valor 3 | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| ID de Instância | 0 | 0 | 0 |
As tabelas a seguir mostram os valores gerados pelo sistema para a instância V.
| Dados Vertex | C,V | D,V | E,V | F,V | G,V | H,V | I,V | J,V | K,V | L,V |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| ID de Instância | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
A instância V da faixa de triângulos tem 3 primitivas de triângulo, com os seguintes valores gerados pelo sistema.
| Valor 1 | Valor 2 | Valor 3 | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| ID de Instância | 1 | 1 | 1 |
O estágio Input Assembler (IA) gera os IDs (vértice, primitivo e instância); observe também que cada instância recebe um ID de instância exclusivo. Os dados terminam com o corte da tira, que separa cada ocorrência da tira de triângulo.
Tópicos relacionados