Predicación
Predicación es una característica que permite que la GPU en lugar de la CPU determine no 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 se puede "indicar", lo que permite su eliminación de la representación real mediante la GPU.
Al principio, esto podría parecer redundante sobre y encima de la prueba de profundidad estándar más un pase de profundidad temprano. Pero el predicado puede quitar la sobrecarga del propio estado del comando draw, además de la rasterización. Aunque un paso de profundidad temprana elimina 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 sencillo procesar y rasterizar que el modelo real, se 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, el predicado está deshabilitado.
Las sugerencias de predicación no están presentes en la API de Direct3D 12; y el predicado se permite en listas directas, de proceso y de comandos 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 indicar son:
- DrawInstanced
- DrawIndexedInstanced
- Dispatch
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle no se prefijo. En su lugar, las operaciones individuales de la lista anterior que se encuentran en el lado de la agrupación se indican previamente.
Los métodos ID3D12GraphicsCommandList ResolveQueryData, BeginQuery y EndQuery no están indicados.
Temas relacionados