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


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

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

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

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

Среда выполнения поддерживает многопоточность и списки команд независимо от поддержки драйверов и оборудования; Если нет поддержки драйверов и оборудования для многопоточных операций или списков команд, среда выполнения эмулирует эти функции. Дополнительные сведения о многопоточности см. в статье Общие сведения о многопоточности в 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

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