Systeme mit mehreren Adaptern
Beschreibt die Unterstützung in Direct3D 12 für Systeme, auf denen mehrere Adapter installiert sind, die Szenarien abdecken, in denen Ihre Anwendung explizit auf mehrere GPU-Adapter zielt, und Szenarien, in denen Treiber implizit mehrere GPU-Adapter im Auftrag Ihrer Anwendung verwenden.
Übersicht über mehrere Adapter
Ein GPU-Adapter kann ein beliebiger Adapter (Grafik oder Compute, diskret oder integriert) eines beliebigen Herstellers sein, der Direct3D 12 unterstützt.
Auf mehrere Adapter wird als Knoten verwiesen. Eine Reihe von Elementen, z. B. die Warteschlangen, gelten für jeden Knoten. Wenn also zwei Knoten enthalten sind, gibt es zwei standardmäßige 3D-Warteschlangen. Andere Elemente, z. B. der Pipelinezustand und stamm- und befehlssignaturen, können auf einen oder mehrere oder alle Knoten verweisen, wie im Diagramm dargestellt.

Freigeben von Heaps über Adapter hinweg
Weitere Informationen finden Sie im Thema Freigegebene Heaps.
APIs mit mehreren Adaptern und Knotenmasken
Ähnlich wie bei vorherigen Direct3D-APIs wird jeder Satz verknüpfter Adapter als einzelnes IDXGIAdapter3-Objekt aufzählt. Alle Ausgaben, die an einen Adapter im Link angefügt sind, werden als an das einzelne IDXGIAdapter3-Objekt angefügt aufzählt.
Ihre Anwendung kann die Anzahl der physischen Adapter, die einem bestimmten Gerät zugeordnet sind, durch Aufrufen von ID3D12Device::GetNodeCount bestimmen.
Viele APIs in Direct3D 12 akzeptieren eine Knotenmaske (eine Bitmaske), die die Gruppe von Knoten angibt, auf die der API-Aufruf verweist. Jeder Knoten verfügt über einen nullbasierten Index. In der Knotenmaske wird 0 jedoch in Bit 1 übersetzt. 1 übersetzt in Bit 2; Und so weiter.
Einzelne Knoten
Beim Aufrufen der folgenden APIs (einzelner Knoten) gibt Ihre Anwendung einen einzelnen Knoten an, dem der API-Aufruf zugeordnet wird. In den meisten Jahren wird dies durch eine Knotenmaske angegeben. Jedes Bit in der Maske entspricht einem einzelnen Knoten. Für alle in diesem Abschnitt beschriebenen APIs müssen Sie genau ein Bit in der Knotenmaske festlegen.
- D3D12 _ COMMAND _ QUEUE _ DESC: verfügt über ein NodeMask-Member.
- CreateCommandQueue: Erstellt eine Warteschlange aus einer D3D12 _ COMMAND QUEUE _ _ DESC-Struktur.
- CreateCommandList: akzeptiert einen nodeMask-Parameter.
- D3D12 _ DESCRIPTOR _ HEAP _ DESC: verfügt über einen NodeMask-Member.
- CreateDescriptorHeap: Erstellt einen Deskriptorheap aus einer D3D12 _ DESCRIPTOR _ HEAP _ DESC-Struktur.
- D3D12 _ QUERY _ HEAP _ DESC: verfügt über ein NodeMask-Mitglied.
- CreateQueryHeap: Erstellt einen Abfrageheap aus einer D3D12 _ QUERY _ HEAP _ DESC-Struktur.
Mehrere Knoten
Beim Aufrufen der folgenden APIs (mehrere Knoten) gibt Ihre Anwendung eine Gruppe von Knoten an, denen der API-Aufruf zugeordnet wird. Sie geben Knotenaffinität als Knotenmaske an, möglicherweise mit mehreren festgelegten Bits. Wenn Ihre Anwendung für diese Bitmaske 0 übergibt, konvertiert der Direct3D 12-Treiber diese in die Bitmaske 1 (was angibt, dass das Objekt Knoten 0 zugeordnet ist).
- D3D12 _ CROSS _ NODE _ SHARING _ TIER : Bestimmt die Unterstützung für die knotenübergreifende Freigabe.
- D3D12 _ FEATURE _ DATA _ D3D12 _ OPTIONS : Struktur, die auf D3D12 _ CROSS NODE SHARING TIER _ _ (KNOTENÜBERGREIFENDE _ FREIGABEEBENE) verweisen.
- D3D12 _ FEATURE _ DATA _ ARCHITECTURE: Enthält ein NodeIndex-Member.
- D3D12 _ GRAPHICS _ PIPELINE _ STATE _ DESC: verfügt über ein NodeMask-Member.
- CreateGraphicsPipelineState: Erstellt ein Grafikpipeline-Zustandsobjekt aus einer D3D12 _ GRAPHICS PIPELINE STATE _ _ _ DESC-Struktur.
- D3D12 _ COMPUTE _ PIPELINE _ STATE _ DESC: verfügt über ein NodeMask-Member.
- CreateComputePipelineState: Erstellt ein Computepipeline-Zustandsobjekt aus einer D3D12 _ COMPUTE PIPELINE STATE _ _ _ DESC-Struktur.
- CreateRootSignature:akzeptiert einen nodeMask-Parameter.
- D3D12 _ COMMAND _ SIGNATURE _ DESC:verfügt über einen NodeMask-Member.
- CreateCommandSignature: Erstellt ein Befehlssignaturobjekt aus einer D3D12 _ COMMAND SIGNATURE _ _ DESC-Struktur.
Ressourcenerstellungs-APIs
Die folgenden APIs verweisen auf Knotenmasken.
- D3D12 _ HEAP _ PROPERTIES: verfügt sowohl über CreationNodeMask- als auch über VisibleNodeMask-Member.
- GetResourceAllocationInfo: verfügt über einen visibleMask-Parameter.
- GetCustomHeapProperties: verfügt über einen nodeMask-Parameter.
Beim Erstellen einer reservierten Ressource wird kein Knotenindex oder keine Maske angegeben. Die reservierte Ressource kann einem Heap auf jedem Knoten zugeordnet werden (nach den Regeln für die knotenübergreifende Freigabe).
Die MakeResident-Methode funktioniert intern mit Adapterwarteschlangen. Es ist nicht erforderlich, dass Ihre Anwendung dafür etwas anspricht.
Beim Aufrufen der folgenden ID3D12Device-APIs muss Ihre Anwendung keine Knoten angeben, denen der API-Aufruf zugeordnet wird, da der API-Aufruf für alle Knoten gilt.
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle: mit einem Fence als Parameter. Bei einer Ressource oder einem Heap als Parameter akzeptiert diese Methode keine Knoten als Parameter, da Knotenmasken von zuvor erstellten Objekten geerbt werden.
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView