Миграция на Direct3D 11
В этом разделе содержатся сведения о переносе в Direct3D 11 из более ранней версии Direct3D.
- Direct3D 9 в Direct3D 11
- Direct3D 10 в Direct3D 11
- Direct3D 10.1 в Direct3D 11
- Новые возможности Direct3D 11
- Новые возможности DirectX 11.1
- Новые возможности DirectX 11.2
- Связанные статьи
Direct3D 9 в Direct3D 11
API Direct3D 11 основан на улучшениях инфраструктуры, сделанных в Direct3D 10 и 10.1. Перенос из Direct3D 9 в Direct3D 11 аналогичен переходу с Direct3D 9 на Direct3D 10. Ниже приведены ключевые проблемы в рамках этих усилий.
- Удаление всех фиксированных шейдеров конвейера функций в пользу программируемых шейдеров, созданных исключительно в HLSL (компилируется через D3DCompiler вместо D3DX9).
- Управление состоянием на основе неизменяемых объектов, а не отдельных переключателей состояния.
- Обновление для соблюдения строгих требований к компоновке входных макетов буфера вершин и сигнатур шейдеров.
- Связывание представлений ресурсов шейдера со всеми ресурсами текстуры.
- Сопоставление всего содержимого изображения с DXGI_FORMAT, включая удаление всех 24-разрядных цветовых форматов (8/8/8) и строгое упорядочение цветов RGB для большинства сценариев.
- Разбиение глобального состояния состояния на несколько небольших, более эффективно обновляемых буферов констант.
Дополнительные сведения о переходе с Direct3D 9 на Direct3D 10 см. в статье Direct3D 9 на Direct3D 10.
Direct3D 10 в Direct3D 11
Преобразование программ, написанных для использования API Direct3D 10 или 10.1, является прямым процессом, так как Direct3D 11 является расширением существующего API. С одним незначительным исключением (отмечено ниже — монохромная фильтрация текста), все методы и функции в Direct3D 10/10.1 доступны в Direct3D 11. В описании ниже описаны различия между двумя API для упрощения обновления существующего кода. Ниже приведены основные различия.
- Операции отрисовки (рисование, состояние и т. д.) больше не являются частью интерфейса устройства, но не являются частью нового интерфейса DeviceContext вместе с методами запроса на сопоставление ресурсов или unmap и устройства.
- Direct3D 11 включает все улучшения и изменения, внесенные между Direct3D 10.0 и 10.1
Перечисления и определения
Direct3D 10 | Direct3D 11 |
---|---|
DXGI_FORMAT | DXGI_FORMAT были определены несколько новых форматов DXGI. |
D3D10_CREATE_DEVICE_SWITCH_TO_REF | D3D11_CREATE_DEVICE_SWITCH_TO_REF Функция переключения на ссылку не поддерживается Direct3D 11. |
D3D10_DRIVER_TYPE | D3D_DRIVER_TYPE Обратите внимание, что идентификаторы перечисления в D3D_DRIVER_TYPE были переопределены из идентификаторов в D3D10_DRIVER_TYPE. Поэтому вместо литеральных чисел следует использовать идентификаторы перечисления. D3D_DRIVER_TYPE определен в D3Dcommon.h. |
D3D10_RESOURCE_MISC_FLAG | D3D11_RESOURCE_MISC_FLAG Обратите внимание, что многие из этих флагов были переопределены, поэтому обязательно используйте идентификаторы перечисления вместо литеральных чисел. |
D3D10_FILTER | D3D11_FILTER Обратите внимание, что фильтрация текста D3D10_FILTER_TEXT_1BIT была удалена из Direct3D 11. См. раздел DirectWrite. |
D3D10_COUNTER | D3D11_COUNTER Обратите внимание, что счетчики, нейтральные от поставщика, были удалены для Direct3D 11, так как они редко поддерживаются. |
D3D10_x | D3D11_x Многие перечисления и определения одинаковы, имеют более крупные ограничения или имеют дополнительные значения. |
Структуры
Интерфейсы
Direct3D 10 | Direct3D 11 |
---|---|
ID3D10Device | ID3D11Device и ID3D11DeviceContext Интерфейс устройства был разделен на две части. Для быстрого переноса можно использовать ID3D11Device::GetImmediateContext. Методы ID3D10Device::GetTextFilterSize и SetTextFilerSize больше не существуют. См. раздел DirectWrite. Create*Shader принимает дополнительный необязательный параметр для ID3D11ClassLinkage. *SetShader и *GetShader принимают дополнительные необязательные параметры для id3D11ClassInstance(s). CreateGeometryShaderWithStreamOutput принимает массив и количество для нескольких операций вывода потока вывода. Ограничение для параметра NumEntries createGeometryShaderWithStreamOutput увеличилось до D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT в Direct3D 11. |
ID3D10Buffer | ID3D11Buffer |
ID3D10SwitchToRef | Функция ID3D11SwitchToRef Switch-to-refне поддерживается в Direct3D 11. |
ID3D10Texture1D | ID3D11Texture1D |
ID3D10Texture2D | ID3D11Texture2D |
ID3D10Texture3D | Методы Map и Unmap id3D11Texture3D были перемещены в ID3D11DeviceContext, а все методы Map используют D3D11_MAPPED_SUBRESOURCE вместо void**. |
ID3D10Asynchronous | ID3D11Asynchronous Begin, End и GetData были перемещены в ID3D11DeviceContext. |
ID3D10x | Интерфейсы ID3D11x Многие идентичны между двумя API. |
Другие связанные технологии
Решение 10.1 | Решение 11 |
---|---|
Соответствие HLSL (D3D10Compile*, D3DX10Compile*) и API отражения шейдера | Примечание D3DCompiler (см. раздел D3DCompiler.h): для приложений Магазина Windows API D3DCompiler поддерживаются только для разработки, а не для развертывания. |
Эффекты 10 | Эффекты 11 доступны как общий источник в Интернете. Примечание. Это решение не подходит для приложений Магазина Windows, так как для него требуются API D3DCompiler во время выполнения (развертывание). |
Математика D3DX9/D3DX10 | Directxmath |
D3DX10 | D3DX11 в устаревшей версии пакета SDK DirectXTex, DirectXTK и DirectXMesh предлагают альтернативные варианты многих технологий в устаревших библиотеках D3DX10 и D3DX11. Direct2D и DirectWrite предлагают высококачественную поддержку отрисовки стилей линий и шрифтов. |
Сведения о устаревшем пакете SDK DirectX см. в разделе "Где находится пакет SDK DirectX?".
Direct3D 10.1 в Direct3D 11
Direct3D 10.1 — это расширение интерфейса Direct3D 10, а все функции Direct3D 10.1 доступны в Direct3D 11. Большинство переносов от 10,1 до 11 уже устранено выше, переходя от 10 до 11.
Перечисления и определения
Структуры
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_BLEND_DESC1 | D3D11_BLEND_DESC Версия 11 идентична версии 10.1. |
D3D10_SHADER_RESOURCE_VIEW_DESC1 | D3D11_SHADER_RESOURCE_VIEW_DESC Версия 11 идентична версии 10.1. |
Интерфейсы
Direct3D 10.1 | Direct3D 11 |
---|---|
ID3D10Device1 | ID3D11Device и ID3D11DeviceContext Интерфейс устройства был разделен на две части. Для быстрого переноса можно использовать ID3D11Device::GetImmediateContext. "ID3D10Device::GetTextFilterSize" и "SetTextFilerSize" больше не существуют. См. раздел DirectWrite. Create*Shader принимает дополнительный необязательный параметр для ID3D11ClassLinkage. *SetShader и *GetShader принимают дополнительные необязательные параметры для id3D11ClassInstance(s). CreateGeometryShaderWithStreamOutput принимает массив и количество для нескольких операций вывода потока вывода. Ограничение для параметра NumEntries createGeometryShaderWithStreamOutput увеличилось до D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT в Direct3D 11. |
ID3D10BlendState1 | ID3D11BlendState |
ID3D10ShaderResourceView1 | ID3D11ShaderResourceView |
Новые возможности Direct3D 11
После обновления кода для использования API Direct3D 11 следует учитывать множество новых функций .
- Многопоточность отрисовки с помощью списков команд и нескольких контекстов
- Реализация расширенных алгоритмов с помощью шейдера вычислений (с использованием профилей шейдера шейдера 4.0, 4.1 или 5.0)
- Новые возможности оборудования класса 11:
- Модель шейдера HLSL 5.0
- Компоновка динамического шейдера
- Tessellation через шейдеры корпуса и домена
- Новые форматы сжатия блоков: BC6H для образов HDR, BC7 для более высоких стандартных образов
- Использование технологии 10level9 для отрисовки на многих устройствах модели шейдера 2.0 и шейдера модели 3.0 через API DIrect3D 11 для поддержки аппаратного обеспечения более низкого уровня видео в Windows Vista и Windows 7.
- Использование устройства отрисовки программного обеспечения WARP.
Новые возможности DirectX 11.1
Windows 8 включает дополнительные улучшения графики DirectX, которые следует учитывать при реализации графического кода DirectX, включая Direct3D 11.1, DXGI 1.2, модель драйвера windows (WDDM) 1.2, аппаратный уровень 11.1, контексты устройств Direct2D и другие улучшения.
Частичная поддержка Direct3D 11.1 доступна в Windows 7, а также через центр обновления платформы для Windows 7, который доступен через центр обновления платформы для Windows 7.
Новые возможности DirectX 11.2
Windows 8.1 включает Direct3D 11.2, DXGI 1.3 и другие улучшения.