Direct3D

редактировать

Direct3D
Разработчик (и) Microsoft
Первоначальный выпуск2 июня 1996 г. ; 24 года назад (1996-06-02)
Стабильный выпуск 12/29 июля 2015 г.; 5 лет назад (29.07.2015)
Операционная система Windows
Платформа x86, ARM
Тип API 3D-графики
Лицензия Собственный
Веб-сайтmsdn.microsoft.com / en-us / library / windows/ desktop / hh309466

Direct3D - это графический интерфейс прикладного программирования (API) для Microsoft Windows. Часть DirectX, Direct3D используется для рендеринга трехмерной графики в приложениях, где важна производительность, например в играх. Direct3D использует аппаратное ускорение , если оно доступно на видеокарте , что позволяет аппаратное ускорение всего конвейера 3D-рендеринга или даже только частичноеускорение. Direct3D предоставляет расширенные графические возможности аппаратного обеспечения трехмерной графики, включая Z-буферизацию, W-буферизацию, буферизацию трафарета, пространственное сглаживание, альфа смешивание, смешивание цветов, mipmapping, смешивание текстур, обрезка, отбраковка, атмосферные эффекты, коррекция перспективы отображение текстуры, программируемые HLSL шейдеры и эффекты.Интеграция с другими технологиями DirectX позволяет Direct3D использовать такие функции, как отображение видео, 3D-рендеринг в плоскостях 2D наложения и даже спрайты, использование функций 2D и 3D графики в интерактивных носителях. галстуки.

Direct3D создает команду для компьютерной 3D-графики рендеринга; однако, начиная с версии 8, Direct3D заменил структуру DirectDraw и также взял на себя ответственность за рендеринг 2D-графики. Microsoftстремится постоянно обновлять Direct3D для поддержки новейших технологий, доступных на 3D-видеокартах. Direct3D предлагает полную программную эмуляцию вершин , но не поддерживает программную эмуляцию пикселей для функций, недоступных на оборудовании. Например, программное обеспечение, запрограммированное с использованием Direct3D, требует пиксельных шейдеров, а видеокарта на пользователя не поддерживает эту функцию, Direct3D не будет эмулировать его, хотя он будетвычислять и отображать полигоны и текстуры 3D-моделей, хотя качество и производительность обычно ниже, чем у аппаратного эквивалента. API включает в себя эталонный растеризатор (или устройство REF), которое является слишком медленным распространенным 3D-приложениями в себя времени и обычно используется только для отладки. Новый программный растеризатор реального времени, WARP, предназначенный для эмуляции всех функций Direct3D 10.1, включен в Windows 7 и WindowsVista Service Pack 2 с Обновление платформы; его производительность, как утверждается, находится на одном уровне с низкими 3D-картами на многоядерных процессорах.

Как часть DirectX, Direct3D доступен для Windows 95 и выше и является базой для векторной графики API в различных версиях консольных систем Xbox. Уровень совместимости Wine, бесплатное программное обеспечение, переопределяющее несколько Windows API, включает работуDirect3D.

Основным конкурентом Direct3D является OpenGL от Хроноса и его последователь Вулкан. Fahrenheit была попыткой Microsoft и SGI объединить OpenGL и Direct3D в 1990-х годах, но в итоге была отменена.

Содержание

  • 1 Обзор
  • 2 Direct3D 2.0 и 3.0
  • 3 Direct3D 4.0
  • 4 Direct3D 5.0 ​​
  • 5 Direct3D 6.0
  • 6 Direct3D 7.0
  • 7 Direct3D 8.0
  • 8 Direct3D 9
  • 9 Direct3D 10
    • 9.1 Direct3D 10.0
    • 9.2 Direct3D 10.1
  • 10Direct3D 11
    • 10.1 Direct3D 11.0
    • 10.2 Direct3D 11.1
    • 10.3 Direct3D 11.2
    • 10.4 Direct3D 11,3
    • 10,5 Direct3D 11,4
  • 11 Direct3D 12
  • 12 Архитектура
  • 13 Конвейер
  • 14 Уровни функций
    • 14.1 Direct3D 11 уровней
    • 14.2 Direct3D 12 уровней
  • 15 Многопоточность
  • 16 Direct3D Mobile
  • 17 Альтернативные реализации
  • 18 Сопутствующие инструменты
    • 18.1 D3DX
    • 18.2 DXUT
  • 19 См. Также
  • 20 Ссылки
  • 21 Внешние ссылки

Обзор

  • Direct3D 6. 0 - Мультитекстурирование
  • Direct3D 7.0 - Аппаратное обеспечение Преобразование, отсечение и освещение (TCL / T L)
  • Direct3D 8.0 - Pixel Shader 1.0 и Vertex Shader 1.0
  • Direct3D 8.0a - Pixel Shader 1.1, Pixel Shader 1.2, Pixel Shader 1.3
  • Direct3D 8.1 - Pixel Shade r 1.4 и Vertex Shader 1.1
  • Direct3D 9.0 - Shader Model 2.0 (Pixel Shader 2.0 и Vertex Shader 2.0)
  • Direct3D 9.0b - Pixel Shader 2.0b
  • Direct3D 9.0c - Sh ader Model 3.0 (Pixel Shader 3.0 и Vertex Shader 3.0), GPGPU
  • Direct3D 9.0L - Только для Windows Vista, Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU
  • Direct3D 10.0 - Windows Vista / Windows 7, Shader Model 4.0, Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU
  • Direct3D 10.1 - Windows Vista SP1 / Windows 7, модель шейдеров 4.1, Window s Gr aphics Foundation 2.1, DXVA 2.1, GPGPU
  • Direct3D 11.0 -Windows Vista SP2 / Windows 7, Shader Model 5.0, тесселяция, многопоточность рендеринга, вычислительные шейдеры, реализуемые аппаратным и программным продуктом под управление Direct3D 9/10 / 10.1, GPGPU
  • Direct3D 11.1 - Windows 7 SP1 / Windows 8, стереоскопический 3D-рендеринг, GPGPU
  • Direct3D 11.2 - Windows 8.1, мозаичные ресурсы, GPGPU
  • Direct3D 11.3 - Windows 10, Shader Model 5.1, GPGPU
  • Direct3D 12.0 - Windows 10, низкоуровневый рендеринг API, Shader Model 6.0, GPGPU

Direct3D 2.0 и 3.0

В 1992 году Серван Кеонджян и Дуг Рабсон основали компанию RenderMorphics, которая разработала API трехмерной графики под Название Reality Lab, используется в программном приложении для медицинской визуализации и САПР. Были выпущены две версии этого API. Microsoft купила RenderMorphics в феврале 1995 года, пригласила на использование возможностейной графики для Windows 95. Первая версия Direct3D поставлась в состав DirectX 2.0 (2 июня 1996 г.) и DirectX 3.0 (26 сентября 1996 г.).

Direct3D изначально реализовал как «сохраненный режим », так и «немедленный режим » 3D API. Другие API DirectX, такие как DirectDraw, оба были основаны на COM. Сохраненным режимом был граф сцены API, который получил мало распространения. Разработчики игр требовали большего прямого контроля над работойоборудования, чем мог обеспечить режим Direct3D. Только две игры, которые были проданы значительным объемом, Lego Island и Lego Rock Raiders были основаны в сохраненном режиме Direct3D, поэтому Microsoft не обновила сохраненный режим после DirectX 3.0.

Для DirectX 2.0 и 3.0 в непосредственном режиме Direct3D использовалась модель программирования «буфер выполнения», которую, как надеялась Microsoft, поставщики будут поддерживать напрямую. Буферы предназначались длявключения аппаратной памяти и аппаратными средствами для выполнения 3D-рендеринга. В то время их считали крайне неудобным для программирования, что мешало внедрению нового API и побуждало Microsoft принять OpenGL в качестве официального API-интерфейса 3D-рендеринга для игр и приложений для рабочих станций. (см. OpenGL и Direct3D )

Вместо того, чтобы использовать OpenGL в качестве игрового API, Microsoft решила продолжить улучшение того же Direct3D, не только для того, чтобы бытьконкурентоспособным с OpenGL, но и для более эффективных с другими проприетарными API, такими как Glide.

от 3dfx С самого начала немедленный режим также поддерживал моза рендеринг Talisman с помощью методов BeginScene / EndScene интерфейса IDirect3Device.

Direct3D 4.0

Никаких существенных изменений в Direct3D для DirectX 4.0, выпуск которого планировалось выпустить в конце 1996 года, а был отменен, не планировалось.

Direct3D5.0 ​​

В декабре 1996 года группа из Редмонда взялась за режим прямого режима Direct3D, команда RenderMorphics из Лондона продолжила работу в сохраненном режиме. Команда из Редмонда добавила DrawPrimitive API, которая устранила необходимость в приложении для буферов.., что делает Direct3 D бол ее похожим на API-интерфейсы рендеринга другого немедленного режима, такие как Gli de и OpenGL. Первая бета-версия DrawPrimitive была выпущена в феврале 1997 года, финальнаяверсия с DirectX 5.0 - в августе 1997 года.

Помимо более простого использования API немедленного режима, DirectX 5.0 добавил метод SetRenderTarget, который позволяет устройствам Direct3D записывать свои графические данные на различных поверхностях DirectDraw.

Direct3D 6.0

DirectX 6.0 (выпущен в августе 1998 г.) представил множество функций для современного оборудования (например, как мультитекстурные и буферы трафарета ), а такжеоптимизированные геометрические конвейеры для x87, SSE и 3DNow! и дополнительное управление текстурами для упрощения программирования. Direct3D 6.0 также включает поддержку функций, которые лицензированы у поставщиков оборудования Microsoft для включения в API, в обмен на преимущество времени выхода на рынок для поставщика лицензий. Сжатие текстур S3. Поддержка была одной из таких функций, переименованной в DXTC для включения в API. Другой былзапатентованный метод TriTech рельефное изображение. Microsoft включила эти функции в DirectX, а затем добавила их к требованиям, предъявляемым к драйверам, чтобы получить логотип Windows, чтобы стимулировать широкое внедрение функций в оборудовании других поставщиков.

Незначительное обновление для DirectX 6.0 произошло в обновлении DirectX 6.1 за февраль 1999 года. Помимо добавления поддержки DirectMusic в первый раз, в этом выпуске улучшенаподдержка расширений Intel Pentium III 3D.

Конфиденциальная записка, отправленная в 1997 году, демонстрирует, что Microsoft объявила полную поддержку Talisman в DirectX 6.0, но API был отменен (подробности см. На странице Microsoft Talisman ).

Direct3D 7.0

DirectX 7.0 (выпущенный в сентябре 1999 г.) представил формат текстуры .dds и поддержку преобразования и освещения аппаратное ускорение (впервые на оборудовании ПК сNvidia GeForce 256 ), а также возможность буферы вершин в аппаратной памяти. Аппаратные буферы вершин собой первое существенное улучшение по сравнению с OpenGL в истории DirectX. Direct3D 7.0 также расширил поддержку DirectX для оборудования с функциями мультитекстурного конвейера с фиксированными функциями: хотя он и мощный, это было настолько сложно представить, что потребовалась новая модель программирования, раскрыть возможности затенения графического оборудования.

Direct3D8.0

DirectX 8.0, выпущенный в ноябре 2000 г., представил возможность программирования в виде вершинных и пиксельных шейдеров, что позволяет разработчикам писать код, не беспокоясь о лишнем оборудовании. штат. Сложные программные шейдеры зависела от задач и драйвер дисплея компилировал эти шейдеры в инструкции, которые могли быть поняты аппаратным устройством. Direct3D 8.0 и его возможности программного запуска первого серьезного отхода от фиксированныхфункций в стиле OpenGL, в котором рисование управляется сложным конечным автоматом. Direct3D 8.0 также устранил DirectDraw как отдельный API. Direct3D включил в себя все оставшиеся вызовы API DirectDraw, все еще необходимые для разработки приложений, такие как Present (), функция, используемая для отображения результатов визуализации.

Direct3D не считался для пользователя, но в версии DirectX 8.1 многие проблемы с удобством использования были решены. Direct3D 8 содержитмножество мощных трехмерных изображений, таких как вершинные шейдеры, пиксельные шейдеры, туман, рельефное отображение и текстуры.. mapping.

Direct3D 9

Direct3D 9.0, выпущенный в декабре 2002 г., добавил новую версию High Level Shader Language, поддерживающую форматы с плавающей запятой, Multiple Render Targets (MRT), многоэлементные текстуры, поиск текстуры в вершинных шейдерах и методы буфера трафаретов.

Direct3D9Ex [1]

Расширение, доступное только в Windows Vista и новее (7, 8, 8.1 и 10), называемый Direct3D 9Ex (ранее с версией 9.0 L (L - кодовое имя Windows Longhorn)), позволяет использовать преимущества, предлагаемые Windows Vista Модель драйвера дисплея Windows (WDDM) и используется для Windows Aero. Direct3D 9Ex в сочетании с драйверами WDDM класса DirectX 9 позволяет виртуализировать графическую память и выгружать в системную память, позволяетпрерывать графические операции и планировать их, а также позволяет разделять процесс DirectX между поверхностями. Direct3D 9Ex ранее известен как версия 1.0 Windows Graphics Foundation (WGF).

Direct3D 10

Windows Vista включает крупное обновление Direct3D API. Первоначально назывался WGF 2.0 (Windows Graphics Foundation 2.0), затем DirectX 10 и DirectX Next. Direct3D 10 включает обновленную шейдерную модель 4.0 и дополнительную возможность прерывания дляшейдерных программ. В этой модели шейдеры по-прежнему состоят из фиксированных этапов, как и в предыдущей версии, но все этапы почти унифицированный интерфейс, а также единую парадигму доступа к таким ресурсам, как текстуры и константы шейдеров. Сам язык был расширен, чтобы стать более выразительным, включая целочисленные, значительно увеличенное количество инструкций и больше языковых операций, подобных C. В дополнение к ранее доступным этапам вершин и пиксельного шейдера,API включает этап геометрического шейдера, который разбивает старую модель: одна вершина входит / одна вершина выходит., чтобы создать фактическую генерацию геометрии из шейдера, позволяя создать сложную геометрию полностью на графическом оборудовании.

Windows XP не поддерживается DirectX 10.0 и выше.

В отличие от предыдущих версий API, Direct3D 10 больше не использует «биты возможностей» (или «заглавные буквы»), чтобы указать, какие функции поддерживаются на данномграфическом устройстве. Вместо этого он определяет минимальный стандарт аппаратных возможностей, которые должны поддерживаться, чтобы система отображения была «совместимой с Direct3D 10». Это вызвано отсутствием возможностей для проверки возможностей и особых случаев.

Оборудование Direct3D 10 было сравнительно редким после первоначального выпуска Windows Vista и из-за большого количества использования видеокарт, несовместимых с Direct3D 10, первые игры, совместимые с Direct3D10, все еще возможности рендеринга Direct3D 9. Примерами таких названий являются игры, изначально написанные для Direct3D 9 и портированные на Direct3D 10 после их выпуска, такие как Company of Heroes, или игры, разработанные для Direct3D 9, с модификацией Direct3D 10 позже в процессе разработки, например как Hellgate: London или Crysis. Пакет SDK для DirectX 10 стал доступ в феврале 2007 года.

Direct3D 10.0

Direct3D 10.0 Оборудование уровня должноподдерживать следующие функции: способность обрабатывать целые примитивы на новом этапе геометрического шейдера, возможность вывода сгенерированных конвейером данных вершин в память с использованием этапа вывода, мульти поддержки поддержкисэмплированного альфа - покрытия, обратного чтения глубины / трафарета или обратного чтения, когда он привязан к цели рендеринга, полная интеграция HLSL - все шейдеры Direct3D 10 написаны на HLSL и реализованы с использованием общего ядра шейдера, целочисленныхи побитовых операций шейдера, организации конвейера состояния организации 5 устанавливаемых объектов состояния, констант шейдера в буферах констант, увеличенного числа целей рендеринга, текстур и сэмплеры, без ограничения шейдера, новые типы ресурсов и форматы ресурсов, многоуровневые уровни выполнения среды / API, возможность выполнять замену и настройку каждого атериала с использованием геометрического шейдера,оцененное обобщение доступа к ресурсам с использованием представления устаревшееоборудование (заглавные буквы).

  • Фиксированные конвейеры заменяются полностью программируемыми конвейерами (часто называемыми унифицированной архитектурой конвейеров), которые можно запрограммировать для имитации того же.
  • Новый объект состояния для включения (в основном) ЦП для эффективного изменения состояний.
  • Модель шейдеров 4.0 расширяет возможности программирования графического конвейера. Он инструкции для целочисленных и побитовых вычислений.
  • Общееядро ​​шейдера обеспечивает полный набор совместимых с IEEE 32-битных целочисленных и побитовых операций. Эти операции позволяют использовать новый класс алгоритмов в графическом оборудовании - примеры сжатия и упаковки, БПФ и управление потоком программных битовых полей.
  • Геометрические шейдеры, которые работают с соседними треугольниками, образуют сетку.
  • Массивы текстур позволяют заменять текстуры в графическом процессоре без вмешательства процессора.
  • позволяетигнорировать вызовы рисования на основе некоторых других условий. Это быстрое отсечение окклюзии, что обеспечивает рендеринг объектов, если они не видны слишком далеко, чтобы быть видимыми.
  • Поддержка Instancing 2.0, позволяющая использовать несколько экземпляров похожих мешей, таких как таких армий, траву или деревья, которые должны вызывать отрисовки, что сокращает время обработки, для различных похожих объектов, по сравнению с одним.

Direct3D 10.1

Direct3D 10.1был анонсирован Microsoft вскоре после выпуска Direct3D 10 в качестве незначительного обновления. Спецификация была окончательно доработана с выпуском DirectX SDK в ноябре 2007 г., и среда была поставлена ​​с Windows Vista SP1, которая доступна с середины марта 2008 г.

Direct3D 10.1 устанавливает еще несколько стандартов качества поставщиков для графики и дает разработчика больший контроль над качеством изображения. Возможности включают более тонкий контроль надсглаживанием (как мультисэмплинг, так и суперсэмплинг с затенением для каждого сэмпла и контроль приложения над положением сэмпла) и большую гибкость некоторых функций (массивы кубических карт и независимые режимы наложения). Аппаратное обеспечение следующего уровня Direct3D 10.1 поддерживает следующие функции: Мультисэмплинг был улучшен для обобщения прозрачности на основе покрытия и повышения эффективности мультисэмплинга с многопроходным рендерингом, улучшенным поведением отбраковки - грани снулевой площадью автоматически отбираются; это влияет только на каркасный рендеринг, независимые режимы наложения для каждой цели рендеринга, новое выполнение пиксельного шейдера с дискретизацией с примитивной растеризацией, увеличенная пропускная способность этапа конвейера, поверхности цвета MSAA и глубины / трафарета теперь могут работать с CopyResource в качестве источника или назначения, MultisampleEnable используется только на растеризацию линий (точки и треугольники не исследуются). Этоозначает, что некоторая мультисэмпловая растеризация из Direct3D 10 больше не поддерживается, инструкции «Выбор текстуры - sample_c» и «sample_c_lz» для эффективной работы как с Texture2DArrays, так и с TextureCubeArrays, используя член Location (альфа-компонент) для набора, поддержка TextureCubeArrays.

  • Обязательная 32-битная фильтрация с плавающей запятой.
  • Правила с плавающей запятой - используются те же правила IEEE-754 для с плавающей запятой, ЗА ИСКЛЮЧЕНИЕМ 32-битныхопераций с плавающей запятой, которые достигаются в пределах 0,5 единицы последнего места (0,5 ULP) от бесконечно точного результата. Это относится к сложению, вычитанию и умножению. (до точности 0,5 ULP для умножения, 1,0 ULP для обратного).
  • Форматы - точность смешивания float16 увеличена до 0,5 ULP. Смешивание также требуется для форматов UNORM16 / SNORM16 / SNORM8.
  • Преобразование формата при копировании между определенными 32/64/128-битными форматированными,типизированными средствами и сжатыми представлениями той же разрядности.
  • Обязательно поддержка 4x MSAA для всех целей рендеринга, кроме R32G32B32A32 и R32G32B32.
  • Модель шейдера 4.1

В отличие от Direct3D 10, для которого строго требовалось оборудование и интерфейсы драйверов класса Direct3D 10, среда выполнения Direct3D 10.1 может работать на оборудовании Direct3D 10.0, используя концепцию «уровней функций », но новые функции поддерживаются новым оборудованием,которое обеспечивает уровень возможностей 10_1.

Единственным доступным оборудованием Direct3D 10.1 по состоянию на июнь 2008 г. были Radeon HD 3000 series и Radeon HD 4000 series от ATI ; в 2009 году к ним присоединились Chrome 430 / 440GT графические процессоры из S3 Graphics и некоторые модели младшего уровня в серии GeForce 200 из Nvidia. В 2011 году наборы микросхем Intel начали поддерживать Direct3D 10.1 споявлением Intel HD Graphics 2000 (GMA HD).

Direct3D 11

Direct3D 11 был выпущен как часть Windows 7. Он был представлен на Gamefest 2008 22 июля 2008 г. и техническая характеристика конференции Nvision 08 на 26 августа 2008 г. Техническая предварительная версия Direct3D 11 включен в выпуск DirectX SDK за ноябрь 2008 г. AMD анонсировала работающее оборудование DirectX11 на Computex 3 июня 2009 г., на котором были запущены некоторые образцы SDK DirectX 11.

Среда выполнения Direct3D 11 может работать на оборудовании класса Direct3D 9 и 10.x и драйверах с использованием уровней функций, расширяя функциональные возможности, впервые представленные в среде выполнения Direct3D 10.1. Уровни функций позволяют разработчикам унифицировать конвейер рендеринга под Direct3D 11 API и использовать улучшения API, такие как улучшенное управление ресурсами и многопоточность даже на картах начального уровня, хотя расширенные функции, такиекак новые модели шейдеров и этапы рендеринга, будут доступны только наверху. -уровневая фурнитура. Существует три профиля «10 уровня 9», которые инкапсулируют различные возможности популярных карт DirectX 9.0a, а Direct3D 10, 10.1 и 11 имеют отдельный уровень функций; каждый верхний уровень является строгим надмножеством нижнего уровня.

Тесселяция ранее рассматривалась для Direct3D 10, но позже от нее отказались. Графические процессоры, такие как Radeon R600, оснащенмеханизмом тесселяции, который можно использовать с Direct3D 9/10 / 10.1 и OpenGL, но он несовместим с Direct3D 11 (Microsoft). Старое графическое оборудование, такое как Radeon 8xxx, GeForce 3/4, имело поддержку другой формы тесселяции (RT-патчи, N-патчи), но эти технологии никогда не находили существенного применения. Таким образом, их поддержка была прекращена из-за нового оборудования.

Microsoft также намекнула на другие функции, такие как прозрачность, независимость порядка, которая никогда не предоставляла Direct3D API, но почти прозрачно поддерживала ранним оборудованием Direct3D, таким как Videologic PowerVR линейка фишек.

Direct3D 11.0

Direct3D 11.0 Функции включают в себя: поддержку модели шейдеров 5.0, динамическое связывание шейдеров, адресные ресурсы, дополнительные ресурсы, подпрограммы, создание экземпляров геометрии, покрытие в качестве пиксельного шейдера, программируемую интерполяцию входы, новые форматы сжатия текста (1новый формат LDR и 1 новый формат HDR), зажимы текстур для ограничения предварительной загрузки WDDM, требуют 8-битных субтекселей и субмип-точности при фильтрации текста, ограничения текста 16K, Gather4 (мульти поддержка- текстуры компонентов, поддержка программируемых смещений), DrawIndirect, консервативный oDepth, Depth Bias, адресный вывод потока, ограничение mipmap для каждого ресурса, окна просмотра с плавающей запятой, инструкции преобразования шейдеров, улучшенная многопоточность.

  • Модель шейдера 5
  • Поддержка тесселяции и шейдеров тесселяции для увеличения во время выполнения количества видимых полигонов из полигональной модели с низкой детализацией
  • Многопоточность рендеринг - для рендеринга в один и тот же объект устройства Direct3D из разных потоков для многоядерных процессоров
  • Вычислительные шейдеры - который предоставляет конвейер шейдеров для неграфических задач, таких как поток обработки и ускорениефизики, аналогичные по духу OpenCL, Nvidia CUDA, ATI Stream и HLSL Шейдер, прочего, достижения модели 5.
  • Обязательная поддержка 4x MSAA для всех целей рендеринга и 8x MSAA для всех форматов целевых рендерингов, кроме форматов R32G32B32A32. алгоритмы сжатия для более эффективной упаковки качественных и HDR / альфа-текстур, а также увеличенный кеш текстур.

    Впервые появился в версии Release Candidate, Windows 7 inteрешает первую выпущенную Direct3D 11. Обновление платформы для Windows Vista включает полнофункциональную среду выполнения Direct3D 11 и обновление DXGI 1.1, а также другие связанные компоненты из Windows 7, такие как WARP, Direct2D, DirectWrite и WIC.

    Direct3D 11.1

    Direct3D 11.1 - это обновление API, поставляемого с Windows 8. Среда выполнения Direct3D в Windows 8 включает DXGI 1.2 и требует новых драйверовустройств WDDM 1.2. Предварительная версия Windows SDK для Windows 8 Developer Preview была выпущена 13 сентября 2011 года.

    Новый API включает шейдер трассировку и улучшение компилятора HLSL, поддержку скалярных типов HLSL с минимальной точностью, Беспилотные летательные аппараты (неупорядоченные представления доступа) на каждом этапе конвейера, независимая от цели растеризации (TIR), возможность отображать SRV динамических буферов с NO_OVERWRITE, шейдерная обработкавидеоресурсов, возможность использовать логические операции в цели рендеринга, возможность привязать поддиапазонный констант в шейдер и извлекать его, возможность создать более крупные буферы констант, чем шейдер может получить доступ, возможность отбрасывать ресурсы и Представления, возможность использования новых опций копирования, возможность принудительного подсчета выборок для создания состояния растеризатора, возможность использования всего или части представления ресурсов, возможностьиспользования Direct3D в процессе очистки 0, возможность указания пользовательских плоскостей обрезки в HLSL на уровне функций 9 и выше, поддержка теневого буфера на уровне функций 9, поддержка воспроизведения видео, расширенная поддержка общих ресурсов Texture2D и переключение на лету между контекстами Direct3D 10 и 11 и уровнями функций. Direct3D 11.1 включает новый уровень функций 11_1, который вносит незначительные обновления в язык шейдеров, такие как увеличенные буферы констант идополнительные инструкции с двойной точностью, а также улучшенные режимы наложения и обязательную поддержку 16-битных цветовых форматов для повышения производительности ввода. графические процессоры уровня, такие как Intel HD Graphics. WARP обновлен для поддержки уровня функций 11_1.

    Обновление платформы для Windows 7 включает ограниченный набор функций из Direct3D 11.1, хотя компоненты, которые зависят от WDDM 1.2, такие как уровень функций 11_1 исвязанные с ней API или четырехкратная буферизация для стереоскопического рендеринга - отсутствуют.

    Direct3D 11.2

    Direct3D 11.2 поставлся с Windows 8.1. Новые аппаратные функции требуют DXGI 1.3 с драйверами WDDM 1.3 и включают модификацию и связывание шейдеров во время выполнения, функции графика связывания (FLG), входящие HLSL компилятор, возможность аннотировать графические команды. Уровни функций 11_0 и 11_1 дополнительная поддержкаплиточных ресурсов с ограничением уровня детализации шейдера (Tier2). Функция Последняя эффективно обеспечивает контроль над аппаратными таблицами страниц, присутствующими во многих современных графических процессорах. WARP был обновлен для полной поддержки новых функций. Однако функционального уровня 11_2 нет; новые функции рассредоточены по существующим уровням функций. Те, которые зависят от оборудования, можно проверить индивидуально с помощью CheckFeatureSupport.Некоторые из «новых» функций Direct3D 11.2 фактически раскрывают некоторые старые аппаратные функции более детально; например, D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORTпредоставляет частичную поддержку для создания экземпляров на оборудовании уровня функций 9_1 и 9_2, в противном случае полностью поддерживается, начиная с уровня функций 9_3 и далее.

    Direct3D 11.X

    - это расширенный набор DirectX 11.2, работающий на Xbox One. Он включает в себя некоторые функции,такие как комплекты рисования, которые позже были объявлены как часть DirectX 12.

    Direct3D 11.3

    Direct3D 11.3, выпущенный в июле 2015 года с Windows 10; он включает незначительные функции рендеринга из Direct3D 12, сохраняя при этом общую структуру API Direct3D 11.x. В Direct3D 11.3 представлена ​​модель шейдеров 5.1, необязательное эталонное значение шаблона, заданное шейдером, типизированные неупорядоченные нагрузки представлений доступа, упорядоченные представлениярастеризатора (ROV), необязательный стандартный Swizzle, необязательное сопоставление текстур по умолчанию, консервативная растеризация (из трех уровней), необязательно унифицированный Доступ к памяти (UMA) и дополнительные мозаичные ресурсы (уровень 2) (мозаичные ресурсы тома).

    Direct3D 11.4

    • Direct3D 11.4 версии 1511 - Первоначальный Direct3D 11.4 был представлен в Windows Обновление 10 Threshold 2 (версия 1511), улучшающее поддержку внешних графических адаптеров иDXGI 1.5.
    • Direct3D 11.4 версии 1607 - Обновленный Direct3D 11.4 с обновлением Windows 10 Anniversary Update (версия 1607) включает поддержку WDDM 2.1 и для формата UHDTV HDR10 (ST 2084 ) и поддержку частоты обновления для приложений UWP.

    Direct3D 12

    Direct3D 12 обеспечивает более низкий уровень аппаратной абстракции, чем предыдущие версии, позволяя будущим играм значительно улучшить многопоточное масштабирование ng и снизить загрузку ЦП. Это достигается за счетлучшего согласования уровня абстракции Direct3D с базовым оборудованием с помощью новых функций, таких как косвенное рисование, таблицы дескрипторов, сжатые объекты состояния конвейера и пакеты вызовов рисования. Фактически, сокращение нагрузки на драйверы - это главная привлекательность Direct3D 12, как и AMD Mantle ; По словам ведущего разработчика Макса МакМаллена, основная цель Direct3D 12 - достичь «эффективности на уровне консоли» и улучшить параллелизм ЦП.

    Хотя Nvidiaобъявила о широкой поддержке Direct3D 12, они также были в некоторой степени зарезервировано по поводу универсальной привлекательности нового API, отмечая, что, хотя разработчики игрового движка могут быть заинтересованы в непосредственном управлении ресурсами GPU из кода своего приложения, «многие [другие] люди не будут» счастливы сделать это.

    Некоторые новые аппаратные функции также присутствуют в Direct3D 12, включая Shader Model 5.1, Volume Tiled Resources (Tier 2), ShaderSpecified Stencil Reference Value, Typed UAV Load, Conservative Rasterization (Tier 1), более удобное столкновение Консервативная растеризация, упорядоченные представления растеризатора (ROV), стандартные Swizzles, отображение текстур по умолчанию, цепочки подкачки, перемещаемые ресурсы и сжатые ресурсы, дополнительные режимы наложения, программируемое смешивание и эффективный не зависящий от порядка transparency (OIT) with pixel ordered UAV.

    Pipelineобъекты состояния эволюционировали из Direct3D 11, а новые краткие состояния конвейера означают, что процесс был упрощен. DirectX 11 предлагал гибкость в том, как его состояния могли быть изменены, в ущерб производительности. Упрощение процесса и унификация конвейеров (например, состояний пиксельного шейдера) приводит к более оптимизированному процессу, значительно сокращая накладные расходы и позволяя видеокарте отображать больше вызовов для каждого кадра.

    Direct3D 12 также получил знания от AMD Mantle в списках команд и пакетах, чтобы обеспечить более сбалансированную совместную работу ЦП и ГП.

    В Direct3D 11 команды отправляются от центрального процессора к графическому процессору одна за другой, и графический процессор выполняет эти команды последовательно. Это означает, что команды ограничены скоростью, с которой ЦП может отправлять эти команды линейным образом. В DirectX 12 эти команды отправляются в виде списков команд, содержащих всю необходимую информацию в одном пакете. GPU затем может вычислить и выполнить эту команду в одном процессе, не дожидаясь какой-либо дополнительной информации от ЦП.

    В этих списки команд указать собой пакеты. Там, где ранее команды просто принимались, пакеты можно использовать повторно. Это снижает нагрузку на графический процессор и означает, что назначающиеся переводы на общение быстрее.

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

    Динамические кучи также являются функцией Direct3D 12.

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

    • Direct3D 12 версии 1607 - с юбилейным обновлением Windows 10 (версия 1607), выпущенным 2 августа 2016 г., среда выполнения Direct3D 12 была обновлена ​​для поддержки конструкций для явной многопоточности и межпроцессного взаимодействия, что позволяет разработчикам использовать преимущества современных массивно-параллельных графических процессоров. Другие функции включаютобновленные корневые подписи версии 1.1, а также поддержку формата HDR10 и переменной частоты обновления.
    • Direct3D 12 версии 1703 - с обновлением Windows 10 Creators Update (версия 1703), выпущенная 11 апреля 2017 г., среда выполнения Direct3D 12 была обновлена ​​для поддержки Shader Model 6.0 и DXIL. и Shader Model 6.0 требуется Windows 10 Anniversary Update (версия 1607), WDDM 2.1. Новые графические функции - это тестирование границ глубины и программируемыйMSAA.
    • Direct3D 12 версии 1709 - Direct3D в Windows 10 Fall Creators Update (версия 1709), выпущенном 17 октября 2017 г., включает улучшенную отладку.
    • Direct3D 12 версия 1809 - Windows 10 October 2018 Update (версия 1809) обеспечивает поддержку DirectX Raytracing, поэтому графические процессоры могут использовать его API.
    • Direct3D 12 версия 1903 - Windows 10 May 2019 Update (версия 1903) обеспечивает поддержку DirectML.
    • Direct3D 12 версия 2004 -Windows 10 May 2020 Update (версия 2004) обеспечивает поддержку шейдеров Mesh Amplification, обратной связи с семплерами, а также DirectX Raytracing Tier 1.1 и улучшения распределения памяти.

    Архитектура

    Абстрактный уровень

    Direct3D - это компонент подсистемы API Microsoft DirectX. Целью Direct3D является абстрагирование связи между графическим приложением и драйверами графического оборудования. Он представлен как тонкий абстрактный слой на уровне, сопоставимом с GDI (см. Прилагаемую диаграмму). Direct3D содержит множество функций, которых не хватает GDI.

    Direct3D - графический API режима прямого. Он низкоуровневый интерфейс для каждой 3D-функции видеокарты (преобразования, отсечения, освещения, материалов, текстур, буферизации Deep и т. Д.). Когда-то у него был компонент удерживаемого режима более высокого уровня, теперь он официально снят с производства.

    Непосредственный режим Direct3D представляет три основныхабстракции: устройства, ресурсы и цепочки обмена (см. Прилагаемую диаграмму). За рендеринг 3D-сцены устройства. Они могут использовать различные возможности рендеринга. Например, устройство моно обеспечивает черно-белый рендеринг, а устройство RGB - цветное. Существует четыре типа устройств:

    Устройство
    • Ссылка устройство: имитирует новыефункции, пока имеется аппаратное обеспечение. Для использования этого устройства типа необходимо установить Direct3D SDK.
    • Пустая ссылка устройство: ничего не делает. Это устройство используется, когда SDK не установлен и запрашивается эталонное устройство.
    • Подключаемое программное обеспечение устройство: Выполняет программный рендеринг. Это устройство было представлено с DirectX 9.0 .

    Каждое устройство содержит по крайней мере одну цепочку подкачки. Цепочкаподкачки состоит из одной или нескольких задних поверхностей буфер. Рендеринг происходит в обратном буфере .

    . Более того, устройства содержат набор ресурсов; данные, используемые во время рендеринга. Каждый ресурс имеет четыре атрибута:

    • Тип : определить тип ресурса: поверхность, объем, текстура, текстура куба, текстура объема, текстура поверхность, буфер индекс или буфер вершин.
    • Пул : Описывает, как ресурс управляется средой выполнения и где он хранится.В пуле по умолчанию ресурс будет существовать только в памяти устройства. Ресурсы в управляемом пуле будут храниться в системной памяти и при необходимости будут отправлены на устройство. Ресурсы в пуле системной памяти будут существовать только в системной памяти. Наконец, рабочий пул в основном совпадает с пулом системной памяти, но ресурсы не связаны аппаратными ограничениями.
    • Формат : качество существующих данных ресурса в памяти. Например,значение формата D3DFMT_R8G8B8 означает 24-битную глубину цвета (8 бит для красного, 8 бит для зеленого и 8 бит для синего).
    • Использование : это, с набором флаг битов, как ресурс будет Приложение Приложение. Эти флаги определяют, какие ресурсы используются в динамических или статических шаблонах доступа. Значения статических ресурсов не изменяются.

    Direct3D реализует два режима отображения:

    • Полноэкранный режим: приложение Direct3D генерирует весь графическийвывод для устройства отображения. В этом режиме Direct3D автоматически захватывает Alt-Tab и устанавливает / восстанавливает разрешение экрана и формат пикселей без вмешательства программиста. Это также создание проблем для отладки из-за «Эксклюзивного кооперативного режима».
    • Оконный режим: результат отображается внутри области окна. Direct3D взаимодействует с GDI для создания графического вывода на дисплее. Оконный режим может иметь тот же уровень производительности, что иполноэкранный, в зависимости от поддержки драйвера.

    Конвейер

    Процесс графического конвейера

    API Microsoft Direct3D 11 определить процесс для преобразования группы вершин, текстур, буферов, и вставьте в изображение на экране. Этот процесс описывается как конвейер рендеринга с отдельными этапами. Различные этапы конвейера Direct3D 11:

    1. Сборщик входных данных : считывает данные вершин из предоставленного приложения буфера вершин и передает их по конвейеру.
    2. Vertex Shader : операции на одной вершине за раз, например, трансформации, скиннинг или освещение.
    3. : выполняет операции над набором контрольных точек патча и генерирует дополнительные данные, известные как константы патча.
    4. Этап тесселяции : разделяет геометрию для создания представлений корпуса более порядка.
    5. : Выполняет операции с вершинами, выводимыми этапами тесселяции, почти так же, как вершинный шейдер.
    6. Геометрический шейдер : Обрабатывает целые примитивы, такиекак в виде треугольников, точек или линий. Данный примитив, этот этап отбрасывает его или генерирует один или несколько новых примитивов.
    7. Вывод потока : может записывать результаты предыдущего этапа в память. Это полезно для рециркуляции данных обратно в конвейер.
    8. Растеризатор : конвертирует примитивы в пиксели, передавая эти пиксели в пиксельный шейдер. Растеризатор также может выполнять другие задачи, такие как отсечение того, что не видно, или интерполяция данных вершин вданные для каждого пикселя.
    9. Pixel Shader : определить окончательный цвет пикселя, который будет записан в цель рендеринга и может также вычислить значение глубины, которое будет записано в буфер глубины.
    10. Объединение выходных данных : объединяет различные типы выходных данных (значения пиксельного шейдера, альфа-смешение, глубина / трафарет...) для построения окончательного результата.

    Этапы конвейера, показанные в круглой рамке, полностью программируются.Приложение, которое выполняет шейдерную программу, которая исполняется на этом этапе. Многие этапы необязательны и могут быть полностью отключены.

    Уровни функций

    В Direct3D 5–9, когда в новых версиях API появилась поддержка новых аппаратных возможностей, большинство из них были необязательными - каждый поставщик поддерживал свой собственный набор поддерживаемых функций в дополнение к базовым необходимым функциям.. Поддержка отдельных функций должна быть включена с использованием«битов возможностей» или «ограничений», что делало программирование графики между поставщикомми сложной задачи.

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

    В Direct3D 10.1 добавлено несколько новых требований коборудованию, и для обеспечения совместимости с оборудованием и драйверами 10.0 эти функции были объединены в два набора, называемых «уровнями функций», при этом уровень 10.1 образует надмножество уровня 10.0. Direct3D 11.0, 11.1 и 12 добавили поддержку нового оборудования, новые обязательные возможности дополнительно сгруппированы по верхним уровням функций.

    Direct3D 11 также представил «10level9», подмножество Direct3D 10 API с тремя уровнями функций, инкапсулирующих различные картыDirect3D 9 с драйверами WDDM и Direct3D 11.1 повторно представили несколько дополнительных функций для всех уровней были расширены в Direct3D 11.2 и более поздних версиях.

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

    Новые уровни функции вводятся в обновленныхверсиях API и обычно включают:

    • основные обязательные функции - (Direct3D 11.0, 12),
    • несколько второстепенных функций (Direct3D 10.1, 11.1) или
    • общий набор ранее необязательных функций (Direct3D 11.0 "10 уровень 9").

    Каждый верхний уровень является строгим надмножеством нижнего уровня, с использованием новых или ранее необязательных функций, которые перемещаются в основную функциональность на Верхний уровень. Более продвинутые функции в основной версии Direct3D API,такие как новые модели шейдеров и этапы рендеринга, доступны только на оборудовании верхнего уровня.

    Существуют отдельные возможности, указывающие на определенные операции с текстурами и форматами ресурсов; они указываются для каждого формата с использованием комбинации флагов возможностей.

    Уровни функции используют определение в качестве разделителя (например, «12_1»), в то время как версию API / времени используют точку (например, «Direct3D 11.4»).

    Уровни Direct3D 11

    В Direct3D 11.4 для Windows 10 существует девять уровней функций, обеспечиваемых структурой D3D_FEATURE_LEVEL; Уровни 9_1, 9_2 и 9_3 (вместе известные как Direct3D 10, уровень 9 ) повторно инкапсулируют различные функции популярных карт Direct3D 9, уровни 10_0, 10_1 относятся к устаревшим версиям Direct3D 10, 11_0 и 11_1 отражают функцию, представленная в API и средах выполнения Direct3D 11 и Direct3D 11.1, уровни 12_0 и 12_1 соответствуют новым уровням функций,представленным в API Direct3D 12.

    Уровни функций в Direct3D 11.4
    Уровень функцийОбязательные аппаратные функцииДополнительные функции
    9_1Shader Model 2.0 (vs_2_0/ ps_2_0), текстуры 2K, текстуры объема, запросы событий, BC1-3 (также известный как DXTn), некоторые другие специальные возможности.Н / Д
    9_2Запросы окклюзии, форматы с плавающей запятой (без смешивания), расширенные заглавные буквы, все функции 9_1.
    9_3vs_2_a/ ps_2_xс экземплярами и дополнительными ограничениями шейдеров, текстурами 4K, используемыми целями рендеринга (4 MRT), смешиванием с плавающей запятой (ограничено), всеми функциями 9_2.
    10_0Модель шейдера 4.0, геометрический шейдер, вывод потока, альфа-покрытие, текстуры 8K, MSAA, двусторонний шаблон, общие виды целевого объекта рендеринга, массивы текстур, BC4 / BC5, плавающая поддержка точка формата, все функции 9_3.Логическиеоперации смешивания, DirectCompute (CS 4.0 / 4.1), расширенные форматы пикселей..
    10_1Shader Model 4.1, массивы кубических карт, расширенный MSAA, все функции 10_0.
    11_0Модель шейдеров 5.0 / 5.1, шейдеры корпуса и домена, DirectCompute (CS 5.0 / 5.1), текстуры 16K, BC6H / BC7, расширенные форматы пикселей, все функции 10_1.Рендеринг только БПЛА с принудительным подсчетом выборок, постоянным смещением буфера и частичным обновлением, операциями с плавающей запятойдвойной точности (64-бит), минимальной точностью с плавающей запятой (10- или 16-бит ), мин / макс фильтрация.
    11_1Логические операции смешивания, независимая от цели растеризация, БПЛА на каждом этапе конвейера с увеличенным производственным слотов, рендеринг только БПЛА с принудительным подсчетом выборок, постоянное смещение буфера и частичные обновления, все функции 11_0.Тайловые ресурсы (четыре уровня), консервативная растеризация (три уровня), эталонноезначение шаблона пиксельного шейдера, упорядоченные представления растеризатора, типизированные загрузки БПЛА для дополнительных форматов.
    12_0Тайловые ресурсы, уровень 2 (Texture2D), типизированные нагрузки БПЛА (дополнительные форматы).
    12_1Консервативный уровень растеризации 1, упорядоченные представления растеризатора.

    Уровни Direct3D 12

    Direct3D 12 для Windows 10 требует графического оборудования, соответствующего уровням функций 11_0 и 11_1, которыеподдерживают преобразование приложений и запросов драйверов WDDM 2.0. Есть два новых уровня функций, 12_0 и 12_1, которые включают некоторые новые функции, предоставляемые Direct3D 12, которые являются необязательными на уровнях 11_0 и 11_1. Некоторые ранее необязательные функции переназначены как базовые на уровнях 11_0 и 11_1. Shader Model 6.0 была выпущена вместе с обновлением Windows 10 Creators Update и требует юбилейного обновления Windows 10 и драйверов WDDM 2.1.

    Уровни функций Direct 3D 12
    УровеньОбязательные функцииДополнительные функции
    11_0Все обязательные функции 11_0 из Direct3D 11, Shader Model 5.1, Resource binding Tier 1.Логические операции смешивания, операции с плавающей запятой двойной точности (64-битные), минимальная точность с плавающей запятой (10- или 16-битная).

    Привязка ресурсов (три уровня), мозаичные ресурсы (четыре уровня), консервативная растеризация (три уровня), значение ссылок на шаблон изпиксельного шейдера, упорядоченные представления растеризатора, типизированные загрузки БПЛА для дополнительных форматов, создание экземпляров представления.

    Модель шейдера 6.0-6.6

    Метакоманды, переменная скорость затенения, трассировка лучей, шейдеры сетки, обратная связь сэмплера.

    Другие дополнительные функции.

    БПЛА на каждой стадии конвейера, БПЛА только рендеринг с подсчетом выборки силы, постоянным смещением буфера и частичным обновлением.
    11_1 Логические операции смешивания, независимая от цели растеризация, увеличенное количество слотов БПЛА.
    12_0Уровень привязки ресурсов 2, уровень мозаичных ресурсов 2 (Texture2D), типизированные нагрузки БПЛА (дополнительные форматы), модель шейдеров 6.0.
    12_1Консервативный уровень растеризации 1, упорядоченные представления растеризатора.
    12_2DirectX 12 Ultimate: модель шейдеров 6.5, уровень трассировки лучей 1.1, сеточные шейдеры, затенение с переменной скоростью,обратная связь сэмплера, уровень привязки ресурсов 3, уровень мозаичных ресурсов 3 (Texture3D), уровень консервативной растеризации 3, 40-битовое виртуальное адресное пространство.

    Direct3D 12 представляет обновленную модель привязки ресурсов, которая позволяет явно управлять памятью. Элементы объекты «представления ресурсов» теперь представлены дескрипторами ресурсов, которые выделяются с помощью кучи памяти и таблиц. Уровни привязки ресурсов определяют максимальное количество ресурсов,которые могут быть заданы с помощью CBV (представление постоянного буфера), SRV (представление ресурсов шейдера) и БПЛА (представление неупорядоченного доступа), а также блоков дискретизации текстуры. Аппаратное обеспечение 3 позволяет полностью использовать ресурсы без привязки только размером кучи дескрипторов, в то время как оборудование уровня 1 и уровня 2 накладывает ограничения на количество дескрипторов («представлений»), которые могут быть одновременно.

    Уровни привязки ресурсов
    Ограничения ресурсовУровень 1Уровень 2Уровень 3
    Дескрипторы в куче CBV / SRV / UAV1M1M>1 млн
    CBV на шейдер этап1414полная куча
    SRV на этапе шейдера128полная куча
    БПЛА на всех этапах8, 6464полная куча
    семплеры на этап шейдера16полная куча
    64 слота на аппаратном уровне 11_1

    Многопоточность

    Модель драйвера WDDM в Windows Vista и более поздних версиях поддерживает произвольно большоеконтекстов выполнения (или потоков) на оборудовании или в программном приложении. Windows XP поддерживает только многозадачный доступ к Direct3D, при котором могут работать отдельные приложения в разных окнах и иметь аппаратное ускорение, а ОС ограниченный контроль над тем, что мог делать графический процессор, драйвер мог произвольно переключать потоки выполнения.

    Возможность выполнять выполнение в многопоточном режиме появилась в среде выполнения Direct3D 11. Каждый представленпредставлен представителем ресурсов графического процессора. Контексты выполнения защищены друг от друга, однако мошенническое или плохо написанное приложение может получить доступ к данным из другого процесса памяти графического процессора, отправив измененные команды. Хотя хорошо написанное приложение защищено от доступа со стороны другого приложения, оно все же должно защищать себя от сбоев и потери устройства, вызванных другими приложениями.

    ОС сама управляет потоками, позволяяаппаратному обеспечению переключаться с одного потока на другой, когда это необходимо, а также обрабатывает управление памятью и подкачку (в системную память и на диск) через встроенную память ядра ОС. управление.

    Более тонкое переключение контекста, то есть возможность переключать два потока выполнения на уровне инструкций шейдера вместо уровня одной команды или даже пакета команд, было введено в WDDM / DXGI 1.2, который поставляется с Windows 8. Это преодолевает потенциальную проблемупланирования, когда приложение должно очень долго выполнять одну команду / пакет команд и должно быть остановлено сторожевым таймером ОС.

    WDDM 2.0 и DirectX 12 были переработаны для разрешить полностью многопоточные вызовы отрисовки. Это было достигнуто за счет того, что все ресурсы были неизменяемыми (т.е. доступными только для чтения), сериализацией состояний рендеринга и использованием пакетов вызовов отрисовки. Это позволяет избежать сложного управления ресурсами в драйвере режимаядра, делая возможными множественные повторные вызовы драйвера пользовательского режима через контексты параллельного выполнения, предоставляемые отдельными потоками рендеринга в одном приложении.

    Direct3D Mobile

    Direct3D Mobile является производным от Direct3D, но имеет меньший объем памяти . Windows CE обеспечивает поддержку Direct3D Mobile.

    Альтернативные реализации

    Существуют следующие альтернативные реализации Direct3D API. Они полезныдля платформ, отличных от Windows, и для оборудования без поддержки некоторых версий DX:

    • WineD3D - проект с открытым исходным кодом Wine имеет рабочие реализации API Direct3D через перевод на OpenGL. Реализация Wine также может быть запущена в Windows при определенных условиях.
    • vkd3d - vkd3d - это библиотека трехмерной графики с открытым исходным кодом, построенная на основе Vulkan, которая позволяет запускать приложения Direct3D 12 поверх Vulkan. Восновном он используется в проекте Wine, а теперь включен в проект Valve Proton в комплекте со Steam на Linux.
    • DXVK - Уровень перевода на основе Vulkan с открытым исходным кодом. для Direct3D 9/10/11, который позволяет запускать 3D-приложения в Linux с использованием Wine. Он используется Proton / Steam для Linux. DXVK может запускать большое количество современных игр для Windows под Linux.
      • D9VK - Форк DXVK для добавления поддержкиDirect3D 9, включенный в Steam / Proton в Linux. 16 декабря 2019 года D9VK был объединен с DXVK.
    • Gallium Nine - Gallium Nine позволяет запускать приложения Direct3D 9 в Linux изначально, то есть без перевода вызовов, что обеспечивает скорость, близкую к исходной. Для этого требуется сотрудничество Wine и Mesa.
    • VK9 - стремится разрешить запуск приложений Windows Direct3D 9 с помощью Vulkan.

    Связанные инструменты

    D3DX

    Direct3D поставляется с D3DX,библиотекой инструментов, предназначенных для выполнения общих математических вычислений с векторами, матрицами и цветами, вычислением матриц взгляда и проекций, интерполяция сплайнами и несколько более сложных задач, таких как компиляция или сборка шейдеров, используемых для программирования трехмерной графики, хранение сжатой скелетной анимации и стеки матриц. Есть несколько функций, которые обеспечивают сложные операции над 3D сетками,такие как вычисление касательного пространства, упрощение сетки, предварительно вычисленный перенос яркости, оптимизация для удобства использования вершинного кеша и чередования, а также генераторы для трехмерных текстовых сеток.. 2D-функции включают классы для рисования линий в экранном пространстве, текста и спрайтов на основе систем частиц. Пространственные функции включают в себя различные процедуры пересечения, преобразование из / в барицентрическиекоординаты и ограничивающий прямоугольник / генераторы сфер. D3DX предоставляется в виде библиотеки динамической компоновки (DLL). D3DX устарел начиная с Windows 8 и не может использоваться в приложениях Магазина Windows.

    Некоторые функции, присутствующие в предыдущих версиях D3DX, были удалены в Direct3D 11 и теперь предоставляются как отдельные источники:

    • Windows SDK и Visual Studio
    • Большая часть математической библиотеки удалена. Microsoftрекомендует вместо этого использовать библиотеку DirectX Math.
    • Математика сферических гармоник была удалена и теперь распространяется как источник.
    • Платформа Effect была удалена и теперь распространяется как исходный код через CodePlex.
    • Интерфейс Mesh и функции геометрии были удалены и теперь распространяются как исходный код через CodePlex в библиотеке обработки геометрии DirectXMesh.
    • Функции текстуры были удалены и теперь распространяются как исходныйкод через CodePlex под DirectXTex библиотека обработки текстур.
    • Общие помощники были удалены и теперь распространяются как исходный код через CodePlex в рамках проекта DirectX Tool Kit (DirectXTK).
    • Атлас текстуры isochart был удален и теперь распространяется как исходный код через CodePlex в рамках проекта UVAtlas.

    DXUT

    DXUT (также называемый образцом среды) - это уровень, построенный поверх Direct3D API. Платформа разработана, чтобы помочь программисту тратитьменьше времени на рутинные задачи, такие как создание окна, создание устройства, обработка сообщений Windows и обработка событий устройства. DXUT был удален с Windows SDK 8.0 и теперь распространяется как исходный код через CodePlex.

    См. Также

    Ссылки

    Внешние ссылки

    .

Последняя правка сделана 2021-05-17 08:13:44
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте