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.
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.
- D3D12_COMMAND_QUEUE_DESC : a un membre NodeMask .
- CreateCommandQueue : crée une file d’attente à partir d’une structure D3D12_COMMAND_QUEUE_DESC .
- CreateCommandList : prend un paramètre nodeMask .
- D3D12_DESCRIPTOR_HEAP_DESC : a un membre NodeMask .
- CreateDescriptorHeap : crée un tas de descripteur à partir d’une structure D3D12_DESCRIPTOR_HEAP_DESC .
- D3D12_QUERY_HEAP_DESC : a un membre NodeMask .
- CreateQueryHeap : crée un tas de requête à partir d’une structure D3D12_QUERY_HEAP_DESC .
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).
- D3D12_CROSS_NODE_SHARING_TIER : détermine la prise en charge du partage entre nœuds.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : structure référençant des D3D12_CROSS_NODE_SHARING_TIER.
- D3D12_FEATURE_DATA_ARCHITECTURE : contient un membre NodeIndex .
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : a un membre NodeMask .
- CreateGraphicsPipelineState : crée un objet d’état de pipeline graphique à partir d’une structure D3D12_GRAPHICS_PIPELINE_STATE_DESC .
- D3D12_COMPUTE_PIPELINE_STATE_DESC : a un membre NodeMask .
- CreateComputePipelineState : crée un objet d’état de pipeline de calcul à partir d’une structure D3D12_COMPUTE_PIPELINE_STATE_DESC .
- CreateRootSignature : prend un paramètre nodeMask .
- D3D12_COMMAND_SIGNATURE_DESC : a un membre NodeMask .
- CreateCommandSignature : crée un objet de signature de commande à partir d’une structure D3D12_COMMAND_SIGNATURE_DESC .
API de création de ressources
Les API suivantes référencent des masques de nœud.
- D3D12_HEAP_PROPERTIES : a à la fois des membres CreationNodeMask et VisibleNodeMask .
- GetResourceAllocationInfo : a un paramètre visibleMask .
- GetCustomHeapProperties : a un paramètre nodeMask .
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.
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle : avec une clôture en tant que paramètre. Avec une ressource ou un tas en tant que paramètres, cette méthode n’accepte pas les nœuds en tant que paramètres, car les masques de nœud sont hérités d’objets créés précédemment.
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView
Rubriques connexes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour