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.
A seção a seguir mostra assinaturas raiz variando em complexidade de vazias a completamente cheias.
- Uma assinatura raiz vazia
- Uma constante
- Adicionando um de exibição de buffer constante raiz
- Tabelas de descritores de vinculação
- Uma assinatura raiz mais complexa
- Streaming Shader Resource Views
- Tópicos relacionados
Uma assinatura raiz vazia
É improvável que uma assinatura raiz vazia seja útil, mas poderia ser usada em um passo de renderização trivial com o uso apenas do assembler de entrada e sombreadores de vértice e pixel mínimos que não acessam nenhum descritor. Além disso, o estágio de mistura, o destino de renderização e os estágios de estêncil de profundidade estão disponíveis, mesmo com uma assinatura de raiz vazia.
Uma constante
O slot de associação de API é onde o argumento raiz para esse parâmetro será vinculado em tempo de registro da lista de comandos. O número dos slots de ligação da API está implícito, com base na ordem dos parâmetros na assinatura raiz (o primeiro é sempre zero). O slot de ligação HLSL é onde o sombreador verá o parâmetro raiz aparecer. O tipo ("uint" no exemplo acima) não é conhecido pelo hardware, mas é apenas um comentário na imagem, o hardware simplesmente verá o único DWORD como o conteúdo.
Para vincular uma constante em tempo de registro da lista de comandos, um comando semelhante ao seguinte seria usado:
pCmdList->SetComputeRoot32BitConstant(0,seed); // 0 is the parameter index, seed is used by the shaders
Adicionando uma exibição de buffer constante raiz
de assinatura raiz
Este exemplo mostra duas constantes de raiz e uma raiz CBV (Constant Buffer View) que custa dois slots DWORD.
Para vincular uma exibição de buffer constante, use um comando como o seguinte. Observe que o primeiro parâmetro (2) é o slot mostrado na imagem. Normalmente, uma matriz de constantes será configurada e, em seguida, disponibilizada para os sombreadores em b0 como um CBV.
pCmdList->SetGraphicsRootConstantBufferView(2,GPUVAForCurrDynamicConstants);
Tabelas de descritores de vinculação
de assinatura raiz
Este exemplo mostra o uso de duas tabelas de descritores; um declarando uma tabela de cinco descritores que estarão disponíveis no momento da execução em um heap de descritor de CBV_SRV_UAV e outro declarando uma tabela de dois descritores que aparecerão no momento da execução em um heap de descritor de amostra.
Para vincular tabelas de descritores ao gravar uma lista de comandos.
pCmdList->SetComputeRootDescriptorTable(1, handleToCurrentMaterialDataInHeap);
pCmdList->SetComputeRootDescriptorTable(2, handleToCurrentMaterialDataInSamplerHeap);
Outra característica da assinatura raiz é a constante de raiz float4 que tem quatro DWORDS de tamanho. O comando a seguir vincula apenas os dois DWORDS do meio dos quatro.
pCmdList->SetComputeRoot32BitConstants(0,2,myFloat2Array,1); // 2 constants starting at offset 1 (middle 2 values in float4)
Uma assinatura raiz mais complexa
Este exemplo mostra uma assinatura raiz densa com a maioria dos tipos de entradas. Duas das tabelas de descritores (nos slots 3 e 6) incluem matrizes de tamanho não limitado. O ônus aqui é sobre o aplicativo para tocar apenas descritores válidos em uma pilha. Arrays não limitados ou muito grandes exigem a camada de hardware 2+ de suporte à vinculação de recursos.
Existem dois amostradores estáticos (ligados sem a necessidade de slots de assinatura raiz).
No slot 9, UAV u4 e UAV u5 são declarados no mesmo deslocamento da tabela de descritores. Este é o uso de um descritor com alias, um descritor na memória aparecerá como u4 e u5 nos sombreadores HLSL. Neste caso, o sombreador deve ser compilado com a opção D3D10_SHADER_RESOURCES_MAY_ALIAS ou a opção ou /res_may_alias no FXC. Os descritores com alias permitem que um descritor seja vinculado a vários pontos de ligação, sem ter que fazer alterações nos sombreadores.
Streaming Shader Resource Views
de assinatura raiz
Essa assinatura raiz ilustra um cenário em que todos os SRVs são transmitidos para dentro e para fora de uma grande matriz. No momento da execução, uma tabela de descritores pode ser definida uma vez quando a assinatura raiz é definida. Em seguida, todas as leituras de textura são feitas indexando na matriz através de constantes alimentadas através dos primeiros argumentos de raiz. Apenas uma pilha de descritor é necessária e só é atualizada à medida que as texturas são transmitidas para dentro ou para fora dos slots de descritor livres.
Os deslocamentos do descritor no heap grande são identificados por sombreadores usando as constantes nas exibições de buffer constante. Por exemplo, se um sombreador receber um ID de material, ele poderá indexar em uma grande matriz usando a constante para acessar o descritor necessário (que faz referência à textura necessária).
Este cenário requer hardware com camada de vinculação de recursos2+.
Tópicos relacionados