Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Цели повторного использования работы по отрисовке и многопоточности потребовали фундаментальных изменений в том, как приложения Direct3D подают данные для отрисовки на GPU. В Direct3D 12 процесс отправки отрисовки отличается от предыдущих версий тремя важными способами:
- Устранение немедленного контекста. Это обеспечивает многопоточное использование.
- Теперь приложения могут владеть тем, как вызовы отрисовки группируются в рабочие элементы графической обработки (GPU). Это позволяет повторно использовать.
- Приложения теперь явно контролируют процесс отправки задач на GPU. Это включает элементы 1 и 2.
- удаление непосредственного контекста
- группирование рабочих элементов GPU
- отправка заданий на GPU
- связанные темы
Удаление немедленного контекста
Наибольшее изменение с Microsoft Direct3D 11 на Microsoft Direct3D 12 заключается в том, что с устройством больше не связан единый основной контекст. Вместо этого приложения создают списки команд, где можно вызывать традиционные API для отрисовки. Список команд выглядит аналогично методу отрисовки приложения Direct3D 11, использующее непосредственный контекст, в котором он содержит вызовы, которые рисуют примитивы или изменяют состояние отрисовки. Как и непосредственные контексты, каждый список команд не обладает возможностью свободного потокового выполнения; однако можно одновременно записывать несколько списков команд, что позволяет использовать преимущества современных многоядерных процессоров.
Списки команд обычно выполняются один раз. Однако список команд можно выполнять несколько раз, если приложение гарантирует, что предыдущие выполнения завершены перед отправкой новых выполнений. Дополнительные сведения о синхронизации списков команд см. в разделе Выполнение и синхронизация списков команд.
Группирование рабочих элементов GPU
Помимо списков команд Direct3D 12 использует преимущества функциональных возможностей, присутствующих во всем оборудовании сегодня, добавив второй уровень списков команд, которые называются пакетами. Чтобы отличить эти два типа, списки команд первого уровня можно называть прямыми списками команд. Цель пакетов — разрешить приложениям группировать небольшое количество команд API для последующего повторного выполнения из прямых списков команд. Во время создания пакета драйвер будет выполнять столько предварительной обработки, сколько это возможно, чтобы повысить эффективность последующего выполнения. Затем пакеты можно выполнять из нескольких списков команд и несколько раз в одном списке команд.
Повторное использование пакетов — это большой драйвер повышения эффективности с одним потоком ЦП. Так как пакеты предварительно обрабатываются и могут отправляться несколько раз, существуют определенные ограничения на то, какие операции можно выполнять в пакете. Дополнительные сведения см. в разделе Создание и запись списков команд и пакетов.
Отправка задач на GPU
Чтобы выполнить работу с GPU, приложение должно явно отправить список команд в очередь команд, связанную с устройством Direct3D. Прямой список команд можно отправить для выполнения несколько раз, но приложение отвечает за то, что прямой список команд завершил выполнение на GPU перед его повторной отправкой. Пакеты не имеют ограничений параллельного использования и могут выполняться несколько раз в нескольких списках команд, но пакеты нельзя отправлять непосредственно в очередь команд для выполнения.
Любой поток может отправлять список команд в любую очередь команд в любое время, и среда выполнения автоматически сериализует отправку списка команд в очереди команд при сохранении порядка отправки.
Связанные разделы
- отправка Work в Direct3D 12