Systèmes à plusieurs adaptateurs

Décrit la prise en charge dans Direct3D 12 pour les systèmes équipés de plusieurs adaptateurs, couvrant les scénarios où votre application cible explicitement plusieurs adaptateurs GPU, et les scénarios où les pilotes utilisent implicitement plusieurs adaptateurs GPU au nom de votre application.

Aperçu du multi-adaptateur

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

Plusieurs adaptateurs sont référencés comme nœuds. Un certain nombre d’éléments, tels que les files d’attente, s’appliquent à chaque nœud, donc 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 racines et de commande, peuvent se référer à un ou plusieurs ou à tous les nœuds, comme indiqué dans le diagramme.

les files d’attente s’appliquent à chaque adaptateur graphique

Partage de segments entre adaptateurs

Veuillez consulter la section Segments partagés.

API multi-adaptateurs et masques de nœuds

Similaires aux API Direct3D précédentes, chaque ensemble d’adaptateurs liés est énuméré comme un seul objet IDXGIAdapter3. Toutes les sorties attachées à un adaptateur du lien sont énumérées comme attachées à l’objet unique IDXGIAdapter3.

Votre application peut déterminer le nombre d’adaptateurs physiques associés à un périphérique 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 API se réfère. Chaque nœud a un index basé sur zéro. Mais dans le masque de nœud, zéro se traduit par le bit 1; 1 se traduit par le 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 avec lequel l’appel API sera associé. La plupart du temps, cela est spécifié par un masque de nœud. Chaque bit du masque correspond à un nœud unique. 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 (nœud multiple), votre application spécifie un ensemble de nœuds avec lequel l’appel API sera associé. Vous spécifiez l’affinité de nœud sous forme de masque de nœud, potentiellement avec plusieurs bits définis. Si votre application passe 0 pour ce masque de bits, alors 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 font référence aux masques de nœuds.

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 (suivant les règles de partage inter-nœuds).

La méthode MakeResident fonctionne en interne avec des files d’attente d’adaptateurs, il n’est pas nécessaire que votre application spécifie quoi que ce soit pour cela.

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

Guide de programmation Direct3D 12