Compartilhar via


Usando valores gerados pelo sistema

Valores gerados pelo sistema são criados pelo estágio do Assembler de Entrada (IA) (baseado na semântica de entrada fornecida pelo usuário) para permitir determinadas eficiências nas operações de sombreador. Ao anexar dados, como uma ID de instância (visível aoestágio VS (Sombreador de Vértice), uma ID de vértice (visível ao VS) ou uma ID primitiva (visível para estágio GS (Sombreador geometry)estágio PS (Sombreador de Pixel)), 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 o 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 por primitivo da mesma forma.

VérticeID

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

A IA adicionará um ID de vértice a cada vértice para uso pelos estágios de sombreador. Para cada chamada de desenho, o ID do vértice é incrementado em 1. Entre as chamadas de desenho indexadas, a contagem é redefinida de volta para o valor inicial. Se a identificação do vértice estourar (exceder 2³² – 1), ele será reiniciado para 0.

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

PrimitiveID

Uma ID primitiva é usada por cada estágio de 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 Input Assembler (IA) . Para informar o estágio IA para gerar um 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 do Sombreador de Geometria (GS) ou pelo estágio do Sombreador de Vértice (VS) , dependendo de qual for o primeiro estágio ativo 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 estourar (exceder 2³² – 1), ele retorna a 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 especifica uma ID primitiva usa um modo de interpolação constante.

Não há suporte para gerar automaticamente uma ID primitiva para primitivos adjacentes. Para tipos primitivos com adjacência, como uma faixa de triângulo com adjacência, o ID primitivo é mantido apenas para os primitivos internos (aqueles que não são adjacentes), assim como ocorre com 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 de 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 do Assembler de Entrada (IA) adicionará um ID de instância a cada vértice se a declaração de entrada do shader de vértice incluir a semântica de ID da instância. Para cada chamada de desenho indexada, a ID da instância é incrementada em 1. Todas as outras chamadas de desenho não alteram o valor da ID da instância. Se o ID da instância ultrapassar 2³²–1, ele será reiniciado para 0.

Exemplo de

A seguinte ilustração mostra como os valores de sistema são anexados a uma faixa de triângulos instanciada na fase do Montador de Entrada (IA) .

ilustração dos valores do sistema para uma faixa de triângulos 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.

Dados de vértice C,U D,U E,U F,U G,U H,U I, U J,U K,U L,U
VérticeID 0 1 2 3 4 5 6 7 oito 9
ID de Instância 0 0 0 0 0 0 0 0 0 0

 

A instância de strip de triângulo U tem três primitivas de triângulo, com os seguintes valores gerados automaticamente 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 de vértice C,V D,V E,V F,V G,V H,V I,V J,V K,V L,V
VérticeID 0 1 2 3 4 5 6 7 oito 9
ID de Instância 1 1 1 1 1 1 1 1 1 1

 

A faixa de triângulos da instância V possui três 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 ia (ia) do de entrada 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 de triângulo.

Input-Assembler (IA) estágio