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


Функции Direct3D 11.1

В Direct3D 11.1 добавлены следующие функции, которые входят в состав Windows 8, Windows RT и Windows Server 2012. Частичная поддержка Direct3D 11.1 доступна в Windows 7 и Windows Server 2008 R2 через Обновление платформы для Windows 7, доступное в Обновлении платформы для Windows 7.

Улучшения трассировки шейдера и компилятора

Direct3D 11.1 позволяет использовать трассировку шейдера, чтобы убедиться, что код работает должным образом, а если это не так, вы можете обнаружить и устранить проблему. Пакет средств разработки программного обеспечения Windows (SDK) для Windows 8 содержит усовершенствования компилятора HLSL. Трассировка шейдера и компилятор HLSL реализованы в D3dcompiler_nn.dll.

API трассировки шейдеров и усовершенствования компилятора HLSL состоят из следующих методов и функций.

Для библиотеки D3dcompiler.lib требуется D3dcompiler_nn.dll. Эта библиотека DLL не является частью Windows 8; она находится в папке \bin пакета Windows SDK для Windows 8 вместе с Fxc.exe версией командной строки компилятора HLSL.

Примечание

Хотя вы можете использовать эту библиотеку и библиотеку DLL для разработки, вы не можете развернуть приложения Магазина Windows, использующие это сочетание. Поэтому перед отправкой приложения Магазина Windows необходимо скомпилировать шейдеры HLSL. Можно записать двоичные файлы компиляции HLSL на диск или компилятор может создавать заголовки со статическими массивами байтов, которые содержат данные blob-объектов шейдера. Для доступа к данным большого двоичного объекта используется интерфейс ID3DBlob . Чтобы разработать приложение Магазина Windows, вызовите D3DCompile2 или D3DCompileFromFile , чтобы скомпилировать необработанный источник HLSL, а затем передать полученные данные BLOB-объекта в Direct3D.

 

Совместное использование устройств Direct3D

Direct3D 11.1 позволяет API Direct3D 10 и API Direct3D 11 использовать одно базовое устройство отрисовки.

Эта функция Direct3D 11.1 состоит из следующих методов и интерфейса.

Проверка поддержки новых функций и форматов Direct3D 11.1

Direct3D 11.1 позволяет проверка новые функции, которые может поддерживать графический драйвер, и новые способы поддержки формата на устройстве. Инфраструктура графики Microsoft DirectX (DXGI) 1.2 также задает новые значения DXGI_FORMAT .

Эта функция Direct3D 11.1 состоит из следующего API.

Использование минимальной точности HLSL

Начиная с Windows 8, графические драйверы могут реализовывать скалярные типы данных HLSL с минимальной точностью, используя любую точность, превышающую или равную заданной битовой точности. Если код шейдера минимальной точности HLSL используется на оборудовании, реализующем минимальную точность HLSL, вы используете меньшую пропускную способность памяти и, как следствие, меньше энергопотребления системы.

Вы можете запросить поддержку минимальной точности, которую предоставляет графический драйвер, вызвав ID3D11Device::CheckFeatureSupport со значением D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . В этом вызове ID3D11Device::CheckFeatureSupport передайте указатель на структуру D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT , которую ID3D11Device::CheckFeatureSupport заполняет минимальными уровнями точности, поддерживаемыми драйвером для этапа пиксельного шейдера и для других этапов шейдера. Возвращаемые сведения просто указывают на то, что графическое оборудование может выполнять операции HLSL с меньшей точностью, чем стандартная 32-разрядная точность с плавающей точкой, но не гарантирует, что графическое оборудование будет работать с более низкой точностью.

Вам не нужно создавать несколько шейдеров, которые выполняют и не используют минимальную точность. Вместо этого создайте шейдеры с минимальной точностью, а переменные минимальной точности работают с полной 32-разрядной точностью, если графический драйвер сообщает, что он не поддерживает минимальную точность. Дополнительные сведения о минимальной точности HLSL см. в разделе Использование минимальной точности HLSL.

Шейдеры минимальной точности HLSL не работают в операционных системах до Windows 8.

Указание плоскостей клипов пользователей в HLSL на уровне компонентов 9 и выше

Начиная с Windows 8, вы можете использовать атрибут функции clipplanes в объявлении функции HLSL, а не SV_ClipDistance, чтобы шейдер работал на уровне компонентов 9_x а также на уровне функций 10 и выше. Дополнительные сведения см. в разделе Плоскости клипа пользователя на оборудовании уровня компонентов 9.

Создание буферов констант большего размера, чем у шейдера

Direct3D 11.1 позволяет создавать буферы констант, размер которых превышает максимальный размер буфера констант, доступный шейдеру (4096 32-разрядных*4-компонентных констант — 64 КБ). Позже при привязке буферов к конвейеру, например с помощью PSSetConstantBuffers или PSSetConstantBuffers1, можно указать диапазон буферов, к которым может получить доступ шейдер, который соответствует ограничению 4096.

Direct3D 11.1 обновляет метод ID3D11Device::CreateBuffer для этой функции.

Использование логических операций в целевом объекте отрисовки

Direct3D 11.1 позволяет использовать логические операции, а не смешивать в целевом объекте отрисовки. Однако нельзя сочетать логические операции с смешением между несколькими целевыми объектами отрисовки.

Эта функция Direct3D 11.1 состоит из следующего API.

Принудительное создание состояния растеризатора с помощью подсчета примеров

Direct3D 11.1 позволяет указать число примеров принудительной силы при создании состояния растеризатора.

Эта функция Direct3D 11.1 состоит из следующего API.

Примечание

Если требуется выполнить отрисовку с числом примеров, для которого задано значение 1 или больше, необходимо следовать следующим рекомендациям:

  • Не привязывайте представления трафаретов глубины.
  • Отключите тестирование глубины.
  • Убедитесь, что шейдер не выводит глубину.
  • Если у вас есть какие-либо представления целевого объекта отрисовки, привязанные (D3D11_BIND_RENDER_TARGET), и вы принудительно принудили число выборок больше 1, убедитесь, что каждый целевой объект отрисовки имеет только одну выборку.
  • Не управляйте шейдером с частотой выборки. Поэтому ID3D11ShaderReflection::IsSampleFrequencyShader возвращает значение FALSE.

В противном случае поведение отрисовки не определено. Сведения о настройке трафарета глубины см. в разделе Настройка функций Depth-Stencil.

 

Обработка видеоресурсов с помощью шейдеров

Direct3D 11.1 позволяет создавать представления (SRV,RTV/UAV) для видеоресурсов, чтобы шейдеры Direct3D могли обрабатывать эти видеоресурса. Формат базового видеоресурса ограничивает форматы, которые может использовать представление. Перечисление DXGI_FORMAT содержит новые значения формата видеоресурсов. Эти DXGI_FORMAT значения указывают допустимые форматы представления, которые можно создать, и способ сопоставления представления средой выполнения Direct3D 11.1. Можно создать несколько представлений разных частей одной и той же поверхности, и в зависимости от формата размеры представлений могут отличаться друг от друга.

Direct3D 11.1 обновляет следующие методы для этой функции.

Расширенная поддержка общих ресурсов Texture2D

Direct3D 11.1 гарантирует, что вы можете совместно использовать созданные ресурсы Texture2D с определенными типами и форматами ресурсов. Для совместного использования ресурсов Texture2D при создании этих ресурсов используйте D3D11_RESOURCE_MISC_SHARED, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX или сочетание флагов D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX и D3D11_RESOURCE_MISC_SHARED_NTHANDLE (новые для Windows 8).

Direct3D 11.1 гарантирует, что вы можете совместно использовать созданные ресурсы Texture2D со следующими DXGI_FORMAT значениями:

  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT

Кроме того, Direct3D 11.1 гарантирует, что вы можете совместно использовать созданные ресурсы Texture2D с уровнем MIP-карты 1, размером массива 1, флагами привязки D3D11_BIND_SHADER_RESOURCE и D3D11_BIND_RENDER_TARGET вместе, использованием по умолчанию (D3D11_USAGE_DEFAULT) и только этими значениями D3D11_RESOURCE_MISC_FLAG :

Direct3D 11.1 позволяет совместно использовать различные типы и форматы ресурсов Texture2D. Вы можете запросить, поддерживает ли графический драйвер и оборудование расширенный общий доступ к ресурсам Texture2D, вызвав ID3D11Device::CheckFeatureSupport со значением D3D11_FEATURE_D3D11_OPTIONS . В вызове ID3D11Device::CheckFeatureSupport передайте указатель на структуру D3D11_FEATURE_DATA_D3D11_OPTIONS . ID3D11Device::CheckFeatureSupport устанавливает для члена ExtendedResourceSharingD3D11_FEATURE_DATA_D3D11_OPTIONSзначение TRUE , если оборудование и драйвер поддерживают расширенный общий доступ к ресурсам Texture2D.

Если ID3D11Device::CheckFeatureSupport возвращает значение TRUE в ExtendedResourceSharing, вы можете предоставить общий доступ к созданным ресурсам с помощью следующих DXGI_FORMAT значений :

  • DXGI_FORMAT_R32G32B32A32_TYPELESS
  • DXGI_FORMAT_R32G32B32A32_FLOAT
  • DXGI_FORMAT_R32G32B32A32_UINT
  • DXGI_FORMAT_R32G32B32A32_SINT
  • DXGI_FORMAT_R16G16B16A16_TYPELESS
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R16G16B16A16_UNORM
  • DXGI_FORMAT_R16G16B16A16_UINT
  • DXGI_FORMAT_R16G16B16A16_SNORM
  • DXGI_FORMAT_R16G16B16A16_SINT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R10G10B10A2_UINT
  • DXGI_FORMAT_R8G8B8A8_TYPELESS
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
  • DXGI_FORMAT_R8G8B8A8_UINT
  • DXGI_FORMAT_R8G8B8A8_SNORM
  • DXGI_FORMAT_R8G8B8A8_SINT
  • DXGI_FORMAT_B8G8R8A8_TYPELESS
  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
  • DXGI_FORMAT_B8G8R8X8_TYPELESS
  • DXGI_FORMAT_B8G8R8X8_UNORM_SRGB
  • DXGI_FORMAT_R32_TYPELESS
  • DXGI_FORMAT_R32_FLOAT
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R32_SINT
  • DXGI_FORMAT_R16_TYPELESS
  • DXGI_FORMAT_R16_FLOAT
  • DXGI_FORMAT_R16_UNORM
  • DXGI_FORMAT_R16_UINT
  • DXGI_FORMAT_R16_SNORM
  • DXGI_FORMAT_R16_SINT
  • DXGI_FORMAT_R8_TYPELESS
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8_UINT
  • DXGI_FORMAT_R8_SNORM
  • DXGI_FORMAT_R8_SINT
  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_AYUV
  • DXGI_FORMAT_YUY2
  • DXGI_FORMAT_NV12
  • DXGI_FORMAT_NV11
  • DXGI_FORMAT_P016
  • DXGI_FORMAT_P010
  • DXGI_FORMAT_Y216
  • DXGI_FORMAT_Y210
  • DXGI_FORMAT_Y416
  • DXGI_FORMAT_Y410

Если ID3D11Device::CheckFeatureSupport возвращает значение TRUE в ExtendedResourceSharing, вы можете совместно использовать созданные ресурсы с помощью следующих функций и флагов:

Примечание

Если параметр ExtendedResourceSharing имеет значение TRUE, у вас больше гибкости при указании флагов привязки для совместного использования ресурсов Texture2D. Графический драйвер и оборудование поддерживают не только больше флагов привязки, но и более возможные сочетания флагов привязки. Например, можно указать только D3D11_BIND_RENDER_TARGET или без флагов привязки и т. д.

 

Даже если ID3D11Device::CheckFeatureSupport возвращает значение TRUE в ExtendedResourceSharing, вы по-прежнему не сможете совместно использовать ресурсы, созданные с помощью следующих функций и флагов:

Изменение подресурсов с помощью новых параметров копирования

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

Эта функция Direct3D 11.1 состоит из следующего API.

Отмена ресурсов и представлений ресурсов

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

Эта функция Direct3D 11.1 состоит из следующего API.

Поддержка большего количества БПЛА

Direct3D 11.1 позволяет использовать большее количество БПЛА при привязке ресурсов к этапу слияния и вывода , а также при установке массива представлений для неупорядоченного ресурса.

Direct3D 11.1 обновляет следующие методы для этой функции.

Привязка поддиаги буфера констант к шейдеру

Direct3D 11.1 позволяет привязать поддиаги буфера констант для доступа шейдера. Можно указать буфер констант большего размера и указать поддиаги, который может использовать шейдер.

Эта функция Direct3D 11.1 состоит из следующего API.

Получение поддиапуля буфера констант, привязанного к шейдеру

Direct3D 11.1 позволяет получить поддиаги буфера констант, привязанный к шейдеру.

Эта функция Direct3D 11.1 состоит из следующего API.

Очистка всего представления ресурсов или его части

Direct3D 11.1 позволяет очистить представление ресурсов (RTV, UAV или любое видео для поверхности Texture2D). Одно и то же значение цвета применяется ко всем частям представления.

Эта функция Direct3D 11.1 состоит из следующего API.

Сопоставление динамических буферов с помощью NO_OVERWRITE

Direct3D 11.1 позволяет сопоставлять представления ресурсов шейдера (SRV) динамических буферов с D3D11_MAP_WRITE_NO_OVERWRITE. Среда выполнения Direct3D 11 и более ранних версий ограничивает сопоставление с буферами вершин или индексов.

Direct3D 11.1 обновляет метод ID3D11DeviceContext::Map для этой функции.

Использование БПЛА на каждом этапе конвейера

Direct3D 11.1 позволяет использовать следующие инструкции модели шейдера 5.0 на всех этапах шейдеров, которые ранее использовались только в пиксельных и вычислительных шейдерах.

Direct3D 11.1 обновляет следующие методы для этой функции.

Эти инструкции существовали в Direct3D 11.0 в ps_5_0 и cs_5_0. Так как Direct3D 11.1 делает БПЛА доступными на всех этапах шейдера, эти инструкции доступны на всех этапах шейдера.

Если передать скомпилированные шейдеры (VS/HS/DS/HS), которые используют любую из этих инструкций, в функцию создания-шейдера, например CreateVertexShader, на устройствах, которые не поддерживают БПЛА на каждом этапе (включая существующие драйверы, которые не реализованы с этой функцией), функция create-shader завершается ошибкой. Функция create-shader также завершается ошибкой, если шейдер пытается использовать слот UAV за пределами набора слотов UAV, поддерживаемых оборудованием.

БПЛА, на которые ссылаются эти инструкции, являются общими для всех этапов конвейера. Например, БПЛА, привязанный к слоту 0 на этапе объединения выходных данных, доступен в слоте 0 к VS/HS/DS/GS/PS.

Доступ к UAV, который вы выдаете из этапов шейдера или между ними, которые выполняются в заданном draw*() или из вычислительного шейдера в Dispatch*(), не гарантированно завершаются в том порядке, в котором они были выданы. Но все обращения к UAV заканчиваются в конце draw*() или Dispatch*().

Расширенная поддержка устройств WARP

Direct3D 11.1 расширяет поддержку устройств WARP , которые создаются путем передачи D3D_DRIVER_TYPE_WARP в параметре DriverTypeобъекта D3D11CreateDevice.

Начиная с Direct3D 11.1 warp-устройства поддерживают:

Устройства WARP не поддерживают следующие дополнительные функции:

При запуске виртуальной машины Hyper-V с отключенным графическим процессором (GPU) или без драйвера дисплея вы получаете устройство WARP с понятным именем Microsoft Basic Display Adapter. Это устройство WARP может работать с полной возможностями Windows, включая DWM, Интернет-Обозреватель и приложения Магазина Windows. Это устройство WARP также поддерживает выполнение устаревших приложений, использующих DirectDraw , или приложений, использующих Direct3D 3–Direct3D 11.1.

Использование Direct3D в процессах сеанса 0

Начиная с Windows 8 и Windows Server 2012, вы можете использовать большинство API Direct3D в процессах сеанса 0.

Примечание

Эти api выходных данных, окон, цепочки буферов и презентации недоступны в процессах сеанса 0, так как они не применяются к среде сеанса 0:

При вызове одного из предыдущих API в процессе сеанса 0 он возвращает DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.

 

Поддержка буфера тени на уровне компонентов 9

Используйте подмножество функций теневых буферов Direct3D 10_0+ для реализации эффектов тени на уровне компонентов 9_x. Дополнительные сведения о том, что необходимо сделать для реализации эффектов тени на уровне компонентов 9_x, см. в статье Реализация буферов тени для Уровня компонентов Direct3D 9.

Новые возможности Direct3D 11