Estágio do Sombreador de Geometria

O estágio do sombreador de geometria (GS) executa o código de sombreador especificado pelo aplicativo com vértices como entrada e pode gerar vértices na saída. Ao contrário dos 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 (ou seja, dois vértices para linhas, três vértices para triângulos ou um único vértice para um ponto) além dos dados de vértice para os primitivos adjacentes à borda (ou seja, dois vértices adicionais para uma linha ou três vértices adicionais para um triângulo). A figura a seguir mostra exemplos de primitivos que são inseridos em um sombreador de geometria.

Diagrama mostrando exemplos de primitivos de entrada do sombreador de geometria.

Outra entrada para o sombreador de geometria é uma ID primitiva gerada automaticamente pelo IA (assembler de entrada). Uma ID primitiva permite que o sombreador de geometria busque ou compute, se necessário, dados por rosto.

O estágio do sombreador de geometria pode gerar vários vértices para formar uma única topologia selecionada. As topologias de saída de GS disponíveis são tristrip, linestrip e pointlist. O número de primitivos que um sombreador de geometria emite pode variar, embora o número máximo de vértices que um sombreador de geometria pode emitir deve ser declarado estaticamente. Os comprimentos de faixa que um sombreador de geometria emite podem ser arbitrários (há um comando de corte ).

A saída do sombreador de geometria pode ser enviada para o rasterizador e para um buffer de vértice na memória. A saída enviada à memória é expandida para listas individuais de ponto, linha e triângulo (da mesma forma como a saída é passada para o rasterizador).

O estágio do sombreador de geometria pode implementar os seguintes algoritmos:

  • Point Sprite Tessellation: o sombreador usa um único vértice e gera quatro vértices (dois triângulos de saída) que representam os quatro cantos de um quad com texcoords arbitrários, normais e outros atributos.

  • Mosaico de Linha Larga: o sombreador recebe dois vértices de linha (LV0 e LV1) e gera quatro vértices para um quad que representa uma linha ampliada. Além disso, um sombreador de geometria pode usar os vértices de linha adjacentes (AV0 e AV1) para executar a miteração em pontos de extremidade de linha.

  • Geração de peles/barbatanas: renderizando vários deslocamentos potencialmente com texturas diferentes (rostos extrudados) para simular os efeitos paralíticos da pele. As barbatanas são bordas extrudadas que geralmente desaparecem se o ângulo não for oblíquo. As barbatanas são usadas para fazer com que os objetos fiquem melhor em ângulos oblíquos.

  • Geração de Volume de Sombra: informações de adjacência usadas para determinar se deseja extrusão.

  • Renderização de passagem única para rostos de cubo de múltipla textura: primitivos são projetados e emitidos para um sombreador de pixel seis vezes. Cada primitivo é acompanhado por um índice de matriz de destino de renderização, que seleciona uma face de cubo.

  • Configure coordenadas barycentricas como dados primitivos para que o sombreador de pixel possa executar a interpolação de atributo personalizada.

  • Um caso patológico: um aplicativo gera alguma geometria, em seguida, n-patches que geometria e, em seguida, extrudes volumes de sombra fora dessa geometria. Para esses casos, o multi-pass é a solução com a capacidade de gerar vértice e dados primitivos para um fluxo e circular os dados de volta.

Como cada chamada para o sombreador de geometria pode produzir um número variado de saídas, as chamadas paralelas para hardware são mais difíceis neste estágio do que ao executar outros estágios de pipeline (como estágios de sombreador de vértice ou pixel) em paralelo. Embora as implementações de hardware executem chamadas de sombreador de geometria em paralelo, o buffer complexo necessário para realizar chamadas de sombreador de geometria paralela significa que os aplicativos não devem exigir que o nível de paralelismo alcançável no estágio do sombreador de geometria seja tanto quanto outros estágios de pipeline. Em outras palavras, o sombreador de geometria pode se tornar um gargalo no pipeline dependendo da carga do programa que o sombreador de geometria tem. No entanto, a meta é que os algoritmos que usam a funcionalidade do sombreador de geometria ainda sejam executados com mais eficiência do que o aplicativo que precisa emular o comportamento no hardware que não é capaz de gerar geometria programaticamente.

O runtime do Direct3D chama as seguintes funções de driver para criar, configurar e destruir o sombreador de geometria: