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


Функции 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 folder of the Windows SDK for Windows 8 along with the Fxc.exe версии компилятора HLSL.

Заметка

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

 

Общий доступ к устройствам Direct3D

Direct3D 11.1 позволяет API Direct3D 10 и 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, можно использовать атрибут функции в объявлении функции 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, созданные с уровнем mipmap 1, размером массива 1, привязку флагов D3D11_BIND_SHADER_RESOURCE и D3D11_BIND_RENDER_TARGET объединенных, использование по умолчанию (D3D11_USAGE_DEFAULT), а также только эти D3D11_RESOURCE_MISC_FLAG значения:

Direct3D 11.1 позволяет совместно использовать более разнообразные типы ресурсов и форматы текстур2D. Вы можете запросить, поддерживает ли графический драйвер и оборудование расширенный общий доступ к ресурсам Texture2D, вызвав ID3D11Device::CheckFeatureSupport со значением D3D11_FEATURE_D3D11_OPTIONS. В этом вызове ID3D11Device::CheckFeatureSupport передайте указатель на структуру D3D11_FEATURE_DATA_D3D11_OPTIONS. ID3D11Device::CheckFeatureSupport задает элемент ExtendedResourceSharing D3D11_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, вы можете совместно использовать ресурсы, созданные с этими функциями и флагами:

Заметка

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

 

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

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

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

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

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

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

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

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

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 для этой функции.

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

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, на устройствах, которые не поддерживают УАВ на каждом этапе (включая существующие драйверы, которые не реализованы с этой функцией), функция создания шейдера завершается сбоем. Функция создания шейдера также завершается ошибкой, если шейдер пытается использовать слот UAV за пределами набора слотов UAV, поддерживаемых оборудованием.

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

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

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

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

Начиная с Поддержки устройств WARP Direct3D 11.1:

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

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

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

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

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

Заметка

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

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

 

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

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

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