Compartilhar via


Predicação

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

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.

A princípio, 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, o tesselador e o 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 a rasterização e o 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).

SetPredication

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 , ela 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 Direct, Compute e Copy. O buffer de origem pode estar em qualquer tipo de heap (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 oferece suporte à 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_ARGUMENT e simplesmente um alias).

O conjunto de operações que podem ser predicadas são:

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.

Contadores e Consultas

Medição de Desempenho

Passo a passo de consultas de predicação