Systeme mit mehreren Adaptern
Beschreibt die Unterstützung in Direct3D 12 für Systeme, die mehrere Adapter installiert haben, wobei Szenarien behandelt werden, in denen Ihre Anwendung explizit auf mehrere GPU-Adapter ausgerichtet ist, 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) von jedem Hersteller 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 vorhanden sind, gibt es zwei standardmäßige 3D-Warteschlangen. Andere Elemente, z. B. der Pipelinestatus und Stamm- und Befehlssignaturen, können auf mindestens einen 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 früheren Direct3D-APIs wird jeder Satz verknüpfter Adapter als einzelnes IDXGIAdapter3-Objekt aufgezählt. Alle Ausgaben, die an einen beliebigen Adapter in der Verknüpfung angefügt sind, werden als Anlage an das einzelne IDXGIAdapter3-Objekt aufgezählt.
Ihre Anwendung kann die Anzahl der physischen Adapter bestimmen, die einem bestimmten Gerät zugeordnet sind, indem ID3D12Device::GetNodeCount aufgerufen wird.
Viele APIs in Direct3D 12 akzeptieren eine Knotenmaske (eine Bitmaske), die den Satz von Knoten angibt, auf den der API-Aufruf verweist. Jeder Knoten weist einen nullbasierten Index auf. Aber in der Knotenmaske übersetzt null in Bit 1; 1 wird in Bit 2 übersetzt; Und so weiter.
Einzelknoten
Beim Aufrufen der folgenden APIs (einzelner Knoten) gibt Ihre Anwendung einen einzelnen Knoten an, dem der API-Aufruf zugeordnet wird. Meistens 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 im Knotenformat festlegen.
- D3D12_COMMAND_QUEUE_DESC: verfügt über ein NodeMask-Element.
- CreateCommandQueue: erstellt eine Warteschlange aus einer D3D12_COMMAND_QUEUE_DESC-Struktur.
- CreateCommandList: verwendet einen nodeMask-Parameter.
- D3D12_DESCRIPTOR_HEAP_DESC: verfügt über ein NodeMask-Element.
- CreateDescriptorHeap: erstellt einen Deskriptor-Heap aus einer D3D12_DESCRIPTOR_HEAP_DESC-Struktur.
- D3D12_QUERY_HEAP_DESC: verfügt über ein NodeMask-Element.
- CreateQueryHeap: erstellt einen Abfrage-Heap aus einer D3D12_QUERY_HEAP_DESC-Struktur.
Mehrere Knoten
Beim Aufrufen der folgenden (mehrere Knoten)-APIs gibt Ihre Anwendung eine Reihe von Knoten an, denen der API-Aufruf zugeordnet wird. Sie geben die Knotenaffinität als Knotenformat an, möglicherweise mit mehreren Bits. Wenn die Anwendung 0 für diese Bitmaske übergibt, konvertiert der Direct3D 12-Treiber dies 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 verweist.
- D3D12_FEATURE_DATA_ARCHITECTURE: enthält ein NodeIndex-Element.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC: verfügt über ein NodeMask-Element.
- CreateGraphicsPipelineState: Erstellt ein Grafikpipelinestatusobjekt aus einer D3D12_GRAPHICS_PIPELINE_STATE_DESC-Struktur.
- D3D12_COMPUTE_PIPELINE_STATE_DESC: verfügt über ein NodeMask-Element.
- CreateComputePipelineState: Erstellt ein Compute-Pipeline-Zustandsobjekt aus einer D3D12_COMPUTE_PIPELINE_STATE_DESC-Struktur.
- CreateRootSignature: akzeptiert einen nodeMask-Parameter.
- D3D12_COMMAND_SIGNATURE_DESC: verfügt über ein NodeMask-Element.
- CreateCommandSignature: Erstellt ein Befehlssignaturobjekt aus einer D3D12_COMMAND_SIGNATURE_DESC-Struktur.
Ressourcenerstellung APIs
Die folgenden APIs verweisen auf Knotenformate.
- D3D12_HEAP_PROPERTIES: hat sowohl CreationNodeMask- als auch VisibleNodeMask-Elemente.
- GetResourceAllocationInfo: hat einen visibleMask-Parameter.
- GetCustomHeapProperties: hat einen nodeMask-Parameter.
Beim Erstellen einer reservierten Ressource wird kein Knotenindex oder keine Maske angegeben. Die reservierte Ressource kann einem Heap auf einem beliebigen Knoten zugeordnet werden (nach den Freigaberegeln für Knotenübergreifende).
Die Methode MakeResident funktioniert intern mit Adapterwarteschlangen, es ist nicht erforderlich, dass Ihre Anwendung etwas dafür angeben muss.
Beim Aufrufen der folgenden ID3D12Device-APIs muss Ihre Anwendung keine Gruppe von 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 einer Funktion 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