Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Pilhas de descritores visíveis de sombreamento, são pilhas de descritores que podem ser referenciados por sombreadores através de tabelas de descritores.
- Visão geral
- Um exemplo
- Tópicos relacionados
Visão geral
As pilhas de descritores que podem ser referenciadas por sombreadores por meio de tabelas de descritores vêm em alguns sabores: Um tipo de pilha, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, pode conter Exibições de Recursos de Shader, Exibições de Acesso Não Ordenado e Exibições de Buffer Constantes, todas misturadas. Qualquer local na pilha pode ser qualquer um dos tipos de descritores listados. Outro tipo de heap, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, armazena apenas amostradores, refletindo o fato de que, para a maioria do hardware, os amostradores são gerenciados separadamente de SRVs, UAVs, CBVs.
Pilhas de descritor desses tipos podem ser solicitadas para serem sombreador visível ou não quando a pilha é criada (o último – não sombreador visível – pode ser útil para descritores de preparo na CPU). Quando solicitado para ser sombreador visível, cada um dos tipos de heap acima pode ter um limite de tamanho de hardware para qualquer alocação de heap de descritor individual.
Os aplicativos podem criar qualquer número de heaps de descritor, e heaps de descritores visíveis não sombreadores não são restritos em tamanho. Se um heap de descritor visível de sombreador criado pelo aplicativo for menor do que o limite de tamanho de hardware, o driver poderá optar por subalocar o heap do descritor de um heap de descritor subjacente maior para que vários heaps de descritor de API caibam dentro de um heap de descritor de hardware. A razão pela qual isso pode acontecer é que, para alguns hardwares, alternar entre heaps de descritores de hardware durante a execução requer uma espera de GPU por ociosidade (para garantir que as referências de GPU ao heap do descritor anterior sejam concluídas). Se todos os heaps de descritor criados por um aplicativo se ajustarem às capacidades máximas do heap de hardware aplicável, essas esperas não ocorrerão ao alternar heaps de descritor de API durante a renderização. Os aplicativos devem permitir a possibilidade, no entanto, de que a mudança do heap descritor atual possa incorrer em uma espera por ociosidade.
Para evitar ser afetado por essa possível espera por ociosidade no switch de heap do descritor, os aplicativos podem aproveitar as quebras na renderização que fariam com que a GPU ficasse ociosa por outros motivos, como o tempo para fazer switches de heap do descritor, já que uma espera por ociosidade está acontecendo de qualquer maneira.
O mecanismo e a semântica para identificar heaps de descritores para sombreadores durante a gravação da lista de comandos/bundle são descritos na referência da API.
Um exemplo
A imagem abaixo mostra dois heaps descritores fazendo referência a duas texturas 2D separadas sendo armazenadas em dois slots de um grande heap padrão. A pilha do descritor que é sombreador visível pode ser acessada pelo pipeline gráfico (incluindo os sombreadores) e, portanto, a textura 2D está disponível para o pipeline.
Observação
Muitas vezes, há um limite no hardware da GPU da quantidade de memória local da GPU gravável pela CPU (referida como memória combinada de gravação) para pilhas de descritores. Normalmente, esse limite é de cerca de 96MB para todos os processos. Uma pilha de descritor de um milhão de membros, com descritores de 32bytes, usaria até 32MB, por exemplo. O driver recorrerá à memória do sistema, se necessário, embora seja uma boa prática não criar um grande número de grandes pilhas de descritores.
Tópicos relacionados