Partilhar via


Usando valores gerados pelo sistema

Os valores gerados pelo sistema são gerados pelo estágio IA (Input Assembler) (com base na semântica de entrada fornecida pelo usuário) para permitir determinadas eficiências nas operações do sombreador. Ao anexar dados, como uma ID de instância (visível para o estágio do Sombreador de Vértice (VS)), uma ID de vértice (visível para o VS) ou uma ID primitiva (visível para o estágio do Sombreador de Pixel (PS) do Sombreador/de Geometria (GS)), um estágio de sombreador subsequente pode procurar esses valores do sistema para otimizar o processamento nesse estágio.

Por exemplo, o estágio VS pode procurar a ID da instância para obter dados adicionais por vértice para o sombreador ou para executar outras operações; os estágios GS e PS podem usar o ID primitivo para obter dados primitivos da mesma maneira.

ID de vértice

Uma ID de vértice é usada por cada estágio do sombreador para identificar cada vértice. É um inteiro sem sinal de 32 bits cujo valor padrão é 0. Ele é atribuído a um vértice quando o primitivo é processado pelo estágio IA (Assembler de Entrada). Anexe a semântica de ID de vértice à declaração de entrada do sombreador para informar o estágio de IA para gerar uma ID por vértice.

A IA adicionará uma ID de vértice a cada vértice para uso por estágios de sombreador. Para cada chamada de desenho, o ID do vértice é incrementado em 1. Em chamadas de desenho indexadas, a contagem é redefinida para o valor inicial. Se o ID do vértice estourar (exceder 2³²– 1), ele será encapsulado em 0.

Para todos os tipos primitivos, os vértices têm uma ID de vértice associada a eles (independentemente da adjacência).

ID primitivo

Uma ID primitiva é usada por cada estágio do sombreador para identificar cada primitivo. É um inteiro sem sinal de 32 bits cujo valor padrão é 0. Ele é atribuído a um primitivo quando o primitivo é processado pelo estágio IA (Input Assembler). Para informar o estágio IA para gerar uma ID primitiva, anexe a semântica de ID primitiva à declaração de entrada do sombreador.

O estágio IA adicionará uma ID primitiva a cada primitivo para uso pelo estágio GS (Sombreador de Geometria) ou pelo estágio VS (Sombreador de Vértice) (o que for o primeiro estágio ativo após o estágio IA). Para cada chamada de desenho indexada, o ID primitivo é incrementado em 1, no entanto, o ID primitivo é redefinido como 0 sempre que uma nova instância é iniciada. Todas as outras chamadas de desenho não alteram o valor da ID da instância. Se o ID da instância estourar (exceder 2³²– 1), ele será encapsulado em 0.

O estágio PS (Sombreador de Pixel) não tem uma entrada separada para uma ID primitiva; no entanto, qualquer entrada de sombreador de pixel que especifique uma ID primitiva usa um modo de interpolação constante.

Não há suporte para gerar automaticamente uma ID primitiva para primitivas adjacentes. Para tipos primitivos com adjacência, como uma faixa de triângulo com adjacência, um ID primitivo é mantido apenas 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

Uma ID de instância é usada por cada estágio do sombreador para identificar a instância da geometria que está sendo processada no momento. É um inteiro sem sinal de 32 bits cujo valor padrão é 0.

O estágio IA (Assembler de Entrada) adicionará uma 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 da 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 da 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ângulo instanciada no estágio IA (Input Assembler).

Ilustração dos valores do sistema para uma faixa de triângulo instanciada

Essas tabelas mostram os valores do sistema gerados para ambas as instâncias da mesma faixa 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 primitivos, as linhas tracejadas conectam os vértices adjacentes.

As tabelas a seguir mostram os valores gerados pelo sistema para a instância U.

Atualizados C,U D,U E,U F,U G,U H,U Eu, U J,U K,U L,U
ID de vértice 0 1 2 3 4 5 6 7 8 9
InstanceID 0 0 0 0 0 0 0 0 0 0

 

A instância de faixa de triângulo U tem 3 primitivas de triângulo, com os seguintes valores gerados pelo sistema:

Valor 1 Valor 2 Valor 3
ID primitivo 0 1 2
InstanceID 0 0 0

 

As tabelas a seguir mostram os valores gerados pelo sistema para a instância V.

Atualizados C,V D,V E,V F,V G,V H,V I,V J,V K,V L,V
ID de vértice 0 1 2 3 4 5 6 7 8 9
InstanceID 1 1 1 1 1 1 1 1 1 1

 

A instância V da faixa de triângulo tem 3 primitivos de triângulo, com os seguintes valores gerados pelo sistema:

Valor 1 Valor 2 Valor 3
ID primitivo 0 1 2
InstanceID 1 1 1

 

O estágio IA (Input Assembler) gera as IDs (vértice, primitiva e instância); observe também que cada instância recebe uma ID de instância exclusiva. Os dados terminam com o corte da faixa, que separa cada instância da faixa triangular.

Estágio IA-Assembler (Input-Assembler)