Partager via


Prédicat

La prédication est une fonctionnalité qui permet au GPU plutôt qu’au processeur de déterminer de ne pas dessiner, copier ou distribuer un objet.

Vue d’ensemble

L’utilisation classique de la prédication est avec l’occlusion ; si un cadre englobant est dessiné et est obstrué, il n’y a évidemment aucun point dans le dessin de l’objet lui-même. Dans ce cas, le dessin de l’objet peut être « prédicé », ce qui permet sa suppression du rendu réel par le GPU.

Au début, cela peut sembler redondant au-dessus et au-dessus du test de profondeur standard, ainsi qu’une passe de profondeur précoce. Mais la prédication peut supprimer la surcharge de l’état de commande draw lui-même, ainsi que la rastérisation. Alors qu’une passe de profondeur précoce supprime des pixels inutiles, elle peut toujours exécuter des nuanceurs de vertex, de coque, de domaine et de géométrie, et appeler l’assembleur d’entrée de fonction fixe, le pavage et le rastériseur. En dessinant un cadre englobant simple ou un volume englobant similaire, qui est plus simple à traiter et à rastériser que le modèle réel, vous évitez une rastérisation et un traitement inutiles.

Contrairement à Direct3D 11, la prédication est découplée des requêtes et est développée dans Direct3D 12 pour permettre à une application de prédicater des objets en fonction du raisonnement sur lequel le développeur de l’application peut décider (pas seulement l’occlusion).

SetPredication

La prédication peut être définie en fonction de la valeur de 64 bits dans une mémoire tampon (reportez-vous à D3D12_PREDICATION_OP).

Lorsque le GPU exécute une commande SetPredication , il aligne la valeur dans la mémoire tampon. Les modifications futures apportées aux données dans la mémoire tampon n’affectent pas l’état de prédication.

Si la mémoire tampon du paramètre d’entrée est NULL, la prédication est désactivée.

Les indicateurs de prédication ne sont pas présents dans l’API Direct3D 12 ; et la prédication est autorisée sur des listes de commandes directes, de calcul et de copie. La mémoire tampon source peut se trouver dans n’importe quel type de tas (par défaut, charger, lire, personnaliser).

Le runtime principal valide les éléments suivants :

  • AlignedBufferOffset est un multiple de 8 octets
  • La ressource est une mémoire tampon
  • L’opération est un membre valide de l’énumération
  • SetPredication ne peut pas être appelé à partir d’un bundle
  • Le type de liste de commandes prend en charge la prédication
  • Le décalage ne dépasse pas la taille de la mémoire tampon

La couche de débogage émet une erreur si la mémoire tampon source n’est pas dans le D3D12_RESOURCE_STATE_PREDICATION (qui est identique à D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT, et simplement un alias).

L’ensemble d’opérations qui peuvent être prédicées est le suivant :

ExecuteBundle n’est pas prédicé lui-même. Au lieu de cela, les opérations individuelles de la liste ci-dessus qui sont contenues dans le côté du bundle sont prédicées.

Les méthodes ID3D12GraphicsCommandList ResolveQueryData, BeginQuery et EndQuery ne sont pas prédicées.

Compteurs et requêtes

Mesure des performances

Procédures pas à pas des requêtes de prédication