Skip to main content
Exécute indirectement un bundle à partir d’un tampon, un bundle étant une représentation sous forme de tampon de commandes GPU de dessins GPU et de définitions d’état. Cette API permet de créer et de gérer des bundles plus efficacement qu’avec l’API Direct3d 12 standard ExecuteBundle.

Syntaxe

Paramètres

pBundleBuffer   _In_
Type : ID3D12Resource*
Spécifie un pointeur vers une ressource de tampon qui contient des données de bundle. Le tampon doit avoir été créé avec l’attribut D3D12XBOX_RESOURCE_FLAG_ALLOW_INDIRECT_BUFFER défini ; sinon, le tampon doit se trouver dans la mémoire PAGE_GPU_EXECUTE. BundleBufferOffset   _In_
Type : UINT
Décalage, en octets, entre le début du tampon de bundle et le début des données du bundle. Doit être un multiple de 4. MaxSize   _In_
Type : UINT
La taille du bundle peut être spécifiée de deux manières :
  1. Si pSizeBuffer est NULL, MaxSize spécifie le nombre exact d’octets du bundle à exécuter.
  2. Si pSizeBuffer n’est pas NULL, MaxSize spécifie le nombre maximal d’octets à exécuter. Si la taille spécifiée par pSizeBuffer dépasse MaxSize au moment de l’exécution sur le GPU, le GPU abandonne complètement l’exécution du bundle. Cela permet d’éviter un blocage du GPU lorsque celui-ci est utilisé pour créer le bundle et que les données dépassent le budget qui leur est alloué.
La taille des bundles ne peut pas dépasser 4 Mo. pSizeBuffer   _In_opt_
Type : ID3D12Resource*
Spécifie une ressource de tampon (ID3D12Resource) qui contient une taille 32 bits, en octets. Elle est utilisée pour les tailles générées par le GPU. SizeBufferOffset   _In_
Type : UINT
Décalage, en octets, entre le début du tampon de taille et la taille 32 bits, en octets. PredicationBufferOffset   _In_
Type : UINT
Réservé pour un usage futur ; doit être égal à zéro.

Valeur de retour

Type : void

Remarques

Cette API active la fonctionnalité Build-Your-Own-Bundles, qui permet à un appelant de créer des tampons de commandes GPU à l’aide de son propre code CPU ou GPU, au moment de l’exécution ou hors ligne. La mémoire des bundles peut également être gérée explicitement. Ces deux caractéristiques contrastent avec l’API ExecuteBundle standard, où les bundles ne peuvent être créés qu’au moment de l’exécution, sur le CPU, à l’aide des API D3D, et avec une surcharge mémoire importante liée aux objets. La fonctionnalité Build-Your-Own-Bundles peut contenir tous les mêmes types de dessins et de modifications d’état que ceux pouvant être enregistrés dans des bundles ordinaires. Cet ensemble comprend toutes les API D3D à haute fréquence, mais aucune API D3D à basse fréquence, comme celles qui définissent les cibles de rendu ou les effacements. Le processeur de commandes GPU de la XBOX One implémente nativement ces API avec des encodages de paquets très simples. Pour créer les données du tampon de commandes, utilisez les définitions D3D12XBOX_PACKET_* de l’en-tête d3d12_x.h conjointement avec l’introspection des objets d’état de pipeline et des objets Root Signature. Servez-vous des fonctions inline de d3d12_x.h comme référence pour savoir comment procéder ; aucune documentation supplémentaire n’est fournie au-delà de ce qui figure dans l’en-tête. Les données de paquet d’un objet d’état de pipeline ne sont valides que pendant la durée de vie de cet objet d’état de pipeline. Cela signifie que si un bundle est créé hors ligne, tous les appels à SetPipelineState dans ce bundle doivent être corrigés pour refléter les versions de ces objets d’état de pipeline créées au moment de l’exécution, avant que le bundle puisse être exécuté par le GPU. De même, toutes les données de pointeur enregistrées hors ligne dans un bundle (par exemple pour les tables de descripteurs) doivent être corrigées au moment de l’exécution, avant l’exécution. ExecuteIndirectBundleX ne peut pas elle-même être appelée à partir d’un bundle. Notez l’utilisation de NopX pour ajouter un remplissage sans opération à une liste de commandes. À partir du GDK de mars 2024, ExecuteIndirectBundleX peut être utilisée sur les listes de commandes de calcul asynchrone sur les consoles XBOX Series. Lorsqu’elle est utilisée en calcul asynchrone, les tampons de nombre et de bundle doivent résider dans la même ID3D12Resource ; en outre, la valeur de nombre doit se trouver 4 octets avant le contenu du bundle, c’est-à-dire que BundleBufferOffset doit être égal à SizeBufferOffset plus 4 octets. Pour exécuter une liste de commandes avant sa fermeture, consultez CreateCommandListX et CloseBundleX.

Configuration requise

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

Voir aussi

ID3D12GraphicsCommandList
ExecuteBundle
Last modified on October 6, 2026