Share via


Predicación

Predicación es una característica que permite que la GPU en lugar de la CPU determine que no se debe dibujar, copiar o enviar un objeto.

Información general

El uso típico de predicación es con oclusión; si se dibuja un rectángulo de selección y se ocluye, obviamente no hay ningún punto en dibujar el propio objeto. En esta situación, el dibujo del objeto puede ser "predestableado", lo que permite su eliminación de la representación real por parte de la GPU.

Al principio, esto podría parecer rehacer sobre y por encima de la prueba de profundidad estándar más un pase de profundidad temprano. Sin embargo, la predicación puede quitar la sobrecarga del propio estado del comando draw, además de la rasterización. Aunque un paso de profundidad temprana quita píxeles innecesarios, todavía puede ejecutar sombreadores de vértices, casco, dominio y geometría, e invocar el ensamblador de entrada de función fija, el tesselator y el rasterizador. Al dibujar un cuadro de límite simple o un volumen de límite similar , que es más fácil de procesar y rasterizar que el modelo real, evita la rasterización y el procesamiento innecesarios.

A diferencia de Direct3D 11, el predicado se desacopla de las consultas y se expande en Direct3D 12 para permitir que una aplicación predicar objetos en función de cualquier razonamiento que el desarrollador de la aplicación pueda decidir (no solo oclusión).

SetPredication

El predicado se puede establecer en función del valor de 64 bits dentro de un búfer (consulte D3D12_PREDICATION_OP).

Cuando la GPU ejecuta un comando SetPredication , ajusta el valor en el búfer. Los cambios futuros en los datos del búfer no afectan retroactivamente al estado de predicación.

Si el parámetro de entrada Buffer es NULL, se deshabilita la predicación.

Las sugerencias de predicación no están presentes en la API de Direct3D 12; y se permite predicación en listas de comandos directos, de proceso y de copia. El búfer de origen puede estar en cualquier tipo de montón (valor predeterminado, carga, lectura diferida, personalizado).

El entorno de ejecución principal validará lo siguiente:

  • AlignedBufferOffset es un múltiplo de 8 bytes
  • El recurso es un búfer
  • La operación es un miembro válido de la enumeración.
  • No se puede llamar a SetPredication desde dentro de una agrupación
  • El tipo de lista de comandos admite predicación
  • El desplazamiento no supera el tamaño del búfer.

La capa de depuración emitirá un error si el búfer de origen no está en el D3D12_RESOURCE_STATE_PREDICATION (que es el mismo que D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT y simplemente un alias).

El conjunto de operaciones que se pueden predesponer son:

ExecuteBundle no se prefijo. En su lugar, las operaciones individuales de la lista anterior que están contenidas en el lado de la agrupación se predescriben.

Los métodos ID3D12GraphicsCommandList ResolveQueryData, BeginQuery y EndQuery no se indican previamente.

Contadores y consultas

Medición de rendimiento

Tutorial de consultas de predicación