Практическое руководство. Проверка поддержки драйверов
В этом разделе показано, как определить, поддерживаются ли многопоточные функции (включая списки ресурсов и создания ресурсов) для аппаратного ускорения.
Мы рекомендуем приложениям проверить поддержку многопоточного оборудования графики. Если драйвер и графическое оборудование не поддерживают создание многопоточных объектов, производительность может быть ограничена следующими способами:
- Создание нескольких объектов (даже разных типов) в одно и то же время может быть ограничено.
- Создание объекта при отрисовке графических команд с помощью немедленного контекста может быть ограничено. Например, если оборудование не поддерживает многопоточность, приложение должно избегать создания в фоновом потоке объекта, требующего очень длительного времени для создания. Операция создания, которая занимает очень много времени, может блокировать немедленную отрисовку контекста и увеличивать риск заготовки скорости визуального кадра.
Среда выполнения поддерживает многопоточные списки и списки команд независимо от поддержки драйверов и оборудования; Если нет поддержки драйверов и оборудования для многопоточных или командных списков, среда выполнения эмулирует функциональные возможности. Дополнительные сведения о многопоточности см. в разделе "Общие сведения о многопоточности " в Direct3D 11.
Чтобы проверить поддержку драйверов для многопоточных операций, выполните приведенные действия.
- Инициализация объекта интерфейса ID3D11Device . По умолчанию включена многопоточность.
- Вызов ID3D11Device::CheckFeatureSupport. Передайте значение D3D11_FEATURE_THREADING параметру Feature, передайте D3D11_FEATURE_DATA_THREADING структуру в параметр pFeatureSupportData и передайте размер структуры D3D11_FEATURE_DATA_THREADING параметру FeatureSupportDataSize.
- Если метод ID3D11Device::CheckFeatureSupport успешно выполнен, D3D11_FEATURE_DATA_THREADING структура, переданная на предыдущем шаге, будет инициализирована с информацией о поддержке многопоточных операций.
Если DriverConcurrentCreates имеет значение TRUE, драйвер может создавать несколько ресурсов одновременно (одновременно) в разных потоках.
Если DriverCommandLists имеет значение TRUE, драйвер поддерживает списки команд. То есть команды отрисовки, выданные непосредственным контекстом, могут быть параллельными с созданием объектов на отдельных потоках с низким риском заикания частоты кадров.
Если DriverConcurrentCreates имеет значение FALSE, драйвер не поддерживает параллельное создание, что означает, что возможное количество параллелизма крайне ограничено. Графическое оборудование не может одновременно создавать объекты разных типов в разных потоках. Кроме того, графическое оборудование не может использовать немедленный контекст для выдачи команд отрисовки, пока графическое оборудование пытается создать ресурс в другом потоке.
См. также