Pular para o conteúdo principal
Usar o pipeline de Mesh Shader no Direct3D 12 se resume às seguintes etapas familiares.
  1. Escreva e compile um Mesh Shader e (opcionalmente) um Amplification Shader usando o DXC.
  2. Crie um objeto de estado de pipeline de Mesh Shader usando o bytecode do shader compilado.
  3. Grave o dispatch do objeto de estado de pipeline de Mesh Shader usando uma lista de comandos.
  4. Execute a lista de comandos em uma fila de comandos.

Objetos de estado de pipeline de Mesh Shader

O Direct3D 12 expõe o pipeline de Mesh Shader por meio das APIs familiares de objeto de estado de pipeline gráfico. A criação do objeto de estado de pipeline de Mesh Shader usa as APIs de fluxo de estado de pipeline, conforme ilustrado nos dois próximos exemplos de código. As APIs ID3D12Device e ID3D12GraphicsCommandList permitem verificar o suporte de hardware e despachar cargas de trabalho do pipeline de Mesh Shader (o segundo exemplo de código). Observe que não é necessário verificar o suporte de hardware no XBOX Series X|S. O exemplo de código a seguir mostra uma desc de fluxo de pipeline de Mesh Shader a ser fornecida às APIs de criação de fluxo de pipeline.
O exemplo de código a seguir mostra a criação e o uso do estado de pipeline de Mesh Shader.

Mesh Shaders

Os Mesh Shaders são compilados com a ferramenta de linha de comando DXC ou com a biblioteca do compilador usando o novo perfil de shader “ms” de Mesh Shader, por exemplo, ms_6_5. O terceiro exemplo de código fornece uma implementação de exemplo de um Mesh Shader de triângulo em espaço de tela; acompanhe usando esse exemplo de código como referência. Veja a seguir um exemplo de compilação de um Mesh Shader na linha de comando.
A função main do shader é decorada com atributos de metadados.
  • NumThreads declara a dimensionalidade do grupo de threads
  • OutputTopology declara o tipo de primitivo
As únicas entradas são os IDs de thread familiares dos compute shaders. Todos os outros dados devem ser lidos manualmente por meio de constant buffer views (CBVs), shader resource views (SRVs) ou unordered access views (UAVs). As saídas geométricas são declaradas por meio dos parâmetros out como matrizes de saída compartilhadas. São parâmetros de matriz somente gravação cujos tipos declaram os tipos de vértice e primitivo definidos pelo usuário a serem exportados do shader. Os modificadores vertices, indices e primitives especificam cada parâmetro como uma das três saídas geométricas distintas. O comprimento dessas matrizes deve ser uma constante em tempo de compilação e define o número máximo de vértices e primitivos que podem ser exportados. A função intrínseca SetMeshOutputCounts declara as contagens reais de exportação de vértices e primitivos para o grupo de threads. Essa chamada é opcional: o padrão é zero tanto para numVerts quanto para numPrims. Esses valores devem ser menores ou iguais aos comprimentos das matrizes de saída. Essa chamada pode ocorrer a qualquer momento antes das gravações nas matrizes de saída compartilhadas. Espera-se que os valores fornecidos sejam constantes no grupo de threads, e eles serão lidos da primeira lane. Os vértices e primitivos são então transformados pelo grupo de threads e gravados nas matrizes de saída compartilhadas. A chamada a SetMeshOutputCounts() deve ser realizada antes que qualquer gravação ocorra, e as gravações devem estar dentro dos limites declarados por essa chamada. O exemplo de código a seguir mostra um Mesh Shader que renderiza um único triângulo em espaço de tela.

Amplification Shaders

Os Amplification Shaders são compilados com a ferramenta de linha de comando DXC ou com a biblioteca usando o novo perfil de shader “as” de Amplification Shader, por exemplo, as_6_5. Veja a seguir um exemplo de compilação de um Amplification Shader na linha de comando.
Sua estrutura é idêntica à dos compute shaders, exceto pela chamada opcional à função intrínseca DispatchMesh, que despacha um cluster de Mesh Shaders filhos. O exemplo de código a seguir descreve um Amplification Shader bem genérico, apenas para mostrar a estrutura geral. Para uma aplicação abrangente de Amplification Shaders, consulte Exemplo de culling de meshlets. O exemplo de código a seguir mostra um esboço genérico de um Amplification Shader.

Confira também

Visão geral do pipeline de Mesh Shader Por que usar Mesh Shaders Visão geral da API de Mesh Shader Meshlets Exemplo de culling de meshlets
Última modificação em 6 de outubro de 2026