Direct3D - Direct3D

Direct3D
Разработчики) Microsoft
Первый выпуск 2 июня 1996 г . ; 25 лет назад ( 1996-06-02 )
Стабильный выпуск
12/29 июля 2015 г . ; 6 лет назад ( 2015-07-29 )
Операционная система Окна
Платформа x86 , ARM
Тип API трехмерной графики
Лицензия Проприетарный
Веб-сайт MSDN .microsoft .com / EN-US / библиотека / окна / рабочий стол / hh309466

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

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

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

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

Обзор

  • Direct3D 6.0 - Мультитекстурирование
  • Direct3D 7.0 - Аппаратное преобразование, отсечение и освещение (TCL / T & L)
  • Direct3D 8.0 - пиксельный шейдер 1.0 и вершинный шейдер 1.0
  • Direct3D 8.0a - пиксельный шейдер 1.1, пиксельный шейдер 1.2, пиксельный шейдер 1.3
  • Direct3D 8.1 - пиксельный шейдер 1.4 и вершинный шейдер 1.1
  • Direct3D 9.0 - Shader Model 2.0 (Pixel Shader 2.0 и Vertex Shader 2.0)
  • Direct3D 9.0b - пиксельный шейдер 2.0b
  • Direct3D 9.0c - Shader 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, Shader Model 4.1, Windows Graphics 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 года, пригласив Кёнджиана на борт для реализации движка 3D-графики для Windows 95 . Первая версия Direct3D, поставляемая в составе DirectX 2.0 (2 июня 1996 г.) и DirectX 3.0 (26 сентября 1996 г.).

Первоначально в Direct3D были реализованы API-интерфейсы 3D как для « сохраненного режима », так и для « немедленного режима ». Как и другие 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 , такие как 3dfx «s Glide .

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

Direct3D 4.0

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

Direct3D 5.0

В декабре 1996 года команда из Редмонда взялась за разработку Direct3D Immediate Mode, в то время как лондонская команда RenderMorphics продолжила работу над Retained Mode. Команда Redmond добавила DrawPrimitive API, который избавил приложения от необходимости создавать буферы выполнения, сделав Direct3D более похожим на другие API-интерфейсы рендеринга немедленного режима, такие как Glide и 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 и поддержку аппаратного ускорения преобразования и освещения (впервые доступный на оборудовании ПК с GeForce 256 от Nvidia ), а также возможность выделять буферы вершин в аппаратной памяти. Аппаратные буферы вершин представляют собой первое существенное улучшение по сравнению с OpenGL в истории DirectX. Direct3D 7.0 также расширил поддержку DirectX для оборудования с мультитекстурированием и представляет собой вершину функций многотекстурного конвейера с фиксированными функциями: несмотря на свою мощь, его было настолько сложно программировать, что потребовалась новая модель программирования, чтобы раскрыть возможности затенения графического оборудования.

Direct3D 8.0

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

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

Direct3D 9

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

Direct3D 9Ex [1]

Расширение, доступное только в Windows Vista и новее (7, 8, 8.1 и 10), под названием Direct3D 9Ex (ранее с версией 9.0L (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, первые игры, совместимые с Direct3D 10, по-прежнему обеспечивают пути рендеринга Direct3D 9. Примерами таких названий являются игры, изначально написанные для Direct3D 9 и портированные на Direct3D 10 после их выпуска, такие как Company of Heroes , или игры, изначально разработанные для Direct3D 9, с переоснащением Direct3D 10 на более позднем этапе разработки, такие как Hellgate: London или Crysis. . DirectX 10 SDK стал доступен в феврале 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 и Radeon HD 4000 от 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 г., на которой были запущены некоторые образцы DirectX 11 SDK.

Среда выполнения 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, таким как линейка микросхем PowerVR от Videologic.

Direct3D 11.0

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

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

Другими примечательными особенностями являются добавление двух новых алгоритмов сжатия текстур для более эффективной упаковки высококачественных и HDR / альфа-текстур, а также увеличенный кеш текстур .

Впервые появившаяся в версии Release Candidate , Windows 7 интегрирует первую выпущенную поддержку Direct3D 11. Platform Update для 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 и переключение на лету между Dire ct3D 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

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 (версия 1607) включает поддержку WDDM 2.1 и для формата UHDTV HDR10 ( ST 2084 ), а также поддержку переменной частоты обновления для приложений UWP.

Direct3D 12

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

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

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

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

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

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

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

Хотя привязка ресурсов в Direct3D 11 на данный момент довольно удобна для разработчиков, ее неэффективность означает, что некоторые современные аппаратные возможности используются в недостаточной степени. Когда игровому движку требовались ресурсы в DX11, ему приходилось каждый раз рисовать данные с нуля, что означало повторяющиеся процессы и ненужное использование. В Direct3D 12 куча дескрипторов и таблицы означают, что наиболее часто используемые ресурсы могут быть выделены разработчиками в таблицах, к которым графический процессор может быстро и легко получить доступ. Это может способствовать повышению производительности по сравнению с 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 (версия 1607), WDDM 2.1. Новые графические функции - это проверка границ глубины и программируемый MSAA.
  • Direct3D 12 версии 1709 - Direct3D в Windows 10 Fall Creators Update (версия 1709), выпущенном 17 октября 2017 г., включает улучшенную отладку.
  • Direct3D 12 версии 1809 - обновление Windows 10 за октябрь 2018 г. (версия 1809) обеспечивает поддержку DirectX Raytracing, поэтому графические процессоры могут использовать его API.
  • Direct3D 12 версии 1903 - Windows 10 May 2019 Update (версия 1903) обеспечивает поддержку DirectML .
  • Direct3D 12 версии 2004 - Windows 10 May 2020 Update (версия 2004) обеспечивает поддержку шейдеров сетки и усиления, обратной связи сэмплера, а также DirectX Raytracing Tier 1.1 и улучшения распределения памяти.

Архитектура

Абстрактный слой

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

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

Непосредственный режим 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. Вершинный шейдер : выполняет операции с одной вершиной за раз, такие как преобразования, скиннинг или освещение.
  3. Hull Shader : выполняет операции с наборами контрольных точек исправлений и генерирует дополнительные данные, известные как константы исправлений.
  4. Этап тесселяции : разделяет геометрию на части для создания представлений корпуса более высокого порядка.
  5. Шейдер домена : выполняет операции с вершинами, выводимыми на этапе тесселяции, почти так же, как вершинный шейдер.
  6. Геометрический шейдер : обрабатывает целые примитивы, такие как треугольники, точки или линии. Учитывая примитив, этот этап отбрасывает его или генерирует один или несколько новых примитивов.
  7. Потоковый вывод : может записывать в память результаты предыдущего этапа. Это полезно для рециркуляции данных обратно в конвейер.
  8. Растеризатор : преобразует примитивы в пиксели, передавая эти пиксели в пиксельный шейдер. Растеризатор также может выполнять другие задачи, такие как отсечение того, что не видно, или интерполяция данных вершин в данные для каждого пикселя.
  9. Пиксельный шейдер : определяет окончательный цвет пикселя, который будет записан в цель рендеринга, а также может вычислить значение глубины, которое будет записано в буфер глубины.
  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 отражают функции, представленные в Direct3D 11 и API и среда выполнения Direct3D 11.1, а уровни 12_0 и 12_1 соответствуют новым уровням функций, представленным в API Direct3D 12.

Уровни функций в Direct3D 11.4
Уровень характеристик Обязательные аппаратные функции Дополнительные особенности
9_1 Shader Model 2.0 ( vs_2_0/ ps_2_0), текстуры 2K, текстуры объема, запросы событий, BC1-3 (также известный как DXTn), некоторые другие специфические возможности. N / A
9_2 Запросы окклюзии, форматы с плавающей запятой (без смешивания), расширенные заглавные буквы, все функции 9_1.
9_3 vs_2_a/ ps_2_xс экземплярами и дополнительными ограничениями шейдеров, текстурами 4K, несколькими целями рендеринга (4 MRT), смешиванием с плавающей запятой (ограничено), всеми функциями 9_2.
10_0 Shader Model 4.0, геометрический шейдер, поток, альфа-покрытие, текстуры 8K, текстуры MSAA, двусторонний трафарет, общие виды целевой рендеринга, массивы текстур, BC4 / BC5, полная поддержка формата с плавающей запятой, все функции 9_3. Логические операции наложения, DirectCompute (CS 4.0 / 4.1), расширенные форматы пикселей.
10_1 Shader Model 4.1, массивы кубической карты, расширенный MSAA, все функции 10_0.
11_0 Shader Model 5.0 / 5.1, шейдеры корпуса и домена, DirectCompute (CS 5.0 / 5.1), текстуры 16K, BC6H / BC7, расширенные форматы пикселей, все функции 10_1. Рендеринг только UAV с принудительным подсчетом выборок, постоянным смещением буфера и частичным обновлением, операциями с плавающей запятой двойной точности (64-битные), минимальной точностью с плавающей запятой (10- или 16-битной ), минимальной / максимальной фильтрацией.
11_1 Логические операции смешивания, независимая от цели растеризация, беспилотные летательные аппараты на каждом этапе конвейера с увеличенным количеством слотов, рендеринг только беспилотных летательных аппаратов с принудительным подсчетом выборок, постоянное смещение буфера и частичные обновления, все функции 11_0. Тайловые ресурсы (четыре уровня), консервативная растеризация (три уровня), значение ссылки на шаблон из Pixel Shader, упорядоченные представления растеризатора, типизированные загрузки БПЛА для дополнительных форматов.
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. Модель шейдеров 6.0 была выпущена вместе с обновлением Windows 10 Creators Update и требует юбилейного обновления Windows 10 и драйверов WDDM 2.1.

Direct3D 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_2 DirectX 12 Ultimate : шейдерная модель 6.5, уровень трассировки лучей 1.1, сеточные шейдеры, шейдинг с переменной скоростью, обратная связь сэмплера, уровень привязки ресурсов 3, уровень мозаичных ресурсов 3 (Texture3D), уровень консервативной растеризации 3, 40-битное виртуальное адресное пространство.

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

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

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

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

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

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

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

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

Direct3D для мобильных устройств

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 .

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

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.

Смотрите также

использованная литература

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