Compartilhar via


Estágio de sombreador de geometria (GS)

O estágio de sombreador de geometria (GS) processa triângulos primitivos inteiros, linhas e pontos, juntamente com seus vértices adjacentes. Ele é útil para algoritmos incluindo expansão de sprites de ponto, sistemas de partículas dinâmicas e geração de volume de sombra. Ele suporta amplificação e cancelamento de amplificação de geometria.

Finalidade e usos

O estágio do sombreador de geometria processa primitivos inteiros: triângulos (3 vértices com até 3 vértices adjacentes), linhas (2 vértices com até 2 vértices adjacentes) e pontos (1 vértice).

ilustração de um triângulo e uma linha com vértices adjacentes

O sombreador de geometria também dá suporte à amplificação e cancelamento de amplificação de geometria. Dado um primitivo de entrada, o sombreador de geometria pode descartar o primitivo ou emitir um ou mais primitivos novos.

O estágio de sombreador de geometria (GS) é um estágio de sombreador programável; ele é mostrado como um bloco arredondado no diagrama de pipeline gráfico. Esse estágio do sombreador expõe sua própria funcionalidade exclusiva, criada nos modelos de sombreador (veja núcleo comum de sombreador).

O estágio do sombreador de geometria é adequado para algoritmos incluindo:

  • Expansão de sprites de ponto
  • Sistemas de partículas dinâmicas
  • Geração de pele/barbatana
  • Geração de volume de sombra
  • Única passagem de renderização para Cubemap
  • Troca de material por primitivo
  • Configuração de material por primitivo - essa funcionalidade inclui a geração de coordenadas baricêntricas como dados primitivos para que um sombreador de pixel possa realizar a interpolação de atributo personalizado.

Entrada

O estágio do sombreador de geometria executa o código de sombreador específico do aplicativo com primitivos inteiros como entrada e a capacidade de gerar vértices na saída. Ao contrário de sombreadores de vértice que operam em um único vértice, as entradas do sombreador de geometria são os vértices de um primitivo completo (três vértices para triângulos, dois vértices para linhas ou um único vértice para ponto). Os sombreadores de geometria também podem trazer os dados de vértice para os primitivos adjacentes de borda como entrada (três vértices adicionais para um triângulo, e dois vértices adicionais para uma linha).

O estágio do Sombreador de Geometria pode consumir o SV_PrimitiveID valor gerado pelo sistema gerado automaticamente pelo estágio de IA (Assembler de Entrada). Isso permite que os dados por primitivo sejam buscados ou calculados, se desejado.

Quando um sombreador de geometria está ativo, ele é chamado uma vez para cada primitivo passado para baixo ou gerado anteriormente no pipeline. Cada invocação do sombreador de geometria vê como entrada os dados para a invocação do primitivo, independentemente de ser um único ponto, uma única linha ou um único triângulo. Uma faixa de triângulos de versões anteriores no pipeline resultaria em uma chamada de sombreador de geometria de cada triângulo individual na faixa (como se a faixa fosse expandida em uma lista de triângulos). Todos os dados de entrada para cada vértice do primitivo individual está disponível (ou seja, 3 vértices para um triângulo), além de dados de vértice adjacentes, se aplicáveis e disponíveis.

Abreviações de vértice comuns:

Abreviação Termo
TV Vértice do triângulo
LV Vértice de linha
AV Vértice adjacentes

 

Saída

O estágio de sombreador de geometria (GS) é capaz de gerar vários vértices formando uma única topologia selecionada. As topologias de saída do sombreador de geometria disponíveis são tristrip, linestrip, e pointlist. O número de primitivos emitidos pode variar livremente dentro de qualquer chamada do sombreador de geometria, embora o número máximo de vértices que podem ser emitidos deva ser declarado estaticamente. Os tamanhos de faixa emitidos a partir de uma chamada de sombreador de geometria podem ser arbitrários, e novas faixas podem ser criadas por meio da função HLSL RestartStrip.

A execução de uma instância do sombreador de geometria é atômica das outras chamadas, exceto pelo fato dos dados adicionados aos fluxos serem seriais. As saídas de uma determinada chamada de um sombreador de geometria são independentes de outras chamadas (porém a ordem é respeitada). Um sombreador de geometria gerando faixas de triângulos iniciará uma faixa tira em cada chamada.

A saída do sombreador de geometria pode ser alimentada no estágio do rasterizador e/ou em um buffer de vértice na memória através do estágio de saída de fluxo. A saída alimentada na memória é expandida em listas de linhas/pontos/triângulos individuais (exatamente da forma como seriam passados para o rasterizador).

Um sombreador de geometria produz um vértice de dados por vez, acrescentando vértices a um objeto de fluxo de saída. A topologia dos fluxos é determinada por uma declaração fixa, escolhendo um TriangleStream, LineStream e PointStream como saída para o estágio de GS.

Há três tipos de objetos de fluxo disponíveis: TriangleStream, LineStream e PointStream, que são objetos transformados em modelos. A topologia da saída é determinada pelo seu tipo de objeto correspondente, enquanto o formato dos vértices acrescentado ao fluxo é determinado pelo tipo de modelo.

Quando uma saída de sombreador de geometria é identificada como um Valor Interpretado pelo Sistema (por exemplo, SV_RenderTargetArrayIndex ou SV_Position), o hardware examina esses dados e executa algum comportamento dependente do valor, além de ser capaz de passar os próprios dados para o próximo estágio de sombreador para entrada. Quando essa saída de dados do sombreador de geometria tem significado para o hardware por primitivo (como SV_RenderTargetArrayIndex ou SV_ViewportArrayIndex), em vez de por vértice (como SV_ClipDistance[n] ou SV_Position), os dados por primitivo são obtidos do vértice à esquerda emitido para o primitivo.

Os primitivos parcialmente concluídos podem ser gerados pelo sombreador de geometria, se o sombreador de geometria terminar e o primitivo estiver incompleto. Primitivos incompletos são descartados silenciosamente. Isso é semelhante à maneira como o IA trata primitivos parcialmente concluídas.

O sombreador de geometria pode executar operações de amostragem de textura e carregamento onde não há necessidade de elementos derivados do espaço da tela (samplelevel, samplecmplevelzero, samplegrad).

Pipeline de elementos gráficos