Partilhar via


Usando valores de System-Generated

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

Ao anexar dados, como um id de instância (visível para VS), um id de vértice (visível para VS) ou um id primitivo (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 VS pode procurar o identificador da instância para obter dados adicionais por vértice para o shader ou realizar outras operações; os estágios GS e PS podem utilizar o identificador da primitiva para captar dados por primitiva da mesma maneira.

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. É atribuído a um vértice quando o primitivo é processado pelo estágio de IA. Anexe a semântica vertex-id à declaração de entrada do sombreador para informar o estágio IA a gerar um ID por vértice.

A IA adicionará um identificador de vértice a cada vértice para ser utilizado pelos 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. Para ID3D11DeviceContext::DrawIndexed e ID3D11DeviceContext::DrawIndexedInstanced, o ID de vértice representa o valor do índice. Se o vértice id transbordar (exceder 2³²– 1), ele se envolve 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. É atribuído a um primitivo quando o primitivo é processado pelo estágio IA. Para instruir o estágio IA a gerar um primitive id, anexe a semântica de primitive-id à declaração de entrada do sombreador.

O estágio IA adicionará um id primitivo a cada primitivo para uso pelo sombreador de geometria ou pelo estágio de sombreador de pixel (o que for o primeiro estágio ativo após o estágio IA). Para cada chamada de desenho indexada, o ID da primitiva é incrementado em 1; no entanto, o ID da primitiva é redefinido para 0 sempre que uma nova instância começa. Todas as outras chamadas de desenho não alteram o valor do id da instância. Se o id da instância transbordar (exceder 2³²– 1), ele será encapsulado em 0.

O estágio de sombreador de pixel não tem uma entrada separada para um id primitivo; 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 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 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 do id da instância. Para cada chamada de desenho indexada, o identificador 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 de sistema são anexados a uma faixa de triângulos instanciada no estágio do IA.

ilustração dos valores do sistema para uma tira 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.

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
InstanceID 0 0 0 0 0 0 0 0 0 0

 

Valor Valor Valor
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 da Instância 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 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.

Input-Assembler Fase