Поделиться через


Конвейеры и шейдеры с Direct3D 12

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

Конвейер графики Direct3D 12

На следующей схеме показан конвейер графики и состояние Direct3D 12.

схема , иллюстрирующая конвейер direct3d 12 и состояние

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

Обратите внимание на следующее при обращении к схеме состояния конвейера:

  • Таблицы дескриптора и кучи могут быть произвольно упорядочены: НА ТСВ, CBV и UAV можно ссылаться и выделять в любом порядке.
  • Некоторые операции конвейера настраиваются. Например, слияние выходных данных обычно работает на основе чтения и изменения записи с целевым объектом визуализации и представлениями элементов глубины. Однако конвейер можно настроить таким образом, чтобы любой из этих представлений был только для чтения или записи.
  • Статические примеры не являются частью корневых аргументов, так как они являются статическими.

Объекты состояния конвейера

Direct3D 12 представляет объект состояния конвейера (PSO). Вместо хранения и представления состояния конвейера в большом количестве высокоуровневых объектов состояния конвейера, состояния компонентов конвейера, таких как входной сборщик, растеризатор, шейдер пикселей и слияние выходных данных хранятся в PSO. PSO — это единый объект состояния конвейера, который неизменяем после создания. В настоящее время выбранный PSO можно быстро и динамически изменять, а оборудование и драйверы могут напрямую преобразовать PSO в собственные аппаратные инструкции и состояние, подготовив GPU для обработки графики. Чтобы применить PSO, оборудование копирует минимальное количество предварительно вычисляемого состояния непосредственно к регистрам оборудования. Это позволяет удалить издержки, вызванные драйвером графики, постоянно перекомпитировать состояние оборудования на основе всех применимых параметров отрисовки и конвейера. Результат значительно сокращает затраты на вызовы рисования, повышает производительность и больше вызовов рисования на кадр.

В настоящее время примененный PSO определяет и подключает все шейдеры, используемые в конвейере отрисовки. язык шейдеров высокого уровня Майкрософт (HLSL) предварительно компилируется в объекты шейдера, которые затем используются во время выполнения в качестве входных данных для объектов состояния конвейера. Дополнительные сведения о том, как функции PSO в графическом конвейере см. в разделе Управление состоянием графического конвейера в Direct3D 12.

Конвейер вычислений Direct3D 12

На следующей схеме показан конвейер вычислений и состояние Direct3D 12.

диаграмме с конвейером вычислений Direct3D 12.

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

Рабочая отправка в Direct3D 12