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:

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.

Contadores e consultas

Medida de desempenho

Passo a passo das consultas de pré-indicação