Миграция на 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 вместе с методами сопоставления/разсопоставления ресурсов и методами запросов устройства.
- 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 |
---|---|
D3D10_SO_DECLARATION_ENTRY |
D3D11_SO_DECLARATION_ENTRYдобавляет поток. |
D3D10_BLEND_DESC |
D3D11_BLEND_DESCОбратите внимание, что эта структура значительно изменилась с версии 10 до версии 10.1, чтобы обеспечить состояние смешивания для каждого целевого объекта отрисовки |
D3D10_BUFFER_DESC (Описание буфера D3D10) |
D3D11_BUFFER_DESCДобавляет структуруByteStride для использования с ресурсами шейдера вычислений |
D3D10_SHADER_RESOURCE_VIEW_DESC |
D3D11_SHADER_RESOURCE_VIEW_DESCОбратите внимание, что эта структура добавила дополнительных членов профсоюза для 10.1 |
D3D10_DEPTH_STENCIL_VIEW_DESC |
D3D11_DEPTH_STENCIL_VIEW_DESCимеет новый член флагов. |
D3D10_QUERY_DATA_PIPELINE_STATISTICS (статистика конвейера данных) |
D3D11_QUERY_DATA_PIPELINE_STATISTICSДобавляет несколько новых счетчиков этапов шейдера. |
D3D10_x | D3D11_x Многие структуры идентичны двум API. |
Интерфейсы
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 | функция ID3D11SwitchToRefswitch-to-ref не поддерживается в Direct3D 11. |
ID3D10Texture1D (текстура 1D в Direct3D 10) | ID3D11Texture1D |
ID3D10Texture2D | ID3D11Texture2D |
ID3D10Texture3D |
ID3D11Texture3Dметоды Map и Unmap были перемещены в ID3D11DeviceContext, а все методы Map используют D3D11_MAPPED_SUBRESOURCE вместо void**. |
ID3D10Asynchronous |
ID3D11AsynchronousBegin, End и GetData были перемещены в ID3D11DeviceContext. |
ID3D10x | Многие интерфейсы ID3D11x идентичны между двумя API. |
Другие связанные технологии
Решение 10/10.1 | Решение 11 |
---|---|
Компилятор HLSL (D3D10Compile*, D3DX10Compile*) и API отражения шейдеров | D3DCompiler (см. раздел D3DCompiler.h) Примечание. для приложений Магазина Windows api D3DCompiler поддерживаются только для разработки, а не для развертывания. |
Эффекты 10 |
Эффекты 11 доступны как исходный код в открытом доступе онлайн.
Примечание. это решение не подходит для приложений Магазина Windows, так как для этого требуется API D3DCompiler во время выполнения (развертывание). |
Математика D3DX9/D3DX10 | DirectXMath |
D3DX10 | D3DX11 в устаревшем пакете SDK DirectX 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_FEATURE_LEVEL1 |
D3D_FEATURE_LEVELИдентичные, но определенные в D3DCommon.h, а также добавление D3D_FEATURE_LEVEL_11_0 для оборудования 11 классов вместе с D3D_FEATURE_LEVEL_9_1, D3D_FEATURE_LEVEL_9_2 и D3D_FEATURE_LEVEL_9_3 для 10level9 (D3D10_FEATURE_LEVEL_9_1, D3D10_FEATURE_LEVEL_9_2 и D3D10_FEATURE_LEVEL_9_3 также были добавлены для 10.1 в d3d10_1.h) |
Структуры
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
- Компоновка динамического шейдера
- Тесселяция с использованием шейдеров для корпуса и домена.
- Новые форматы сжатия блоков: 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и другие улучшения.
Связанные разделы
-
Руководство по программированию для Direct3D 11