다중 어댑터 시스템
여러 어댑터가 설치된 시스템에 대한 Direct3D 12의 지원, 애플리케이션이 여러 GPU 어댑터를 명시적으로 대상으로 하는 시나리오 및 드라이버가 애플리케이션을 대신하여 여러 GPU 어댑터를 암시적으로 사용하는 시나리오를 설명합니다.
다중 어댑터 개요
GPU 어댑터는 Direct3D 12를 지원하는 모든 제조업체의 모든 어댑터(그래픽 또는 컴퓨팅, 불연속 또는 통합)일 수 있습니다.
여러 어댑터는 API에서 ‘노드’로 큐와 같은 많은 요소가 각 노드에 적용되므로 두 개의 노드가 있는 경우 두 개의 기본 3D 큐가 있습니다. 파이프라인 상태, 루트 및 명령 서명과 같은 다른 요소는 다이어그램에 표시된 것처럼 하나 이상의 노드 또는 모든 노드를 참조할 수 있습니다.
어댑터에서 힙 공유
공유 힙 항목을 참조하세요.
다중 어댑터 API 및 노드 마스크
이전 Direct3D API와 마찬가지로 연결된 각 어댑터 집합은 단일 IDXGIAdapter3 개체로 열거됩니다. 링크로 어댑터에 연결된 모든 출력은 단일 IDXGIAdapter3 개체에 연결된 것으로 열거됩니다.
애플리케이션은 ID3D12Device::GetNodeCount를 호출하여 지정된 디바이스와 연결된 실제 어댑터 수를 확인할 수 있습니다.
Direct3D 12의 많은 API는 API 호출이 참조하는 노드 집합을 나타내는 노드 마스크(비트 마스크)를 허용합니다. 각 노드에는 0부터 시작하는 인덱스가 있습니다. 그러나 노드 마스크에서 0은 비트 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 드라이버는 개체가 노드 0과 연결되어 있음을 나타내는 비트 마스크 1로 변환합니다.
- 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