Для чего нужен directx 12 для windows

DX12

DirectX 12 — это особый компонент, обеспечивающий слаженную работу ОС и других приложений, в основном игр, с драйверами видеокарты.

Если вы регулярно следили за нашей серией материалов, связанных с новой Windows 10, вы, вероятно, заметили, что не редко в них упоминался DirectX 12. Это не случайно – с того момента, когда Microsoft заговорила о следующей версии операционной системы, компания не раз подчеркивала центральную роль, отведенную в ней последнему DirectX. Почему это так важно для вас, как пользователя, и какие улучшения принесет новая версия графического интерфейса с предстоящей Windows 10? Сегодня мы постараемся кратко ответить на эти вопросы.

Немного предыстории

Хотя он часто воспринимается как неотъемлемая часть каждой Windows, на самом деле впервые DirectX появился во втором пакете обновления для Windows 95. Он представляет собой комплексный набор различных модулей, объединенных под общим названием «интерфейс прикладного программирования» (application programming interface или API). Каждый из них выполняет многочисленные и разнообразные функции, но их главная цель заключается в обеспечении прямого доступа для различных мультимедийных и видеопрограмм (в основном игры, конечно) к аппаратной части компьютерной системы, работающей под управлением Windows.

До появления первой версии DirectX (которая носила серийный номер 2.0а) с Windows 95 Service Release 2, запуск и выполнение подобных приложений (игр) был громоздким и сложным процессом. Чтобы получить прямой доступ к аппаратному обеспечению, программа обращалась к DOS – предшественник Windows без графического интерфейса. Это был, мягко говоря, неэффективный механизм использования компонентов, таких как оперативная память, видео и звуковая карта и т.д.

С появлением Windows 95 Microsoft решила, что пора открыть новую страницу в своей истории. Компания осознала, что для того чтобы сделать новую операционную систему популярной среди обычных пользователей и особенно среди геймеров, одна должна предложить более эффективную рабочую среду для работы игровых тайтлов.

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

В начале принятие нового API пошло сравнительно медленно, особенно на фоне достаточно сильной конкуренции со стороны появившегося несколькими годами ранее OpenGL. Постепенно, однако, DirectX становился все лучше и лучше, и сегодня практически в одиночку доминирует в мире компьютерных видеоигр – по крайней мере, на платформе Windows.

Счастливый номер 12

DirectX 12

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

Правда в том, что все последнее десятилетие – с момента появления версии 10, Microsoft в основном «лежала на старых лаврах», если говорить о DirectX. Доминирующее положение интерфейса (и Windows в частности) в сегменте PC сделало компанию немного ленивой, и в результате большинство улучшений в версиях 10 и 11 были скорее эволюционными, чем революционными. Каждая из этих версий получила промежуточные обновления, которые добавили относительно небольшие оптимизации и новые, но не особенно впечатляющие возможности.

В отличие от них версия 12 является большим, решительным шагом вперед не только для DirectX в частности, но и для Microsoft в целом.

Поскольку Windows 10 будет единой платформой, работающей на смартфонах, планшетах, ноутбуках, настольных компьютерах и игровых консолях (Xbox One), появление DirectX 12 отразится на гораздо более широком спектре аппаратных устройств.

Владельцам Xbox One, например, новый интерфейс обещает ускорение возможностей рендеринга и, следовательно, более красивые на вид игры. Более того, в Microsoft надеются, что переход к DirectX 12 уничтожит превосходство их главного конкурента – консоли Sony PlayStation 4, которая в настоящее время предлагает более высокую вычислительную мощность, чем Xbox One. Например, новый API позволит разработчикам игр получить более быстрый доступ к высокопроизводительному ESRAM буферу Xbox, а это в свою очередь приведет к росту количества кадров в секунду.

DirectX 12 обещает и ускорение приборной панели Xbox One, как и полноценную поддержку 4К видео.

Новая жизнь для старых компьютеров

Windows-10-Gaming_thumb.png

Другое очень интересное обещание, связанное с DirectX 12, звучит так: оптимизация. Microsoft говорит, что только с обновлением до Windows 10 (и DirectX соответственно) мультимедийная (т.е. игровая) производительность вашего компьютера может увеличиться почти в два раза. А предварительные тесты PCWord показали, что рост может быть даже больше.

За счет чего можно достичь аналогичного скачка в производительности без замены аппаратных средств? Все очень просто – за счет полноценного использования ресурсов, которым располагает компьютер.

Сегодня практически все актуальные компьютеры, будь то мобильные или настольные, рассчитывают на процессор с более чем одним вычислительным ядром. Более того – в современных графических процессорах количество ядер измеряется тысячами.

Возвращаясь в прошлое, когда Intel закончила «войну за мегагерцы» и приняла концепцию повышения производительности посредством параллелизма, т.е. путем разделения операций/расчетов между двумя и более процессорными ядрами, тогдашнее программное обеспечение было не готового к такому гигантскому скачку вперед.

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

Поэтому замена одноядерного на двух- или четырехъядерный процессор, несомненно, приводила к росту производительности, но не так драматично, как ожидали пользователи.

Одна из основных задач нового DirectX 12 как раз таки и заключается в том, чтобы позволить играм по максимуму использовать все доступные ядра процессора и нагружать их на полную мощность. Эффект от такой оптимизации мягко говоря впечатляет – результаты в популярном тесте 3D Mark показывают 10-15-кратное увеличение производительности при переходе от DirectX 11 к DirectX 12!

DX12 HW EFficiency

Тем не менее, это еще не все. Софтверный гигант обещает рост производительности не только для мощных десктопных систем, но и для более слабых устройств, таких как портативные компьютеры и планшеты с Windows.

Разумеется, это не означает, что они чудесным образом превратятся в полноценную альтернативу настольному игровому PC, но благодаря Windows 10 и DirectX 12 они предложат более гладкую и качественную графику.

Новый интерфейс обеспечит и гораздо более эффективный алгоритм распределения задач между интегрированной и дискретной графикой – функция, подобная той, которую предлагает нашумевшая несколько лет назад технология Virtu от компании Lucid.

И наконец – DirectX 12 подготовит Windows для нового мира разрешения 4К, которое мы надеемся, закрепится в мире ПК в ближайшие несколько лет.

Бесплатно скачать DirectX 12 можно с официального сайта.

Отличного Вам дня!

На чтение 6 мин Просмотров 5.2к. Опубликовано

Каждый геймер хоть раз сталкивался с проблемами воспроизведения графики и звука в играх, и неизбежно приходил к необходимости установки или обновления утилит для слаженной работы игр и драйверов видеокарты. Для операционных систем Microsoft также разработан набор таких компонентов — DirectX.

Содержание

  1. Что такое DirectX 12
  2. Как определить текущую версию DirectX.
  3. Как установить софт
  4. Почему на компьютере может быть по-прежнему версия DirectX 11 или 10, несмотря на обновления
  5. Поддерживаемые графические процессоры
  6. Совместимость с видеокартами
  7. Как удалить DX12

Что такое DirectX 12

DirectX 12 (DX12 или Директ Икс 12) – версия утилиты, разработанная специально для ОС Windows 10, которая способна задействовать мощность вашего компьютера в полную силу. Благодаря улучшению производительности мультимедийных задач, пользователь наблюдает качество компьютерных игр так, как и было задумано разработчиком: быстрая смена кадров, реалистичные визуальные эффекты, классный звук, впечатляющая графика, в том числе в 3D.DirectX 12

DX12 революционно отличается от всех предыдущих версий DirectX. Последняя версия утилиты ускоряет работу процессора даже в режиме многозадачности. Рендеринг работает без зависаний с такой частотой смены кадров, что воссоздается полное ощущение реальности при должной прорисовке картинки. За этим стоят 2 возможности DX12, которых раньше не было. Многопоточность при записи команд в буфер, а также асинхронные шейдеры помогают видеокарте одновременно работать над командами GPGPU и инструкциями рендеринга.DX11 vs DX12

В DX12 также добавлена технология Tiled Resources. Со слов производителя, она дает «беспрецедентную детализацию», так как будет подгружать текстуры для рендеринга только в тот момент, когда взгляд игрока будет направлен в их сторону. Это разгрузит память и поддержит производительность на высокой скорости. Ощущение реальности пространства добавит трассировка лучей в реальном времени, которая визуализирует угол падения освещения.

Как определить текущую версию DirectX.

Узнать, какая версия DX используется сейчас ОС Windows 10, поможет инструмент DxDiag. Он раскроет всю нужную информацию о драйверах и компонентах, доступных для пользования. Для этого нужно:

  1. В поисковой строчке меню «Пуск» введите dxdiag, затем нажмите клавишу «Enter»;как узнать версию dx
  2. В поисковой выдаче кликните на строчку dxdiag;
  3. Для вас будет сформирован отчет обо всех компонентах DX, а в нижней строке будет указана активированная версия.dxdiag

Для более ранних версий Windows принцип действий схож.

Как установить софт

Если у вас установлено автоматическое обновление Windows, а программная платформа NET Framework работает корректно, то у вас все компоненты DirectX уже установлены, а следующие обновления версий будут происходить автоматически. Если в вашей ситуации необходимо установить вручную DX12, то сделать это можно по следующей схеме:

  1. Для 32 или 64 разрядной ОС Windows 10 скачиваем программное оборудование по ссылке на официальном сайте Microsoft:

 https://www.microsoft.com/RU-RU/DOWNLOAD/confirmation.aspx?id=35 

  1. Нажимаем кнопку «Загрузки» в правом верхнем углу страницы браузера;
  2. Для запуска установки компонентов программы открываем файл «dxwebsetup.exe»;
  3. Во время установки действуем по запросам диалогового окна: соглашаемся с пользовательскими условиями и продолжаем установку кнопкой «Далее»;установка DX12
  4. Приложение или устанавливается с нуля, или обновляет текущую версию.

При установке может загрузится более старая версия, чем DirectX 12. Это говорит о том, что модули вашего ПК не поддерживают обновления утилиты. Если ваша цель конкретно DX12, то вам придется поменять процессор и видеокарту на более мощные.

Почему на компьютере может быть по-прежнему версия DirectX 11 или 10, несмотря на обновления

Интерфейс прикладного программирования (application programming interface или API) обеспечивает прямой доступ мультимедийных приложений к необходимому им оборудованию, чем ускоряет сам процесс игры. Сегодня этот API от Microsoft доминирует в мире компьютерных видеоигр для Windows, а разработчики учитывают ресурсы DX12 при разработке своих игр. О популярности утилиты говорит сотрудничество с Microsoft крупнейших производителей видеокарт, например, Nvidia и AMD. Также параметры своих процессоров под требования нового API подгоняют такие гиганты видеографики как Intel и Qualcomm.видеокарты поддерживающие dx12

Windows 10 с DirectX 12 используется для работы многих гаджетов: стационарные компьютеры, ноутбуки, планшеты, а также смартфоны. С этой утилитой работает и геймпад Xbox One. Но если на вашем ПК стоит оборудование, не подходящее под требования новых компонентов Майкрософтского API, то установить DX12 не удастся, у вас по-прежнему будет более старая версия. Проверьте, подходит ли ваш процессор и видеокарта под стандарты нового DX12:

Поддерживаемые графические процессоры

Intel:Поддерживаемые графические процессоры Intel

  • Core i3, i5, i7;
  • Haswell;
  • Broadwell;
  • Skylake;
  • Kaby Lake;
  • Coffee Lake;
  • Cannon Lake.

Все мобильные процессоры Qualcomm.

Совместимость с видеокартами

Nvidia:

  • GeForce: 400, 500, 600, 700, 800, 900, 1000, 2000 – серии;
  • GTX Titan.видеокарты поддерживающие dx12

AMD:

    • Radeon: HD 7000, 7000M, 8000, 8000M, R5 M240, R7 M200, R7, R9, RX 460-580, Vega Frontier Edition, RX Vega 56 и 64;
    • Ryzen: 2000G, 2000G PRO, а также мобильный Ryzen Mobile 1000, 1000 PRO, 2000, 2000 PRO;
    • Kaveri и Godavari: A4, A6, A6 PRO, A8, A8 PRO, A10, A10 PRO;
    • Mullins: E1, A4, A10 из серии Micro-6000;
    • Beema: E1, E2, A4, A6, A8.

Если в этом списке не оказалось вашей модели процессора и видеокарты – не отчаивайтесь. Попробуйте поискать информацию о совместимости на сайте разработчика вашего оборудования. Представленный список не исчерпывающий и приводит только самые распространенные модели.

Как удалить DX12

Если при запуске игр или других приложений, обслуживанием которых занимается DirectX, возникает ошибка, то виной всему скорее всего служит повреждение библиотеки. Обычно обновление программного обеспечения решает эту проблему. Но если обновление не дало результата, приходится применять более радикальный путь – удаление и новая установка.Как удалить DX12

С каждым годом набор компонентов API от Майкрософт увеличивается, ровно как и количество мультимедийных приложений. Чтобы пользователь нечаянно не нарушил стройную работу Windows, DirectX устанавливается вместе с операционной системой. Поэтому удалить DX12 с компьютера обычным способом через панель управления «Удалить или изменить программу» нельзя. Но есть и другой вариант.

  1. Для начала создайте точку восстановления. Если что-то пойдет не так, всегда можно вернуться к первоначальной версии.
  2. Скачиваем веб-установщик библиотек DirectX. Обращаем ваше внимание, что во время инсталляции будет установлена последняя поддерживаемая вашим оборудованием версия. Она включает все компоненты предыдущих вариаций, так что игры, требующие более старых изданий DX, будут работать.
  3. Скачиваем программу-деинсталлятор для DX. Например, DirectX Eradictor, DirectX Killer или DirectX Happy Uninstall.
  4. Отключаем Интернет, чтобы система не запустила автоматическое обновление.
  5. Удаляем компоненты API с помощью деинсталлятора, после чего обязательно перезапускаем систему.
  6. Устанавливаем ранее скаченный файл «dxwebsetup.exe» и еще раз перезагружаем компьютер.

После манипуляций по этой схеме проблемы с запуском игр должны решиться. Если ничего не изменилось, то возможно нужная игра требует более высокую версию DX, чем может потянуть ваш компьютер. О требованиях приложения можно почитать в магазине для скачки ПО в разделе «Описание».DX11vs DX12

Ели вы настоящий ценитель качественных игр, то без DX12 не обойтись. Разработчики Майкрософт постарались и совершили реальный прорыв, открыв для создателей игр новые возможности. Установив последнюю версию DX12, вы почувствуете существенную разницу в прорисовке деталей и качестве визуальных эффектов даже на одном и том же оборудовании.

Время на прочтение
10 мин

Количество просмотров 12K

Компьютерная графика — обширная и быстроразвивающаяся дисциплина. С каждым годом интерфейсы прикладного программирования становятся более гибкими, что позволяет на их основе реализовывать более сложные алгоритмы формирования и обработки изображений. Однако возможности интерактивной графики не достигли уровня пакетов 3d-моделирования и визуализации. Все это подталкивает к активным исследованиям в данной области.

image

DirectX 12 — компонент интерфейса программирования высокопроизводительной графики. Основные цели нового интерфейса — снижение CPU-оверхеда драйвера, понижение уровня абстрагирования оборудования, возможность объединения графических карт на уровне API (до этого существовали только vender-specific решения CrossFireX, NVIDIA SLI). Официально выпущен Microsoft в июле 2015.

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

В ней мы рассмотрим следующие темы:

  • Окружение
  • Краткое описание графического пайплайна
  • Новые возможности DirectX 12
    1. Состояния
    2. Команды
    3. Синхронизация
    4. Прикрепление ресурсов

Окружение

DirectX 12 является частью Windows SDK в Windows 10. В качестве IDE используем Visual Studio, язык программирования C++. Для работы с DirectX, необходимо подключить хедеры d3d12.h dxgi1_6.h и библиотеки d3d12.lib, dxguid.lib, dxgi.lib, d3dcompiler.lib. Все это лежит в стандартных каталогах Windows SDK. Так же распространяется «D3D12 Helper Library» в виде одного заголовочного файла d3dx12.h, она позволяет сократить количество boilerplate кода. Его можно просто скачать по адресу d3dx12.h и вложить в проект.

Краткое описание графического пайплайна

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

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

Преобразование вершин

Каждая вершина имеет определенный набор атрибутов таких, как позиция, цвет, текстурные координаты, вектор нормали или все векторы из касательного пространства и, возможно, некоторые другие. Трансформация вершин — это первая стадия графического конвейера. На этом этапе входными данными являются атрибуты конкретной вершины, над которыми производятся математические преобразования. Эти операции включают трансформацию позиции вершины, генерацию и преобразование текстурных координат, расчет освещения для каждой отдельной вершины, а также любые другие операции, которые необходимо выполнить на уровне вершин. Каждая вершина обрабатывается параллельно с другими вершинами на доступных ядрах графического ускорителя. Основной результат вершинной программы — преобразовать координаты из модельного пространства в специальное пространство отсечения (clip space).

Построение примитивов и растеризация

Входные данные этого этапа — трансформированные вершины, а также информация о их соединении. Из этих данных осуществляется сборка геометрических примитивов. В результате получается последовательность треугольников, линий или точек. Над этими примитивами может производиться отсечение плоскостям, определенными в программе. Также на этом этапе могут быть отброшены задние треугольники объектов. Определяются эти треугольники по направлению обхода вершин (по часовой стрелке или против). Какое направление обхода соответствует заднему треугольнику задается через графическое API. Полигоны, прошедшие отсечение, могут растеризироваться.

Текстурирование и окрашивание

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

Пофрагментные операции

На этом этапе проводится ряд пофрагментных тестов, таких как тест отсечения (scissor test), тест трафарета (stencil test) и тест глубины (depth test). Эти тесты определяют конечный вид, цвет и глубину фрагмента перед обновлением экранного буфера. Если какой-либо тест проходит с ошибкой, то фрагмент не обновляется. После тестов выполняется операция смешивания, которая комбинирует финальный цвет фрагмента с текущим цветом пиксела, а итоговый результат записывается в экранный буфер. Операция смешивания выполняется на этом этапе, поскольку стадия текстурирования и окрашивания не имеют доступа к экранному буферу.

Более детальное устройство конвейера можно посмотреть в спецификации DirectX 11 (документ по DiretcX 12 затрагивает лишь изменения с предыдущей версией)

Новые возможности DirectX 12

Мы переходим от теоретической части непосредственно к описанию конкретных возможностей DirectX 12.

Состояния

В 11 версии программистам известны различные функции изменения состояний графического ускорителя: RSSetState(), OMSetDepthStencilState(), OMSetBlendState(). Оказалось, что такой подход плохо ложится на оборудование. В конечном итоге драйвер устанавливает адаптеру одно монолитное состояние, а отдельные вызовы или некоторые комбинации состояний могли приводить к непредсказуемым задержкам со стороны драйвера. В новой версии инженеры переосмыслили этот подход и исключили атомарное изменений состояний, теперь они объединены в одно — PSO (Pipeline State Object). Такое нововведение кажется более удобным со стороны пользователя: теперь не нужно беспокоиться о «висячих состояниях», которые остались с прошлых проходов. Более того, для лучшей эффективности установки, теперь дополнительно требуется передавать информацию о всех прикрепленных ресурсах в шейдер через Root Signature (об этом ниже).

Команды

В ранних версиях пользователи отправляли команды через так называемый immideate context. Под капотом создавались отложенные командные очереди и по мере заполнения отправлялись оборудованию. Необходимо отметить, что в DirectX 11 существует возможность создания deferred context. В DirectX 12 immideate context был исключен и deferred концепция стала основной. Теперь программист должен заполнить deferred command list, и в необходимый момент отправить его на исполнение.

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

Здесь же стоит упомянуть о ресурсах, которые прикреплены к конкретному командному листу. Теперь удаление ресурса, использующегося на GPU, ведет к непредсказуемым последствиям. Например, раньше легально было выполнить Release() для текстуры которая еще используются — драйвер автоматически отследит, когда ресурс перестанет использоваться и только после этого удалит его.

Синхронизация

Для возможности отслеживания работы GPU, DirectX 12 предоставляет концепцию fence, которая инкапсулирована объектом ID3D12Fence интерфейсом. Fence — это целое число, которое представляет выполненную работу GPU на текущий момент. Сначала происходит эмитинг следующего «свободного» значения, вызывая ID3D12CommandQueue::Signal() в командной очереди. Затем с помощью ID3D12Fence::SetEventOnCompletion(UINT64 Value, HANDLE hEvent) происходит ассоциирование значения с примитивом winapi event. Теперь поток с помощью WaitForSingleObject() над подготовленным event-ом может приостановить выполнение до момента выполнения всей работы, предшествующий контрольному значению. Как только вся работа на GPU выполнится, значение в fence обновится, вызов WaitForSingleObject() разблокируется и поток продолжит выполнение.

Прикрепление ресурсов

Биндинг ресурсов в шейдер — одна из самых запутанных тем современного DirectX.

Обзор

В DirectX 11 использовалась следующая модель биндинга: каждый ресурс устанавливался в шейдер соответствующим вызовом API. Например, для установки двух текстур (если не задумываться о семплерах) в 5 и 6 слоты пиксельного шейдера применялся следующий код:

ID3D11ShaderResourceView* srvs[] = { 
    texture1->GetShaderResourceView();
    texture2->GetShaderResourceView();
};
context->PSSetShaderResources(5, 2, srvs);

Где GetShaderResourceView() возвращает указатель на объект типа ID3D11ShaderResourceView.
В шейдере затем текстуры использовались так:

Texture2D texture1 : register(t5);
Texture2D texture2 : register(t6);

Такая система достаточно удобная со стороны программиста, но с точки зрения графического ускорителя нет. Допустим, нам необходимо прикрепить текстуру на чтение в шейдере. Как должна быть передана информация о текстуре? Если мы заглянем в документацию GCN ISA, найдем следующий параграф:

All vector memory operations use an image resource constant (T#) that is a 128- or 256-bit value in SGPRs. This constant is sent to the texture cache when the instruction is executed. This constant defines the address, data format, and characteristics of the surface in memory.

Это означает, что для того чтобы описать текстуру, нам нужен этот небольшой дескриптор (128 или 256-битный), который нужно поместить в любое место памяти. Если мы прочтем остальную часть документации, мы заметим, что этот же шаблон также используется для всех других типов ресурсов. Фактически, когда дело доходит до доступа к ресурсу, понятие «слот» бессмысленно. Графический адаптер оперирует дескрипторами: текстуры (T#), сэмплера (S#) или константы (V#). С Direct3D 12 эти дескрипторы, наконец, отображаются непосредственно на дескрипторы оборудования — некоторая память GPU.

Дескрипторы

Сейчас ресурсы не прикрепляются в графический пайплайн прямо через вызовы методов, прикрепление происходит опосредовано через дескрипторы. Дескриптор — небольшой кусочек памяти, который содержит информацию о ресурсе (GPU виртуальный адрес, и, например, количество мипов, формат). Множество дескрипторов хранятся в дескрипторной куче — это просто массив дескрипторов фиксированного размера. Дескрипторные кучи могут содержать информацию о разных типах ресурсов:

  • Constant buffer views (CBVs)
  • Unordered access views (UAVs)
  • Shader resource views (SRVs)
  • Samplers

CBVs, UAVs, SRVs могут содержаться в одной дескрипторной куче, а описания семплеров — в отдельной. Это разделение выражает тот факт, что семплеры в ускорителе обрабатываются отдельно.

Выше мы упомянули так называемые shader visible ресурсы. Соответственно, существуют non shader visible ресурсы:

  • Render Target Views (RTVs)
  • Depth Stencil Views (DSVs)
  • Stream Output Views (SOVs)

Такие views ресурсов предназначаются только для прикрепления ресурса в пайплан (но не для использования в шейдере), и поэтому их нужно создавать в отдельной non shader visible дескрипторной куче (это задается флагом D3D12_DESCRIPTOR_HEAP_FLAGS::D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE при создании кучи).

Есть еще одна группа view’s, для которых дескрипторы (и, соответственно, дескрипторная куча) не требуются:

  • Index Buffer View (IBV)
  • Vertex Buffer View (VBV)

Представлены типами D3D12_INDEX_BUFFER_VIEW и D3D12_VERTEX_BUFFER_VIEW соответственно. То есть описания индексных и вершинных буферов содержатся в указанных выше структурах и затем передаются напрямую в Pipeline State Object. Вся память в PSO автоматически версионируется драйвером.

Таким образом, теперь вместо создания множества объектов типа ID3D11…View, мы создаем дескрипторы в дескрипторной куче.

Root signature

Root signature — объект DirectX 12 API который задает соответствие лэйаута дескрипторов и данных в слоты шейдера. Это, в некотором смысле, действительно сигнатура шейдера только с точки зрения использования ресурсов. Root signature не содержит конкретных дескрипторов и данных, она лишь задает лэйаут (устройство) дескрипторов, которые биндятся уже позднее на этапе рендеринга.

Root signature состоит из массив записей, которые называются root parameter. Действительные данные root parameter устанавливаются в рантайме и называются root arguments. Меняя root argument, меняются данные которые читает шейдер. Root parameter бывают трех типов:

  • Root constants (1 DWORD == 32bit value)
  • Inline descriptors (так как 64-bit GPU virtual addresses, стоит 2 DWORDs каждый)
  • Таблица дескрипторов (1 DWORD)

Максимальный размер root signature — 64 DWORDs. Типы отсортированы по возрастанию уровня косвенности доступа ресурса в шейдере, но по убыванию возможностей.

Root constant это встроенное в root signature 32-битное значение, которое используется в шейдере как constant buffer. Предназначается для наиболее активно изменяющихся констант (например, MVP матрицы), но имеет жесткие ограничения на максимальный размер (всего поместится 4 матрицы). Так же такие данные доступны в шейдере с нулевым уровнем косвенности, и имеют более быстрый доступ чем все остальные способы. Полностью версионируются драйвером: их можно «установить и забыть».

Приложение может поместить дескрипторы напрямую в root signature во избежании хранения дескрипторов в куче дескрипторов — это второй способ inline descriptors. Пример таких данных — константа per object. Таким образом, не нужно беспокоиться о свободном месте в куче дескрипторов. Имеет первый уровень косвенности. Версионируется сам дескриптор (то есть описание ресурса), но ресурс который описывает этот дескриптор должен быть доступен до завершения его использования на GPU. Установка конкретных данных производится, например, методом ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView, в него передается индекс root parameter нашего inline descriptor и виртуальный адрес буфера.

Мы подошли к третьему, основному и универсальному способу прикрепления ресурсов. Таблица дескрипторов содержит массив descriptor range. Descriptor range — описание непрерывной цепочки дескрипторов определенного типа. Описание одной записи в таблицы дескрипторов проще показать кодом:

typedef enum D3D12_DESCRIPTOR_RANGE_TYPE
    {
        D3D12_DESCRIPTOR_RANGE_TYPE_SRV = 0,
        D3D12_DESCRIPTOR_RANGE_TYPE_UAV = ( D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_CBV = ( D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1 ) ,
        D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = ( D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1 ) 
    }   D3D12_DESCRIPTOR_RANGE_TYPE;

typedef struct D3D12_DESCRIPTOR_RANGE
    {
    D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
    UINT NumDescriptors;
    UINT BaseShaderRegister;
//...
    }   D3D12_DESCRIPTOR_RANGE;

Видим, что RangeType — указывает тип дескриптора, NumDescriptors — количество, BaseShaderRegister — номер регистра внутри шейдера. Остальные параметры служат для расширенной настройки и пока не будем их рассматривать. В рантайме дескрипторы устанавливаются методом ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable, в него передается индекс root parameter нашей таблицы дескрипторов и первый дескриптор. Все дескрипторы, указанные в описании таблицы дескрипторов, подхватываются автоматически. Из этого следует, что они должны располагаться непрерывно друг за другом в descriptor heap.

Заключение

Мы рассмотрели некоторые возможности DirectX 12. Если вам интересная данная тема или любая другая из области компьютерной графики, отписывайтесь в комментариях.

Ссылки:
https://docs.microsoft.com/en-us/windows/win32/direct3d12/directx-12-programming-guide
https://developer.nvidia.com/dx12-dos-and-donts
https://gpuopen.com/performance-root-signature-descriptor-sets/

Graylas

DirectX 12 уже здесь и вы наверняка предвкушаете улучшение графики в своих компьютерных играх. Сегодня Gameranx расскажет обо всем, что вам нужно знать о DirectX 12.


Все, что нужно знать о DirectX 12: «Это полное Г так как до сих пор ни одна игра на 12 не работает лучше чем на 11 «

  • пожаловаться
  • скопировать ссылку


Shadow-Death Ещё ни одной игры не вышло с изначальной разработкой на дир. 12. Времени то прошло только 1,5 года с релиза винды 10. А на разработку игры порой больше надо.

  • пожаловаться
  • скопировать ссылку


Ryazancev Ой ли, Forzamotorsport на DX12, разница очень даже большая, так что ждём оптимизации игр под DX12, PS: снижение загрузки проца явное.

  • пожаловаться
  • скопировать ссылку


В видосе косяк на косяке… 12 директ не убирает нагрузку с процессора раз 500 уже говорили…. он наоборот грузит физические ядра на 100%

  • пожаловаться
  • скопировать ссылку


Вообщем намек на то….Ребятки переходите на Виндовс 10….только там увидите Директ 12….проплаченый Чувачек….Майкрасовфт уже кричит , что не ожидала , что Народ не больно то побежит за Новой виндой , Все так-же сидят на старых 7-8…и даже XP … У Меня Друг сидел с пол года…недавно опять перешел на 7 ку …не впечатлила Она ЕГО…

  • пожаловаться
  • скопировать ссылку


Ничего нового не сказал. Это мы уже давно знаем. Так что видео ни о чём!

  • пожаловаться
  • скопировать ссылку


Собственно ничего нового, улучшения графики ждали только отбитые которые не умеют читать новости

&t=349s

  • пожаловаться
  • скопировать ссылку


мне на windows 7 x64 лучше! чем дранный маркентинговый DirectX 12. для продажи дырявой корявой системы windows 10! DirectX 12. это ЛОХОТРОН для графонодрочеров!

  • пожаловаться
  • скопировать ссылку


А как узнать какой директ стоит у меня?о_О

  • пожаловаться
  • скопировать ссылку


Pohmelovich Пуск-служебные-выполнить dxdiag

  • пожаловаться
  • скопировать ссылку


Pohmelovich Win+R dxdiag

  • пожаловаться
  • скопировать ссылку


HD 7950 3GB поддерживает 12 DirectX ???

  • пожаловаться
  • скопировать ссылку


VernonGT да с 7000 линейки карт

  • пожаловаться
  • скопировать ссылку


ДА ну, нормальное видео, хоть и действительно информацию многие знают, но мужик красавчик, смотрел с неким любопытством и интересом!))) Плюс тебе)

  • пожаловаться
  • скопировать ссылку


EvgenyDMT написал: AMD лучше NVIDIA под DX12

А кому он нужен DX12, в сегодняшнем исполнении. И никакого, практически преимущества DX 12 С АМД нет, по сравнению с НВидиа. Большое сравнение RX 480 vs GTX 1060 в Battlefield 1. DX11, DX12, 4K

  • пожаловаться
  • скопировать ссылку


Был уже этот ролик тута.

  • пожаловаться
  • скопировать ссылку


мда и ничего нового

  • пожаловаться
  • скопировать ссылку


Шел 2018 год. Derectx 12 по прежнему не актуален.

  • пожаловаться
  • скопировать ссылку


Все, что нужно знать о DirectX 12 ЕГО НЕТ, И ДАЖЕ ЕСЛИ ОН ЕСТЬ, ЕГО ВСЁРАВНО НЕТ!!!

  • пожаловаться
  • скопировать ссылку


«Все, что нужно знать о DirectX 12» Это то,что AMD лучше NVIDIA под DX12.

  • пожаловаться
  • скопировать ссылку

  • Для чего используется ярлык в windows
  • Для чего используется оболочка windows shell и из чего состоит
  • Для чего используется корзина windows
  • Для чего в ос microsoft windows служит панель управления кратко
  • Для установки драйвера для диска вставьте установочный носитель содержащий файлы драйвера windows 10