Поделиться через


Практическое руководство. Проверка поддержки драйверов

В этом разделе показано, как определить, поддерживаются ли многопоточные функции (включая списки ресурсов и создания ресурсов) для аппаратного ускорения.

Мы рекомендуем приложениям проверить поддержку многопоточного оборудования графики. Если драйвер и графическое оборудование не поддерживают создание многопоточных объектов, производительность может быть ограничена следующими способами:

  • Создание нескольких объектов (даже разных типов) в одно и то же время может быть ограничено.
  • Создание объекта при отрисовке графических команд с помощью немедленного контекста может быть ограничено. Например, если оборудование не поддерживает многопоточность, приложение должно избегать создания в фоновом потоке объекта, требующего очень длительного времени для создания. Операция создания, которая занимает очень много времени, может блокировать немедленную отрисовку контекста и увеличивать риск заготовки скорости визуального кадра.

Среда выполнения поддерживает многопоточные списки и списки команд независимо от поддержки драйверов и оборудования; Если нет поддержки драйверов и оборудования для многопоточных или командных списков, среда выполнения эмулирует функциональные возможности. Дополнительные сведения о многопоточности см. в разделе "Общие сведения о многопоточности " в Direct3D 11.

Чтобы проверить поддержку драйверов для многопоточных операций, выполните приведенные действия.

  1. Инициализация объекта интерфейса ID3D11Device . По умолчанию включена многопоточность.
  2. Вызов ID3D11Device::CheckFeatureSupport. Передайте значение D3D11_FEATURE_THREADING параметру Feature, передайте D3D11_FEATURE_DATA_THREADING структуру в параметр pFeatureSupportData и передайте размер структуры D3D11_FEATURE_DATA_THREADING параметру FeatureSupportDataSize.
  3. Если метод ID3D11Device::CheckFeatureSupport успешно выполнен, D3D11_FEATURE_DATA_THREADING структура, переданная на предыдущем шаге, будет инициализирована с информацией о поддержке многопоточных операций.
    • Если DriverConcurrentCreates имеет значение TRUE, драйвер может создавать несколько ресурсов одновременно (одновременно) в разных потоках.

      Если DriverCommandLists имеет значение TRUE, драйвер поддерживает списки команд. То есть команды отрисовки, выданные непосредственным контекстом, могут быть параллельными с созданием объектов на отдельных потоках с низким риском заикания частоты кадров.

    • Если DriverConcurrentCreates имеет значение FALSE, драйвер не поддерживает параллельное создание, что означает, что возможное количество параллелизма крайне ограничено. Графическое оборудование не может одновременно создавать объекты разных типов в разных потоках. Кроме того, графическое оборудование не может использовать немедленный контекст для выдачи команд отрисовки, пока графическое оборудование пытается создать ресурс в другом потоке.

Использование Direct3D 11

Многопоточность