Использование данных функций Direct3D 11 для дополнения уровней функций Direct3D

Узнайте, как проверка поддержку устройств для дополнительных функций, включая функции, добавленные в последних версиях Windows.

Уровни функций Direct3D указывают на четко определенные наборы функциональных возможностей GPU, которые примерно соответствуют различным поколениям графического оборудования. Это значительно упрощает задачу проверки возможностей оборудования, а также обеспечивает согласованное взаимодействие с широким спектром различных устройств.

Чтобы учесть некоторые различия между различными реализациями оборудования, включая устаревшее оборудование, мобильное оборудование и современное оборудование, некоторые функции считаются необязательными. Поддержку этих функций можно определить, вызвав ID3D11Device::CheckFeatureSupport и указав соответствующую структуру D3D11_FEATURE_DATA_*. В этом разделе описываются различные необязательные функции Direct3D 11, как некоторые из них работают вместе и как избежать проверки на наличие каждой дополнительной функции.

Как проверка для поддержки дополнительных функций

Вызовите ID3D11Device::CheckFeatureSupport, предоставляя структуру, представляющую необязательную функцию, которую вы хотите использовать. Если метод возвращает S_OK, это означает, что вы используете версию среды выполнения Direct3D, которая поддерживает необязательную функцию. Если он возвращает E_INVALIDARG, это означает, что вы используете версию среды выполнения Direct3D 11 до добавления необязательной функции. Это означает, что необязательная функция недоступна вместе с другими дополнительными функциями, представленными в той же версии Direct3D 11 или более поздней версии.

Можно ли свести к минимуму работу, необходимую для проверок поддержки функций?

Помимо правильной среды выполнения Direct3D 11 (обычно связанной с версией Windows), графический драйвер также должен быть достаточно свежим для поддержки необязательной функции. Спецификации WDDM требуют поддержки дополнительных функций, если оборудование может их поддерживать. Поэтому, когда графический драйвер поддерживает одну из дополнительных функций, добавленных в определенной версии Windows, обычно это означает, что графический драйвер поддерживает другие функции, добавленные в этой версии Windows. Например, если драйвер устройства поддерживает тени на уровне функций 9, то вы знаете, что драйвер устройства имеет по крайней мере WDDM 1.2.

Примечание Если устройство Microsoft Direct3D поддерживает уровень компонентов 11.1, все дополнительные функции, указанные D3D11_FEATURE_DATA_D3D11_OPTIONS , поддерживаются автоматически, за исключением SAD4ShaderInstructions и ExtendedDoublesShaderInstructions.

Среда выполнения всегда одинаково задает следующие группы элементов. То есть все значения в группировке имеют значение TRUE или FALSE вместе:

  • DiscardAPIsSeenByDriver и FlagsForUpdateAndCopySeenByDriver
  • ClearView, CopyWithOverlap, ConstantBufferPartialUpdate, ConstantBufferOffsetting и MapNoOverwriteOnDynamicConstantBuffer
  • MapNoOverwriteOnDynamicBufferSRV и MultisampleRTVWithForcedSampleCountOne

Параметры уровня компонентов 11.2 (D3D11_FEATURE_D3D11_OPTIONS1): Необязательные признаки, указанные в этом поле, независимы и должны проверяться по отдельности.

Поддержка функций на устройствах Windows RT 8.1 и Windows Phone 8.1

Windows RT планшетные устройства могут поддерживать различные уровни функций и дополнительные функции, оптимизированы для снижения энергопотребления и используют встроенную графику вместо дискретных GPU. Приложения Магазина Windows для устройств ARM должны поддерживать уровень компонентов 9.1. Приложения DirectX для Windows RT должны пользоваться дополнительными функциями, которые могут экономить энергию и циклы, такие как простое развертывание, когда они доступны.

Windows Phone 8 мобильных устройств поддерживают уровень функций 9.3 с определенными дополнительными функциями. Сведения о Windows Phone 8 см. в разделе Уровень компонентов Direct3D 9_3.

Что такое необязательные функции Direct3D 11?

В оставшейся части этой статьи описываются дополнительные функции, доступные в Direct3D 11.2. Признаки описываются в хронологическом порядке по моменту их добавления, чтобы вы могли понять, какие функции имеются в разных версиях Direct3D 11.

Необязательная поддержка шейдера вычислений для уровня компонентов 10

Следующая функция всегда доступна для устройств уровня компонентов 10:

D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS. Если это значение TRUE, устройство поддерживает вычислительные шейдеры. Сюда входит поддержка необработанных и структурированных буферов.

Если устройство уровня компонентов 10_0 или 10_1 поддерживает эту функцию, устройство не гарантирует поддержку вычислительного шейдера 4.1. Приложения должны быть готовы к возврату к вычислительному шейдеру 4.0, если ID3D11Device::CreateComputeShader создает исключение в программе шейдера вычислений 4.1.

Необязательные возможности для уровня компонентов 9

Следующие функции добавляются для уровня компонентов 9, начиная с Windows 8:

D3D11_FEATURE_DATA_D3D9_OPTIONS: Указывает на поддержку адресации текстур с переносом с текстурами, не поддерживая 2 текстуры. Если это поддерживается, D3D11_TEXTURE_ADDRESS_MODE_WRAP можно использовать с такими текстурами.

D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT: Указывает поддержку образцов сравнения в модели шейдеров 4.0 на уровне функций 9_x шейдеров. Это используется для тестирования глубины в пиксельных шейдерах, обеспечивая поддержку распространенных методов, таких как сопоставление теней и наборы элементов.

Для устройств уровня компонентов 9 начиная с Windows 8.1 добавлена следующая функция:

D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT: Указывает поддержку простых функций, которые могут быть доступны на оборудовании DirectX 9-го уровня. Простая настройка означает, что все элементы InstanceDataStepRateD3D11_INPUT_ELEMENT_DESC структур, используемых для определения макета входных данных, должны быть равны 1. Устройства, поддерживающие уровень функций 9.3 или более поздней версии, уже включают полную поддержку instancing.

Дополнительная поддержка точности с плавающей запятой для программ шейдеров

D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT: Поля в этой структуре указывают длину чисел с плавающей запятой, если включена минимальная точность, или 0, если поддерживается только полная 32-разрядная точность с плавающей запятой.

Для устройств уровня функций 9 минимальная точность вершинного шейдера может отличаться от пиксельного шейдера. Точность вершинного шейдера указывается в поле AllOtherShaderStagesMinPrecision .

D3D11_FEATURE_DATA_DOUBLES: Устройства уровня компонентов 11 могут поддерживать вычисления двойной точности в программах модели шейдера 5.0. Поддержка вычислений двойной точности в шейдере означает, что число с плавающей точкой в программе шейдера вычислений может быть преобразовано в doubles, обеспечивая преимущества вычислений с более высокой точностью в рамках каждого прохода шейдера. Числа двойной точности должны быть преобразованы обратно в числа с плавающей точкой перед записью в выходной буфер. Обратите внимание, что разделение двойной точности не обязательно поддерживается.

Дополнительные возможности Для Direct3D 11.2

В Direct3D 11.2 добавлены четыре новые дополнительные функции, которые могут поддерживаться устройствами Direct3D 11. Эти функции входят в структуру D3D11_FEATURE_DATA_D3D11_OPTIONS1 :

TiledResourcesTier: Указывает поддержку мозаичного ресурса и поддерживаемый уровень.

MinMaxFiltering: Указывает поддержку параметров фильтрации D3D11_FILTER_MINIMUM_* и D3D11_FILTER_MAXIMUM_*, которые сравнивают результат фильтрации с минимальным (или максимальным) значением. См . D3D11_FILTER.

ClearViewAlsoSupportsDepthOnlyFormats: Указывает на поддержку очистки представлений ресурсов буфера глубины.

MapOnDefaultBuffers: Указывает на поддержку целевых буферов отображения сопоставления, созданных с помощью флага D3D11_USAGE_DEFAULT .

Отрисовка на основе плиток

D3D11_FEATURE_DATA_ARCHITECTURE_INFO: Указывает, выполняет ли графическое устройство пакеты команд отрисовки и выполняет ли отрисовку на основе плиток по умолчанию. Это можно использовать в качестве указания для оптимизации графического обработчика.

Дополнительные функции для разработки и отладки

D3D11_FEATURE_DATA_D3D11_OPTIONS::D iscardAPIsSeenByDriver: Вы можете отслеживать этот элемент во время разработки, чтобы исключить устаревшие драйверы на оборудовании, где Отмена Просмотра и DiscardResource могла бы быть полезной в противном случае.

D3D11_FEATURE_DATA_MARKER_SUPPORT: Это поддерживается, если оборудование и драйвер поддерживают маркировку данных для профилирования GPU.

Устройства