Разработчик (и) | 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-х годах, но в итоге была отменена.
В 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 для DirectX 4.0, выпуск которого планировалось выпустить в конце 1996 года, а был отменен, не планировалось.
В декабре 1996 года группа из Редмонда взялась за режим прямого режима Direct3D, команда RenderMorphics из Лондона продолжила работу в сохраненном режиме. Команда из Редмонда добавила DrawPrimitive API, которая устранила необходимость в приложении для буферов.., что делает Direct3 D бол ее похожим на API-интерфейсы рендеринга другого немедленного режима, такие как Gli de и OpenGL. Первая бета-версия DrawPrimitive была выпущена в феврале 1997 года, финальнаяверсия с DirectX 5.0 - в августе 1997 года.
Помимо более простого использования API немедленного режима, DirectX 5.0 добавил метод SetRenderTarget, который позволяет устройствам Direct3D записывать свои графические данные на различных поверхностях DirectDraw.
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 ).
DirectX 7.0 (выпущенный в сентябре 1999 г.) представил формат текстуры .dds и поддержку преобразования и освещения аппаратное ускорение (впервые на оборудовании ПК сNvidia GeForce 256 ), а также возможность буферы вершин в аппаратной памяти. Аппаратные буферы вершин собой первое существенное улучшение по сравнению с OpenGL в истории DirectX. Direct3D 7.0 также расширил поддержку DirectX для оборудования с функциями мультитекстурного конвейера с фиксированными функциями: хотя он и мощный, это было настолько сложно представить, что потребовалась новая модель программирования, раскрыть возможности затенения графического оборудования.
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.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).
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 Оборудование уровня должноподдерживать следующие функции: способность обрабатывать целые примитивы на новом этапе геометрического шейдера, возможность вывода сгенерированных конвейером данных вершин в память с использованием этапа вывода, мульти поддержки поддержкисэмплированного альфа - покрытия, обратного чтения глубины / трафарета или обратного чтения, когда он привязан к цели рендеринга, полная интеграция HLSL - все шейдеры Direct3D 10 написаны на HLSL и реализованы с использованием общего ядра шейдера, целочисленныхи побитовых операций шейдера, организации конвейера состояния организации 5 устанавливаемых объектов состояния, констант шейдера в буферах констант, увеличенного числа целей рендеринга, текстур и сэмплеры, без ограничения шейдера, новые типы ресурсов и форматы ресурсов, многоуровневые уровни выполнения среды / API, возможность выполнять замену и настройку каждого атериала с использованием геометрического шейдера,оцененное обобщение доступа к ресурсам с использованием представления устаревшееоборудование (заглавные буквы).
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.
В отличие от 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 был выпущен как часть 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 Функции включают в себя: поддержку модели шейдеров 5.0, динамическое связывание шейдеров, адресные ресурсы, дополнительные ресурсы, подпрограммы, создание экземпляров геометрии, покрытие в качестве пиксельного шейдера, программируемую интерполяцию входы, новые форматы сжатия текста (1новый формат LDR и 1 новый формат HDR), зажимы текстур для ограничения предварительной загрузки WDDM, требуют 8-битных субтекселей и субмип-точности при фильтрации текста, ограничения текста 16K, Gather4 (мульти поддержка- текстуры компонентов, поддержка программируемых смещений), DrawIndirect, консервативный oDepth, Depth Bias, адресный вывод потока, ограничение mipmap для каждого ресурса, окна просмотра с плавающей запятой, инструкции преобразования шейдеров, улучшенная многопоточность.
Впервые появился в версии Release Candidate, Windows 7 inteрешает первую выпущенную Direct3D 11. Обновление платформы для Windows Vista включает полнофункциональную среду выполнения Direct3D 11 и обновление DXGI 1.1, а также другие связанные компоненты из Windows 7, такие как WARP, Direct2D, DirectWrite и WIC.
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 поставлся с 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, выпущенный в июле 2015 года с Windows 10; он включает незначительные функции рендеринга из Direct3D 12, сохраняя при этом общую структуру API Direct3D 11.x. В Direct3D 11.3 представлена модель шейдеров 5.1, необязательное эталонное значение шаблона, заданное шейдером, типизированные неупорядоченные нагрузки представлений доступа, упорядоченные представлениярастеризатора (ROV), необязательный стандартный Swizzle, необязательное сопоставление текстур по умолчанию, консервативная растеризация (из трех уровней), необязательно унифицированный Доступ к памяти (UMA) и дополнительные мозаичные ресурсы (уровень 2) (мозаичные ресурсы тома).
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 - это компонент подсистемы API Microsoft DirectX. Целью Direct3D является абстрагирование связи между графическим приложением и драйверами графического оборудования. Он представлен как тонкий абстрактный слой на уровне, сопоставимом с GDI (см. Прилагаемую диаграмму). Direct3D содержит множество функций, которых не хватает GDI.
Direct3D - графический API режима прямого. Он низкоуровневый интерфейс для каждой 3D-функции видеокарты (преобразования, отсечения, освещения, материалов, текстур, буферизации Deep и т. Д.). Когда-то у него был компонент удерживаемого режима более высокого уровня, теперь он официально снят с производства.
Непосредственный режим Direct3D представляет три основныхабстракции: устройства, ресурсы и цепочки обмена (см. Прилагаемую диаграмму). За рендеринг 3D-сцены устройства. Они могут использовать различные возможности рендеринга. Например, устройство моно обеспечивает черно-белый рендеринг, а устройство RGB - цветное. Существует четыре типа устройств:
Каждое устройство содержит по крайней мере одну цепочку подкачки. Цепочкаподкачки состоит из одной или нескольких задних поверхностей буфер. Рендеринг происходит в обратном буфере .
. Более того, устройства содержат набор ресурсов; данные, используемые во время рендеринга. Каждый ресурс имеет четыре атрибута:
Direct3D реализует два режима отображения:
API Microsoft Direct3D 11 определить процесс для преобразования группы вершин, текстур, буферов, и вставьте в изображение на экране. Этот процесс описывается как конвейер рендеринга с отдельными этапами. Различные этапы конвейера Direct3D 11:
Этапы конвейера, показанные в круглой рамке, полностью программируются.Приложение, которое выполняет шейдерную программу, которая исполняется на этом этапе. Многие этапы необязательны и могут быть полностью отключены.
В 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 API,такие как новые модели шейдеров и этапы рендеринга, доступны только на оборудовании верхнего уровня.
Существуют отдельные возможности, указывающие на определенные операции с текстурами и форматами ресурсов; они указываются для каждого формата с использованием комбинации флагов возможностей.
Уровни функции используют определение в качестве разделителя (например, «12_1»), в то время как версию API / времени используют точку (например, «Direct3D 11.4»).
В 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.
Уровень функций | Обязательные аппаратные функции | Дополнительные функции |
---|---|---|
9_1 | Shader Model 2.0 (vs_2_0 / ps_2_0 ), текстуры 2K, текстуры объема, запросы событий, BC1-3 (также известный как DXTn), некоторые другие специальные возможности. | Н / Д |
9_2 | Запросы окклюзии, форматы с плавающей запятой (без смешивания), расширенные заглавные буквы, все функции 9_1. | |
9_3 | vs_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_1 | Shader 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 для 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.
Уровень | Обязательные функции | Дополнительные функции |
---|---|---|
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 (представление ресурсов шейдера) и БПЛА (представление неупорядоченного доступа), а также блоков дискретизации текстуры. Аппаратное обеспечение 3 позволяет полностью использовать ресурсы без привязки только размером кучи дескрипторов, в то время как оборудование уровня 1 и уровня 2 накладывает ограничения на количество дескрипторов («представлений»), которые могут быть одновременно.
Ограничения ресурсов | Уровень 1 | Уровень 2 | Уровень 3 |
---|---|---|---|
Дескрипторы в куче CBV / SRV / UAV | 1M | 1M | >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 Mobile является производным от Direct3D, но имеет меньший объем памяти . Windows CE обеспечивает поддержку Direct3D Mobile.
Существуют следующие альтернативные реализации Direct3D API. Они полезныдля платформ, отличных от Windows, и для оборудования без поддержки некоторых версий DX:
Direct3D поставляется с D3DX,библиотекой инструментов, предназначенных для выполнения общих математических вычислений с векторами, матрицами и цветами, вычислением матриц взгляда и проекций, интерполяция сплайнами и несколько более сложных задач, таких как компиляция или сборка шейдеров, используемых для программирования трехмерной графики, хранение сжатой скелетной анимации и стеки матриц. Есть несколько функций, которые обеспечивают сложные операции над 3D сетками,такие как вычисление касательного пространства, упрощение сетки, предварительно вычисленный перенос яркости, оптимизация для удобства использования вершинного кеша и чередования, а также генераторы для трехмерных текстовых сеток.. 2D-функции включают классы для рисования линий в экранном пространстве, текста и спрайтов на основе систем частиц. Пространственные функции включают в себя различные процедуры пересечения, преобразование из / в барицентрическиекоординаты и ограничивающий прямоугольник / генераторы сфер. D3DX предоставляется в виде библиотеки динамической компоновки (DLL). D3DX устарел начиная с Windows 8 и не может использоваться в приложениях Магазина Windows.
Некоторые функции, присутствующие в предыдущих версиях D3DX, были удалены в Direct3D 11 и теперь предоставляются как отдельные источники:
DXUT (также называемый образцом среды) - это уровень, построенный поверх Direct3D API. Платформа разработана, чтобы помочь программисту тратитьменьше времени на рутинные задачи, такие как создание окна, создание устройства, обработка сообщений Windows и обработка событий устройства. DXUT был удален с Windows SDK 8.0 и теперь распространяется как исходный код через CodePlex.
.