Миграция на 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 вместе с методами запроса на сопоставление ресурсов или 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
D3D10_SO_DECLARATION_ENTRY D3D11_SO_DECLARATION_ENTRY добавляет поток.
D3D10_BLEND_DESC D3D11_BLEND_DESC Обратите внимание, что эта структура значительно изменилась с 10 до 10,1 для предоставления целевого состояния смешивания для отрисовки
D3D10_BUFFER_DESC D3D11_BUFFER_DESC Добавляет StructureByteStride для использования с ресурсами шейдера вычислений
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 Функция 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_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
    • Компоновка динамического шейдера
    • 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 и другие улучшения.

Руководство по программированию для Direct3D 11

Эффекты (Direct3D 11)