Pipelines e sombreadores com o Direct3D 12

O pipeline programável do Direct3D 12 aumenta significativamente o desempenho de renderização em comparação com as interfaces de programação de gráficos de geração anterior.

Pipeline de gráficos do Direct3D 12

O diagrama a seguir ilustra o pipeline gráfico e o estado do Direct3D 12.

diagrama ilustrando o pipeline e o estado do direct3d 12

Um pipeline gráfico é o fluxo sequencial de entradas e saídas de dados à medida que a GPU renderiza quadros. Considerando o estado e as entradas do pipeline, a GPU executa uma série de operações para criar as imagens resultantes. Um pipeline gráfico contém sombreadores, que executam efeitos e cálculos de renderização programáveis e operações de função fixas.

Observe o seguinte ao fazer referência ao diagrama de estado do pipeline:

  • As tabelas e heaps do descritor podem ser organizados arbitrariamente: SRVs, CBVs e UAVs podem ser referenciados e alocados em qualquer ordem.
  • Algumas operações do pipeline são configuráveis. Por exemplo, a fusão de saída normalmente opera em uma base de leitura-modificação-gravação com as exibições de destino de renderização e estêncil de profundidade. No entanto, o pipeline pode ser configurado para que qualquer um desses modos de exibição seja somente leitura ou somente gravação.
  • Os samplers estáticos não fazem parte dos argumentos raiz, pois são estáticos.

Objetos de estado do pipeline

O Direct3D 12 apresenta o PSO (objeto de estado do pipeline). Em vez de armazenar e representar o estado do pipeline em um grande número de objetos de alto nível, os estados dos componentes de pipeline, como o assembler de entrada, o rasterizador, o sombreador de pixel e a fusão de saída, são armazenados em um PSO. Um PSO é um objeto de estado de pipeline unificado que é imutável após a criação. O PSO selecionado no momento pode ser alterado de forma rápida e dinâmica, e o hardware e os drivers podem converter diretamente um PSO em instruções e estado de hardware nativo, preparando a GPU para processamento gráfico. Para aplicar um PSO, o hardware copia uma quantidade mínima de estado pré-computado diretamente para os registros de hardware. Isso remove a sobrecarga causada pelo driver gráfico recompilando continuamente o estado do hardware com base em todas as configurações de renderização e pipeline aplicáveis no momento. O resultado é uma sobrecarga de chamada de desenho significativamente reduzida, maior desempenho e mais chamadas de desenho por quadro.

O PSO atualmente aplicado define e conecta todos os sombreadores que estão sendo usados no pipeline de renderização. A HLSL (Linguagem de Sombreador de Alto Nível) da Microsoft é pré-compilada em objetos de sombreador, que são usados em tempo de execução como entrada para objetos de estado de pipeline. Para obter mais informações sobre como o PSO funciona dentro do pipeline gráfico, consulte Gerenciando o estado do pipeline de gráficos no Direct3D 12.

Pipeline de computação do Direct3D 12

O diagrama a seguir ilustra o pipeline de computação e o estado do Direct3D 12.

Diagrama que mostra o pipeline de computação do Direct3D 12.

Não há unidades de função fixas neste pipeline, no entanto, heaps de descritor, heaps de sampler e samplers estáticos ainda estão disponíveis na computação.

Envio de trabalho no Direct3D 12