Usando valores de System-Generated

Os valores gerados pelo sistema são gerados pelo estágio IA (com base na semântica de entrada fornecida pelo usuário) para permitir determinadas eficiências em operações de sombreador.

Ao anexar dados, como uma ID de instância (visível para VS), uma ID de vértice (visível para VS) ou uma ID primitiva (visível para GS/PS), um estágio de sombreador subsequente pode procurar esses valores do sistema para otimizar o processamento nesse estágio. Por exemplo, o estágio do 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 a ID primitiva para capturar dados por primitivo da mesma maneira.

VertexID

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. 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á uma ID de vértice a cada vértice para uso por estágios de sombreador. Para cada chamada de desenho, a ID de vértice é incrementada em 1. Entre as chamadas desenho indexadas, a contagem é redefinida de volta para o valor inicial. Para ID3D11DeviceContext::D rawIndexed e ID3D11DeviceContext::D rawIndexedInstanced, a ID de vértice representa o valor do índice. Se a ID de vértice estourar (exceder 2 ²– 1), ela será encapsulada como 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 IA. 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 sombreador de geometria ou pelo estágio do sombreador de pixel (o que 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 é iniciada. Todas as outras chamadas de desenho não alteram o valor da ID da instância. Se a ID da instância estourar (exceder 2 ²– 1), ela será encapsulada como 0.

O estágio do 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, uma ID primitiva é mantida apenas para os primitivos interiores (os primitivos não adjacentes), assim como o conjunto de primitivos em uma faixa de triângulos sem adjacência.

InstanceID

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 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, 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 a ID da instância estourar (exceder 2 ²– 1), ela será encapsulada como 0.

Exemplo

A ilustração a seguir mostra como os valores do sistema são anexados a uma faixa de triângulos em instâncias no estágio IA.

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

Estas tabelas mostram os valores do sistema gerados para ambas as instâncias da mesma faixa de triângulos. 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 aos 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
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 0 0 0 0 0 0 0 0 0 0

 

Valor Valor Valor
PrimitiveID 0 1 2
InstanceID 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
VertexID 0 1 2 3 4 5 6 7 8 9
InstanceID 1 1 1 1 1 1 1 1 1 1

 

Valor Valor Valor
PrimitiveID 0 1 2
InstanceID 1 1 1

 

O assembler 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 de faixa, que separa cada instância da faixa de triângulos.

Estágio do Assembler de Entrada