Compartilhar via


Visão geral das tabelas de descritores

Cada tabela de descritor armazena descritores de um ou mais tipos: SRVs, UAVs, CBVs e samplers. Uma tabela de descritor não é uma alocação de memória; é simplesmente um deslocamento e um comprimento em um heap de descritor.

Referenciando tabelas de descritores

O pipeline gráfico, por meio da assinatura raiz, obtém acesso aos recursos fazendo referência a tabelas de descritor por índice.

Uma tabela de descritor é, na verdade, apenas um sub-intervalo de um heap de descritor. Heaps de descritor representam a alocação de memória subjacente para uma coleção de descritores. Como a alocação de memória é uma propriedade da criação de um heap de descritor, a definição de uma tabela de descritor de um é tão barata quanto identificar uma região no heap para o hardware. As tabelas de descritor não precisam ser criadas ou destruídas no nível da API. Elas são meramente identificadas para drivers como um deslocamento e um tamanho fora de um heap sempre que referenciados.

É certamente possível que um aplicativo defina tabelas de descritores muito grandes quando seus sombreadores querem a liberdade de selecionar entre um vasto conjunto de descritores disponíveis (muitas vezes referenciando texturas) em tempo real (talvez impulsionados por dados materiais).

A Assinatura Raiz faz referência à entrada da tabela do descritor com uma referência ao heap, o local inicial da tabela (um deslocamento do início do heap) e o comprimento (em entradas) da tabela. A imagem abaixo mostra esses conceitos: os ponteiros da tabela descritor da Assinatura Raiz e os descritores no heap do descritor que fazem referência à textura completa ou aos dados de buffer em um heap (no caso de uma textura, o heap padrão).

tabelas de descritor