Partager via


IDMLCommandRecorder ::RecordDispatch, méthode (directml.h)

Enregistre l’exécution d’un objet répartissable (un initialiseur d’opérateur ou un opérateur compilé) dans une liste de commandes.

Cette méthode n’envoie pas l’exécution au GPU ; il l’enregistre simplement dans la liste de commandes. Vous êtes responsable de la fermeture de la liste de commandes et de son envoi à la file d’attente de commandes Direct3D 12.

Avant l’exécution de cet appel sur le GPU, toutes les ressources liées doivent être dans l’état D3D12_RESOURCE_STATE_UNORDERED_ACCESS ou un état implicitement promotable à D3D12_RESOURCE_STATE_UNORDERED_ACCESS, comme D3D12_RESOURCE_STATE_COMMON. Une fois cet appel terminé, les ressources restent à l’état D3D12_RESOURCE_STATE_UNORDERED_ACCESS . La seule exception à cela concerne les tas de chargement liés lors de l’exécution d’un initialiseur d’opérateur et alors qu’un ou plusieurs tenseurs ont l’indicateur DML_TENSOR_FLAG_OWNED_BY_DML défini. Dans ce cas, les tas de chargement liés à l’entrée doivent être à l’état D3D12_RESOURCE_STATE_GENERIC_READ et rester dans cet état, comme requis par tous les tas de chargement.

Cette méthode réinitialise l’état suivant dans la liste de commandes.

  • Signature racine de calcul
  • État du pipeline
Aucun autre état de liste de commandes n’est modifié.

Bien que cette méthode utilise une table de liaison représentant les ressources à lier au pipeline, elle ne définit pas les tas de descripteurs contenant les descripteurs eux-mêmes. Par conséquent, votre application est chargée d’appeler ID3D12GraphicsCommandList ::SetDescriptorHeaps pour lier les tas de descripteurs corrects au pipeline.

Si DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE n’a pas été défini lors de la compilation de l’opérateur, toutes les liaisons doivent être définies sur la table de liaison avant l’appel de RecordDispatch , sinon le comportement n’est pas défini. Sinon, si l’indicateur _DESCRIPTORS_VOLATILE est défini, la liaison des ressources peut être différée jusqu’à ce que la liste de commandes Direct3D 12 soit envoyée à la file d’attente de commandes pour exécution.

Cette méthode agit logiquement comme un appel à ID3D12GraphicsCommandList ::D ispatch. Par conséquent, des barrières de vue d’accès non ordonnée (UAV) sont nécessaires pour garantir un ordre correct s’il existe des dépendances de données entre les distributions. Cette méthode n’insère pas de barrières UAV sur les ressources d’entrée ou de sortie. Votre application doit s’assurer que les barrières UAV correctes sont effectuées sur toutes les entrées si leur contenu dépend d’une amont dispatch, et sur toutes les sorties s’il existe des distributions en aval qui dépendent de ces sorties.

Cette méthode ne contient aucune référence à l’une des interfaces transmises. Il est de votre responsabilité de vous assurer que l’objet IDMLDispatchable n’est pas libéré tant que toutes les distributions qui l’utilisent n’ont pas terminé l’exécution sur le GPU.

Syntaxe

void RecordDispatch(
  ID3D12CommandList *commandList,
  IDMLDispatchable  *dispatchable,
  IDMLBindingTable  *bindings
);

Paramètres

commandList

Type : ID3D12CommandList*

Pointeur vers une interface ID3D12CommandList représentant la liste de commandes dans laquelle enregistrer l’exécution. La liste de commandes doit être ouverte et doit avoir le type D3D12_COMMAND_LIST_TYPE_DIRECT ou D3D12_COMMAND_LIST_TYPE_COMPUTE.

dispatchable

Type : IDMLDispatchable*

Pointeur vers une interface IDMLDispatchable représentant l’objet (un initialiseur d’opérateur ou un opérateur compilé) dont l’exécution sera enregistrée dans la liste de commandes.

bindings

Type : IDMLBindingTable*

Pointeur vers une interface IDMLBindingTable représentant les liaisons à utiliser pour l’exécution de l’objet dispatchable. Si l’indicateur DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE n’a pas été défini, vous devez remplir toutes les liaisons requises, sinon une erreur se produit.

Valeur de retour

None

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête directml.h
Bibliothèque DirectML.lib
DLL DirectML.dll

Voir aussi

Liaison dans DirectML

IDMLCommandRecorder