Passer au contenu principal
Soumet un tableau de listes de commandes à exécuter.

Syntaxe

Paramètres

Count   _In_
Type : UINT
Nombre de listes de commandes à exécuter. ppCommandLists   _In_reads_(Count)
Type : ID3D12CommandList*
Tableau de listes de commandes ID3D12CommandList à exécuter.

Valeur de retour

Type : void

Remarques

L’application appelante doit s’assurer que le processeur graphique (GPU) n’est pas en train de lire l’une des listes de commandes soumises lors d’une exécution précédente. Pour réduire les coûts fixes associés aux commandes soumises au GPU, il est recommandé aux développeurs d’applications de regrouper les exécutions de listes de commandes.

Exécution asynchrone

Il est permis (en tant qu’extension XBOX) d’exécuter une liste de commandes avant qu’elle n’ait été fermée, et de continuer à enregistrer des commandes dans cette liste. Si une liste de commandes exécutée sur une file d’attente n’a pas encore été fermée, tout le travail émis ultérieurement sur cette file d’attente est mis en attente et n’est pas soumis au GPU tant que Close n’a pas été appelée sur la liste de commandes. La prise en charge de l’exécution asynchrone inclut les listes de commandes graphiques (directes), de calcul et DMA. L’exécution asynchrone des listes de commandes est soumise aux restrictions suivantes :
  • Une liste de commandes ouverte exécutée de manière asynchrone sur une file d’attente ne peut pas être exécutée sur la même file d’attente ni sur une autre avant d’être fermée. Une fois fermée, elle peut être exécutée de façon répétée, de manière classique.
  • Le thread chargé de terminer une liste de commandes exécutée de manière asynchrone ne doit pas utiliser la file d’attente sur laquelle cette liste a été exécutée tant que la liste n’est pas fermée. L’utilisation de la file d’attente par ce thread risque de provoquer des interblocages.
  • Aucune protection n’est assurée contre l’exécution d’une liste de commandes par un thread pendant qu’un autre thread enregistre des commandes dans cette liste. La sécurité des threads relève de la responsabilité du titre.
  • Toutes les listes de commandes exécutées de manière asynchrone doivent être fermées avant un appel à Suspend. Actuellement, la prise en charge de la capture PIX exige que toutes les listes de commandes exécutées de manière asynchrone soient fermées avant l’appel à Present.
  • Lorsque vous enregistrez des commandes dans la liste après l’avoir exécutée, évitez toute condition d’échec. Un échec après l’exécution produit une liste partiellement exécutée qui ne peut pas être terminée. Il n’est pas possible de localiser précisément les échecs de mémoire insuffisante et de validation ; par conséquent, ce qui a réellement été soumis au GPU est incertain, et les ressources référencées (les barrières, par exemple) restent de fait dans un état indéterminé.
Après l’exécution, les commandes enregistrées dans une liste de commandes sont soumises automatiquement au GPU, à la fin de chaque segment. L’indicateur D3D12XBOX_COMMAND_LIST_FLAG_DISABLE_AUTOMATIC_KICKOFFS peut être spécifié lors de la création de la liste de commandes afin de désactiver cette soumission automatique. Pour plus d’informations, consultez D3D12XBOX_COMMAND_LIST_FLAGS. Pour lancer une soumission immédiate des commandes enregistrées (utile pour la synchronisation au sein d’une liste de commandes), appelez la méthode de liste de commandes KickoffX ou KickoffX afin de forcer la fin du segment actuel et sa soumission pour traitement. Close soumet le dernier segment de la liste de commandes ainsi que tout autre travail en attente sur la file d’attente d’exécution.

Configuration requise

En-tête : d3d12_x.h Bibliothèque : d3d12_x.lib Plateformes prises en charge : famille XBOX One

Voir aussi

ID3D12CommandQueue
Dernière modification le 6 octobre 2026