多配接器系統
說明 Direct3D 12 支援已安裝多個適配卡的系統,涵蓋您的應用程式明確以多個 GPU 適配卡為目標的案例,以及驅動程式代表應用程式隱含使用多個 GPU 適配卡的案例。
多配接器概觀
GPU 配接器可以是任何適配卡(圖形或計算、離散或整合),來自任何支援 Direct3D 12 的製造商。
多個配接器會參考為 節點。 一些元素,例如佇列,會套用至每個節點,因此如果有兩個節點,則會有兩個預設的 3D 佇列。 其他元素,例如管線狀態和根和命令簽章,可以參考一或多個或所有節點,如圖表所示。
跨配接器共用堆積
請參閱共用堆積主題。
多配接器 API 和節點遮罩
與先前的 Direct3D API 類似,每個連結的配接器集合都會列舉為單 一 IDXGIAdapter3 物件。 連結中附加至任何配接器的所有輸出都會列舉為附加至單一 IDXGIAdapter3 物件。
您的應用程式可以呼叫 ID3D12Device::GetNodeCount,以判斷與指定裝置相關聯的實體適配卡數目。
Direct3D 12 中的許多 API 都接受 節點遮罩 (位掩碼),指出 API 呼叫所參考的節點集。 每個節點都有以零起始的索引。 但在節點掩碼中,零會轉譯為位 1;1 會轉譯為位 2;等等。
單一節點
呼叫下列 (單一節點) API 時,您的應用程式會指定與 API 呼叫相關聯的單一節點。 大部分時候,這會由節點遮罩指定。 遮罩中的每個位都會對應至單一節點。 針對本節所述的所有 API,您必須在節點掩碼中只設定一個位。
- D3D12_COMMAND_QUEUE_DESC :具有 NodeMask 成員。
- CreateCommandQueue :從 D3D12_COMMAND_QUEUE_DESC 結構建立佇列。
- CreateCommandList :採用 nodeMask 參數。
- D3D12_DESCRIPTOR_HEAP_DESC :具有 NodeMask 成員。
- CreateDescriptorHeap :從 D3D12_DESCRIPTOR_HEAP_DESC 結構建立描述項堆積。
- D3D12_QUERY_HEAP_DESC :具有 NodeMask 成員。
- CreateQueryHeap :從 D3D12_QUERY_HEAP_DESC 結構建立查詢堆積。
多個節點
呼叫下列 (多個節點) API 時,您的應用程式會指定一組與 API 呼叫相關聯的節點。 您可以將節點親和性指定為節點遮罩,可能已設定多個位。 如果您的應用程式針對此位掩碼傳遞 0,則 Direct3D 12 驅動程式會將它轉換成位掩碼 1(表示物件與節點 0 相關聯)。
- D3D12_CROSS_NODE_SHARING_TIER :決定跨節點共享的支援。
- D3D12_FEATURE_DATA_D3D12_OPTIONS:結構參考D3D12_CROSS_NODE_SHARING_TIER。
- D3D12_FEATURE_DATA_ARCHITECTURE :包含 NodeIndex 成員。
- D3D12_GRAPHICS_PIPELINE_STATE_DESC :具有 NodeMask 成員。
- CreateGraphicsPipelineState :從 D3D12_GRAPHICS_PIPELINE_STATE_DESC 結構建立圖形管線狀態物件。
- D3D12_COMPUTE_PIPELINE_STATE_DESC :具有 NodeMask 成員。
- CreateComputePipelineState :從 D3D12_COMPUTE_PIPELINE_STATE_DESC 結構建立計算管線狀態物件。
- CreateRootSignature:採用 nodeMask 參數。
- D3D12_COMMAND_SIGNATURE_DESC:具有 NodeMask 成員。
- CreateCommandSignature :從 D3D12_COMMAND_SIGNATURE_DESC 結構建立命令簽章物件。
資源建立 API
下列 API 參考節點遮罩。
- D3D12_HEAP_PROPERTIES :同時具有 CreationNodeMask 和 VisibleNodeMask 成員。
- GetResourceAllocationInfo :具有 visibleMask 參數。
- GetCustomHeapProperties :具有 nodeMask 參數。
建立保留的資源時,不會指定任何節點索引或遮罩。 保留的資源可以對應至任何節點上的堆積(遵循跨節點共享規則)。
MakeResident 方法可在內部與配接器佇列搭配運作,您的應用程式不需要為此指定任何專案。
呼叫下列 ID3D12Device API時,您的應用程式不需要指定API呼叫將相關聯的一組節點,因為API呼叫會套用至所有節點。
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle :使用 柵欄 做為參數。 使用資源或堆積做為參數時,此方法不接受節點做為參數,因為節點遮罩繼承自先前建立的物件。
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView