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 : voidRemarques
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é.
