Visão geral das assinaturas raiz

Uma assinatura raiz é configurada pelo aplicativo e vincula listas de comandos aos recursos necessários pelos sombreadores. A lista de comandos gráficos tem uma assinatura raiz de computação e elementos gráficos. Uma lista de comandos de computação terá simplesmente uma assinatura raiz de computação. Essas assinaturas raiz são independentes umas das outras.

Parâmetros e argumentos raiz

Uma assinatura raiz é semelhante a uma assinatura de função de API, determina os tipos de dados que os sombreadores devem esperar, mas não define a memória ou os dados reais. Um parâmetro raiz é uma entrada na assinatura raiz. Os valores reais dos parâmetros raiz definidos e alterados no runtime são chamados de argumentos raiz. Alterar os argumentos raiz altera os dados que os sombreadores leem.

Constantes raiz, descritores e tabelas

A assinatura raiz pode conter três tipos de parâmetros; constantes raiz (constantes embutidas nos argumentos raiz), descritores raiz (descritores embutidos nos argumentos raiz) e tabelas de descritor (ponteiros para um intervalo de descritores no heap do descritor).

As constantes raiz são valores embutidos de 32 bits que aparecem no sombreador como um buffer constante.

Os descritores raiz embutidas devem conter descritores que são acessados com mais frequência, embora sejam limitados a CBVs e buffers UAV ou SRV brutos ou estruturados. Um tipo mais complexo, como uma SRV de textura 2D, não pode ser usado como um descritor raiz. Os descritores raiz não incluem um limite de tamanho, portanto, não pode haver verificação fora dos limites, ao contrário dos descritores em heaps de descritor, que incluem um tamanho.

As entradas de tabela do descritor dentro de assinaturas raiz contêm o descritor, o nome da associação do sombreador HLSL e o sinalizador de visibilidade. Consulte o Modelo de Sombreador 5.1 para obter detalhes de nomes de sombreador. Em alguns hardwares, pode haver um ganho de desempenho de tornar apenas descritores visíveis para os estágios do sombreador que exigem eles (consulte D3D12_SHADER_VISIBILITY).

entrada de tabela do descritor raiz

O layout da assinatura raiz é bastante flexível, com algumas restrições impostas ao hardware menos capaz. Independentemente do nível de hardware, os aplicativos sempre devem tentar tornar a assinatura raiz tão pequena quanto necessário para a máxima eficiência. Os aplicativos podem trocar por ter mais tabelas de descritor na assinatura raiz, mas menos espaço para constantes raiz ou vice-versa.

O conteúdo da assinatura raiz (as tabelas do descritor, as constantes raiz e os descritores raiz) que o aplicativo vinculou automaticamente são versãodo pelo driver D3D12 sempre que qualquer parte do conteúdo é alterada entre chamadas de desenho (gráficos)/expedição (computação). Portanto, cada desenho/expedição obtém um conjunto completo exclusivo de estado de assinatura raiz.

O ideal é que haja grupos de PSOs (Objetos de Estado do Pipeline) que compartilham a mesma assinatura raiz. Depois que uma assinatura raiz é definida no pipeline, todas as associações que ela define (tabelas de descritor, descritores, constantes) podem ser definidas ou alteradas individualmente, incluindo herança em pacotes.

Um aplicativo pode fazer sua própria compensação entre quantas tabelas de descritor deseja versus descritores embutidos (que levam mais espaço, mas removem uma indireção) versus constantes embutidas (que não têm indireção) que desejam na assinatura raiz. Os aplicativos devem usar a assinatura raiz da forma mais poupada possível, dependendo da memória controlada pelo aplicativo, como heaps e heaps de descritor apontando para eles para representar dados em massa.

Assinaturas raiz