Predicação
Predication é um recurso que permite que a GPU em vez da CPU determine para não desenhar, copiar ou expedir um objeto.
Visão geral
O uso típico da precatório é com oclusão; se uma caixa delimitadora for desenhada e estiver ocluída, obviamente não haverá nenhum ponto em desenhar o próprio objeto. Nessa situação, o desenho do objeto pode ser "predefinido", permitindo sua remoção da renderização real pela GPU.
No início, isso pode parecer redudant sobre e acima do teste de profundidade padrão mais um passe de profundidade inicial. Mas a precatório pode remover a sobrecarga do próprio estado de comando draw, além da rasterização. Embora uma passagem de profundidade inicial remova pixels desnecessários, ela ainda pode executar sombreadores de vértice, casco, domínio e geometria e invocar o assembler de entrada de função fixa, o tesselator e o rasterizador. Ao desenhar uma caixa delimitadora simples ou um volume delimitador semelhante, que é mais simples de processar e rasterizar do que o modelo real, você evita rasterização e processamento desnecessários.
Ao contrário do Direct3D 11, a pré-indicação é dissociada de consultas e é expandida no Direct3D 12 para permitir que um aplicativo predicado objetos com base em qualquer raciocínio que o desenvolvedor do aplicativo possa decidir (não apenas oclusão).
SetPredication
A pré-indicação pode ser definida com base no valor de 64 bits em um buffer (consulte D3D12_PREDICATION_OP).
Quando a GPU executa um comando SetPredication , ela ajusta o valor no buffer. Alterações futuras nos dados no buffer não afetam retroativamente o estado de precatório.
Se o parâmetro de entrada Buffer for NULL, a pré-indicação será desabilitada.
As dicas de pré-indicação não estão presentes na API do Direct3D 12; e a pré-indicação é permitida em listas de comandos diretas, de computação e de cópia. O buffer de origem pode estar em qualquer tipo de heap (padrão, upload, readback, personalizado).
O runtime principal validará o seguinte:
- AlignedBufferOffset é um múltiplo de 8 bytes
- O recurso é um buffer
- A operação é um membro válido da enumeração
- SetPredication não pode ser chamado de dentro de um pacote
- O tipo de lista de comandos dá suporte à pré-indicação
- O deslocamento não excede o tamanho do buffer
A camada de depuração emitirá um erro se o buffer de origem não estiver no D3D12_RESOURCE_STATE_PREDICATION (que é o mesmo que D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT e simplesmente um alias).
O conjunto de operações que podem ser pré-dedicadas são:
- DrawInstanced
- DrawIndexedInstanced
- Dispatch
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle não é próprio predefinido. Em vez disso, as operações individuais da lista acima que estão contidas no lado do pacote são predefinidas.
Os métodos ID3D12GraphicsCommandList ResolveQueryData, BeginQuery e EndQuery não são pré-dedicados.
Tópicos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de