Predicação
A predicação é um recurso que permite que a GPU, em vez da CPU, determine não desenhar, copiar ou despachar um objeto.
- Visão geral
- SetPredication
- Tópicos relacionados
Visão geral
O uso típico da predicação é com oclusão; Se uma caixa delimitadora é desenhada e é ocluída, obviamente não há sentido em desenhar o objeto em si. Nessa situação, o desenho do objeto pode ser "predicado", permitindo sua remoção da renderização real pela GPU.
No início, isso pode parecer redundante além do teste de profundidade padrão mais uma passagem de profundidade antecipada. Mas a predicação pode remover a sobrecarga do próprio estado de comando de desenho, 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 montador, tesselador e rasterizador de entrada de função fixa. 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 predicação é dissociada das consultas e é expandida no Direct3D 12 para permitir que um aplicativo predice objetos com base em qualquer raciocínio que o desenvolvedor do aplicativo possa decidir (não apenas a oclusão).
SetPredicação
A predicação pode ser definida com base no valor de 64 bits dentro de um buffer (consulte D3D12_PREDICATION_OP).
Quando a GPU executa um comando SetPredication ele ajusta o valor no buffer. Alterações futuras nos dados no buffer não afetam retroativamente o estado de predicação.
Se o parâmetro de entrada Buffer for NULL, a predicação será desabilitada.
As dicas de predicação não estão presentes na API do Direct3D 12; e a predicação é permitida em listas de comandos diretas, de computação e cópia. O buffer de origem pode estar em qualquer tipo de pilha (padrão, upload, readback, personalizado).
O tempo de execução 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 suporta predicaçã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 estado D3D12_RESOURCE_STATE_PREDICATION (que é o mesmo que D3D12_RESOURCE_STATE_INDIRECT_ARGUMENTe simplesmente um alias).
O conjunto de operações que podem ser predicadas são:
- DrawInstanced
- DrawIndexedInstanced
- Despacho
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle não é predicado em si. Em vez disso, as operações individuais da lista acima que estão contidas no lado do pacote são predicadas.
Os métodos ID3D12GraphicsCommandList ResolveQueryData, BeginQuery e EndQuery não são predicados.
Tópicos relacionados