Системы с несколькими адаптерами

Описывает поддержку в Direct3D 12 для систем с несколькими адаптерами, охватывающих сценарии, в которых приложение явно предназначено для нескольких адаптеров GPU и сценариев, в которых драйверы неявно используют несколько адаптеров GPU от имени приложения.

Общие сведения о нескольких адаптерах

Адаптер GPU может быть любым адаптером (графическим или вычислительным, дискретным или интегрированным), от любого производителя, поддерживающего Direct3D 12.

Несколько адаптеров ссылаются на узлы. Ряд элементов, таких как очереди, применяются к каждому узлу, поэтому если есть два узла, будут две трехмерные очереди по умолчанию. Другие элементы, такие как состояние конвейера и корневые и командные подписи, могут ссылаться на один или несколько узлов, как показано на схеме.

queues apply to each graphics adapter

Общий доступ кучи между адаптерами

См. раздел "Общие кучи".

Интерфейсы API с несколькими адаптерами и маски узлов

Как и предыдущие API Direct3D, каждый набор связанных адаптеров перечисляется как один объект IDXGIAdapter3. Все выходные данные, подключенные к любому адаптеру в ссылке, перечисляются как присоединенные к одному объекту IDXGIAdapter3 .

Приложение может определить количество физических адаптеров, связанных с данным устройством, вызвав ID3D12Device::GetNodeCount.

Многие API в Direct3D 12 принимают маску узла (битовую маску ), которая указывает набор узлов, к которым ссылается вызов API. Каждый узел имеет отсчитываемый от нуля индекс. Но в маске узла ноль преобразуется в бит 1; 1 преобразуется в бит 2; и т. д.

Отдельные узлы

При вызове следующих API (один узел) приложение указывает один узел, с которым будет связан вызов API. Большую часть времени это определяется маской узла. Каждый бит маски соответствует одному узлу. Для всех API, описанных в этом разделе, необходимо задать ровно один бит в маске узла.

Несколько узлов

При вызове следующих API (нескольких узлов) приложение задает набор узлов, с которым будет связан вызов API. Вы указываете сходство узлов в качестве маски узла, потенциально с несколькими битами. Если приложение передает 0 для этой битовой маски, драйвер Direct3D 12 преобразует его в битовую маску 1 (указывая, что объект связан с 0 узла 0).

API создания ресурсов

Следующие маски ссылочных узлов API.

При создании зарезервированного ресурса индекс узла или маска не указан. Зарезервированный ресурс можно сопоставить с кучей на любом узле (следуя правилам общего доступа между узлами).

Метод MakeResident работает внутри очереди адаптеров, для этого приложения не требуется указывать ничего.

При вызове следующих API ID3D12Device приложение не должно указывать набор узлов, с которым будет связан вызов API, так как вызов API применяется ко всем узлам.

Руководство по программированию Direct3D 12