Системы с несколькими адаптерами
Описывает поддержку в Direct3D 12 для систем с несколькими адаптерами, охватывающих сценарии, в которых приложение явно предназначено для нескольких адаптеров GPU и сценариев, в которых драйверы неявно используют несколько адаптеров GPU от имени приложения.
Общие сведения о нескольких адаптерах
Адаптер GPU может быть любым адаптером (графическим или вычислительным, дискретным или интегрированным), от любого производителя, поддерживающего Direct3D 12.
Несколько адаптеров ссылаются на узлы. Ряд элементов, таких как очереди, применяются к каждому узлу, поэтому если есть два узла, будут две трехмерные очереди по умолчанию. Другие элементы, такие как состояние конвейера и корневые и командные подписи, могут ссылаться на один или несколько узлов, как показано на схеме.
Общий доступ кучи между адаптерами
См. раздел "Общие кучи".
Интерфейсы API с несколькими адаптерами и маски узлов
Как и предыдущие API Direct3D, каждый набор связанных адаптеров перечисляется как один объект IDXGIAdapter3. Все выходные данные, подключенные к любому адаптеру в ссылке, перечисляются как присоединенные к одному объекту IDXGIAdapter3 .
Приложение может определить количество физических адаптеров, связанных с данным устройством, вызвав ID3D12Device::GetNodeCount.
Многие API в Direct3D 12 принимают маску узла (битовую маску ), которая указывает набор узлов, к которым ссылается вызов 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 узла 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 : имеет видимый параметрMask .
- GetCustomHeapProperties : имеет параметр nodeMask .
При создании зарезервированного ресурса индекс узла или маска не указан. Зарезервированный ресурс можно сопоставить с кучей на любом узле (следуя правилам общего доступа между узлами).
Метод MakeResident работает внутри очереди адаптеров, для этого приложения не требуется указывать ничего.
При вызове следующих API ID3D12Device приложение не должно указывать набор узлов, с которым будет связан вызов API, так как вызов API применяется ко всем узлам.
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle: с забором в качестве параметра. С ресурсом или кучей в качестве параметров этот метод не принимает узлы в качестве параметров, так как маски узлов наследуются от ранее созданных объектов.
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView