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


Миграция на Direct3D 11

В этом разделе содержатся сведения о переносе в Direct3D 11 из более ранней версии Direct3D.

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

Эффекты (Direct3D 11)