Pipeline de elementos gráficos

O pipeline de gráficos do Direct3D foi projetado para a geração de elementos gráficos para aplicativos de jogos em tempo real. Os dados fluem da entrada para a saída por meio de cada um dos estágios configuráveis ou programáveis.

Todos os estágios podem ser configurados usando a API do Direct3D. Os estágios que apresentam núcleos de sombreador comuns (os blocos retangulares arredondados) são programáveis usando a linguagem de programação HLSL . Isso torna o pipeline extremamente flexível e adaptável.

Os mais comumente usados são o estágio VS (Sombreador de Vértice) e o estágio PS (Sombreador de Pixel). Se você não fornecer nem mesmo esses estágios de sombreador, um vértice de passagem padrão e um sombreador de pixel serão usados.

Diagrama do fluxo de dados no pipeline programável do Direct3D 11

Estágio do Assembler de Entrada

O estágio IA (Assembler de Entrada) fornece dados primitivos e de adjacência para o pipeline, como triângulos, linhas e pontos, incluindo IDs semânticas para ajudar a tornar os sombreadores mais eficientes, reduzindo o processamento a primitivos que ainda não foram processados.

  • Entrada

    Dados primitivos (triângulos, linhas e/ou pontos), de buffers preenchidos pelo usuário na memória. E possivelmente dados de adjacência. Um triângulo teria 3 vértices para cada triângulo e possivelmente 3 vértices para dados de adjacência por triângulo.

  • Saída

    Primitivos com valores gerados pelo sistema anexados (como um ID primitivo, um ID de instância ou um ID de vértice).

Estágio do Sombreador de Vértice

O estágio VS (Sombreador de Vértice) processa vértices, normalmente executando operações como transformações, esfolamento e iluminação. Um sombreador de vértice usa um único vértice de entrada e produz um único vértice de saída. Operações individuais por vértice, como Transformações, Skinning, Morphing e iluminação por vértice.

  • Entrada

    Um único vértice, com valores gerados pelo sistema VertexID e InstanceID. Cada vértice de entrada do sombreador de vértice pode ser composto por até 16 vetores de 32 bits (até 4 componentes cada).

  • Saída

    Um único vértice. Cada vértice de saída pode ser composto por até 16 vetores de 4 componentes de 32 bits.

Estágio do Sombreador do Casco

O estágio Hull Shader (HS) é um dos estágios de mosaico, que divide com eficiência uma única superfície de um modelo em vários triângulos. Um sombreador de casco é invocado uma vez por patch e transforma pontos de controle de entrada que definem uma superfície de baixa ordem em pontos de controle que compõem um patch. Ele também faz alguns cálculos por patch para fornecer dados para o estágio TS (Tessellator) e o estágio DS (Sombreador de Domínio).

  • Entrada

    Entre 1 e 32 pontos de controle de entrada, que juntos definem uma superfície de baixa ordem.

  • Saída

    Entre 1 e 32 pontos de controle de saída, que juntos formam um patch. O sombreador de casco declara o estado do estágio TS (Tessellator), incluindo o número de pontos de controle, o tipo de face de patch e o tipo de particionamento a ser usado durante o mosaico.

Estágio de tesselador

O estágio Tessellator (TS) cria um padrão de amostragem do domínio que representa o patch de geometria e gera um conjunto de objetos menores (triângulos, pontos ou linhas) que conectam essas amostras.

  • Entrada

    O mosaico opera uma vez por patch usando os fatores de mosaico (que especificam a precisão com que o domínio será mosaico) e o tipo de particionamento (que especifica o algoritmo usado para dividir um patch) que são passados do estágio do sombreador de casco.

  • Saída

    O mosaico gera coordenadas uv (e, opcionalmente, w) e a topologia de superfície para o estágio do sombreador de domínio.

Estágio do Sombreador de Domínio

O estágio DS (Sombreador de Domínio) calcula a posição do vértice de um ponto subdividido no patch de saída; ele calcula a posição do vértice que corresponde a cada amostra de domínio. Um sombreador de domínio é executado uma vez por ponto de saída do estágio do mosaico e tem acesso somente leitura ao patch de saída do sombreador do casco e às constantes do patch de saída do sombreador e às coordenadas UV de saída do estágio do mosaico.

  • Entrada

    Um sombreador de domínio consome pontos de controle de saída do estágio HS (Sombreador de Casco). As saídas do sombreador de casco incluem: pontos de controle, dados constantes de patch e fatores de mosaico (os fatores de mosaico podem incluir os valores usados pelo mosaico de função fixa, bem como os valores brutos - antes do arredondamento por mosaico inteiro - o que facilita a geomorfoseação, por exemplo). Um sombreador de domínio é invocado uma vez por coordenada de saída do estágio TS (Tessellator).

  • Saída

    O estágio DS (Sombreador de Domínio) gera a posição do vértice de um ponto subdividido no patch de saída.

Estágio do sombreador de geometria

O estágio do Sombreador de Geometria (GS) processa primitivos inteiros: triângulos, linhas e pontos, juntamente com seus vértices adjacentes. Ele suporta amplificação e desamplificação de geometria. É útil para algoritmos, incluindo Expansão de Sprite de Ponto, Sistemas de Partículas Dinâmicas, Geração de Fur/Fin, Geração de Volume de Sombra, Renderização de Passagem Única para Mapa de Cubo, Troca de Material Primitivo e Configuração de Material Primitivo - incluindo a geração de coordenadas baricêntricas como dados primitivos para que um sombreador de pixel possa executar interpolação de atributo personalizado.

  • Entrada

    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 (três vértices para triângulos, dois vértices para linhas ou vértice único para ponto).

  • Saída

    O estágio GS (Sombreador de Geometria) é 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 em qualquer invocação do sombreador de geometria, embora o número máximo de vértices que podem ser emitidos deva ser declarado estaticamente. Os comprimentos de faixa emitidos de uma invocação de sombreador de geometria podem ser arbitrários e novas faixas podem ser criadas por meio da função RestartStrip HLSL.

Estágio de saída de fluxo

O estágio de saída de fluxo (SO) gera continuamente (ou transmite) dados de vértice do estágio ativo anterior para um ou mais buffers na memória. Os dados transmitidos para a memória podem ser recirculados de volta para o pipeline como dados de entrada ou leitura da CPU.

  • Entrada

    Dados de vértice de um estágio de pipeline anterior.

  • Saída

    O estágio Stream Output (SO) gera continuamente (ou transmite) dados de vértice do estágio ativo anterior, como o estágio Geometry Shader (GS), para um ou mais buffers na memória. Se o estágio GS (Sombreador de Geometria) estiver inativo e o estágio SO (Saída de Fluxo) estiver ativo, ele produzirá continuamente dados de vértice do estágio DS (Sombreador de Domínio) para buffers na memória (ou se o DS também estiver inativo, do estágio VS (Sombreador de Vértice)).

Estágio do rasterizador

O estágio RS (Rasterizador) recorta primitivos que não estão em exibição, prepara primitivos para o estágio PS (Sombreador de Pixel) e determina como invocar sombreadores de pixel. Converte informações vetoriais (compostas de formas ou primitivas) em uma imagem raster (composta de pixels) com a finalidade de exibir gráficos 3D em tempo real.

  • Entrada

    Os vértices (x,y,z,w) que entram no estágio Rasterizer são considerados em um espaço de clipe homogêneo. Nesse espaço de coordenadas, o eixo X aponta para a direita, Y aponta para cima e Z aponta para longe da câmera.

  • Saída

    Os pixels reais que precisam ser renderizados. Inclui alguns atributos de vértice para uso em interpolação pelo Sombreador de Pixel.

Estágio do Sombreador de Pixel

O estágio PS (Sombreador de Pixel) recebe dados interpolados para um primitivo e gera dados por pixel, como cor.

  • Entrada

    Quando o pipeline é configurado sem um sombreador de geometria, um sombreador de pixel é limitado a 16, 32 bits e 4 entradas de componentes. Caso contrário, um sombreador de pixel pode receber até 32 entradas de 32 bits e 4 componentes. Os dados de entrada do sombreador de pixel incluem atributos de vértice (que podem ser interpolados com ou sem correção de perspectiva) ou podem ser tratados como constantes primitivas. As entradas do sombreador de pixel são interpoladas a partir dos atributos de vértice do primitivo que está sendo rasterizado, com base no modo de interpolação declarado. Se um primitivo for recortado antes da rasterização, o modo de interpolação também será respeitado durante o processo de recorte.

  • Saída

    Um sombreador de pixel pode gerar até 8, 32 bits, 4 cores de componentes ou nenhuma cor se o pixel for descartado. Os componentes de registro de saída do sombreador de pixel devem ser declarados antes de poderem ser usados; Cada registro tem permissão para uma máscara de gravação de saída distinta.

Fase de fusão de resultados

O estágio OM (Fusão de Saída) combina vários tipos de dados de saída (valores de sombreador de pixel, informações de profundidade e estêncil) com o conteúdo do destino de renderização e buffers de profundidade/estêncil para gerar o resultado final do pipeline.

  • Entrada

    As entradas de fusão de saída são o estado do pipeline, os dados de pixel gerados pelos sombreadores de pixel, o conteúdo dos destinos de renderização e o conteúdo dos buffers de profundidade/estêncil.

  • Saída

    A cor final do pixel renderizado.