Systèmes à plusieurs adaptateurs

Décrit la prise en charge dans Direct3D 12 pour les systèmes sur lesquels plusieurs cartes sont installées, couvrant les scénarios où votre application cible explicitement plusieurs cartes GPU, et les scénarios où les pilotes utilisent implicitement plusieurs adaptateurs GPU pour le compte de votre application.

Vue d’ensemble des multi-adaptateurs

Un adaptateur GPU peut être n’importe quel adaptateur (graphique ou calcul, discret ou intégré), de n’importe quel fabricant, qui prend en charge Direct3D 12.

Plusieurs adaptateurs sont référencés en tant que nœuds. Un certain nombre d’éléments, tels que les files d’attente, s’appliquent à chaque nœud. Par conséquent, s’il y a deux nœuds, il y aura deux files d’attente 3D par défaut. D’autres éléments, tels que l’état du pipeline et les signatures racine et de commande, peuvent faire référence à un ou plusieurs nœuds, ou à tous les nœuds, comme illustré dans le diagramme.

Les files d’attente s’appliquent à chaque carte graphique

Partage de tas entre les adaptateurs

Consultez la rubrique Tas partagés .

API multi-adaptateurs et masques de nœud

Comme pour les API Direct3D précédentes, chaque ensemble d’adaptateurs liés est énuméré en tant qu’objet IDXGIAdapter3 unique. Toutes les sorties attachées à n’importe quel adaptateur dans le lien sont énumérées comme attachées à l’objet IDXGIAdapter3 unique.

Votre application peut déterminer le nombre d’adaptateurs physiques associés à un appareil donné en appelant ID3D12Device::GetNodeCount.

De nombreuses API dans Direct3D 12 acceptent un masque de nœud (un masque de bits), qui indique l’ensemble des nœuds auxquels l’appel d’API fait référence. Chaque nœud a un index de base zéro. Mais dans le masque de nœud, zéro se traduit par le bit 1 ; 1 se traduit par bit 2 ; et ainsi de suite.

Nœuds uniques

Lors de l’appel des API suivantes (nœud unique), votre application spécifie un nœud unique auquel l’appel d’API sera associé. La plupart du temps, cela est spécifié par un masque de nœud. Chaque bit du masque correspond à un seul nœud. Pour toutes les API décrites dans cette section, vous devez définir exactement un bit dans le masque de nœud.

Plusieurs nœuds

Lors de l’appel des API suivantes (plusieurs nœuds), votre application spécifie un ensemble de nœuds auxquels l’appel d’API sera associé. Vous spécifiez l’affinité de nœud en tant que masque de nœud, potentiellement avec plusieurs bits définis. Si votre application transmet 0 pour ce masque de bits, le pilote Direct3D 12 le convertit en masque de bits 1 (indiquant que l’objet est associé au nœud 0).

API de création de ressources

Les API suivantes référencent des masques de nœud.

Lors de la création d’une ressource réservée, aucun index ou masque de nœud n’est spécifié. La ressource réservée peut être mappée sur un tas sur n’importe quel nœud (en suivant les règles de partage entre nœuds).

La méthode MakeResident fonctionne en interne avec les files d’attente d’adaptateurs. Votre application n’a pas besoin de spécifier quoi que ce soit pour cela.

Lors de l’appel des API ID3D12Device suivantes, votre application n’a pas besoin de spécifier un ensemble de nœuds auxquels l’appel d’API sera associé, car l’appel d’API s’applique à tous les nœuds.

Guide de programmation de Direct3D 12