
Mesh Shaders
Os Mesh Shaders (MS) são essencialmente compute shaders com intrínsecos específicos do estágio para exportar vértices, índices e dados de primitivos para o primitive assembler. Todos os dados devem ser buscados explicitamente de constant buffer views (CBVs) e shader resource views (SRVs) no código do shader. Isso significa que os desenvolvedores precisarão reajustar sua visão das chamadas de desenho para ficar mais alinhada ao fluxo de trabalho dos compute shaders. O autor do shader determina o tamanho do grupo de threads e como cada thread é usado para concluir a carga de trabalho. Ele terá acesso a intrínsecos de wave de shader e à memória groupshared para compartilhar dados e criar com eficiência uma lista de primitivos para rasterização. Figura 2. Visualização do trabalho de GPU despachado por uma chamada DispatchMesh(4, 1, 1) com um pipeline somente de Mesh Shader vinculado. Assim como os compute shaders, DispatchMesh requer contagens de grupos de threads nas dimensões x, y e z. Isso despacha o número especificado de grupos de threads de Mesh Shader para execução.
Amplification Shaders
O Amplification Shader (AS) é um estágio opcional que precede o estágio de Mesh Shader. Esse estágio também é semelhante a um compute shader, com a capacidade de despachar dinamicamente um cluster de grupos de threads de Mesh Shader. Cada grupo de threads calcula seu próprio número de grupos de threads de Mesh Shader a serem despachados. Cada grupo de threads também consiste em até 16 KB de dados de payload personalizados e compartilhados a serem passados para os grupos de threads de Mesh Shader gerados por ele. Esses dados podem ser exportados diretamente da memória groupshared. A funcionalidade dos Amplification Shaders permite que os programas de shader reduzam ou ampliem dinamicamente sua carga de trabalho com base em critérios personalizados. Isso abre a possibilidade de culling eficiente com granularidade menor ou de tesselação personalizada. Figura 3. Visualização do despacho de um objeto de estado de pipeline (PS) AS-MS. Alguns grupos de threads AS optarão por despachar grupos de threads MS. Outros podem não despachar nenhum.
