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


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

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

Графический конвейер Direct3D 12

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

diagram illustrating direct3d 12 pipeline and state

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

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

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

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

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

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

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

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

Diagram that shows the Direct3D 12 compute pipeline.

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

Отправка работы в Direct3D 12