Каков современный эквивалент списков отображения?

9

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

Списки отображения были объявлены устаревшими в версии 3.1. Каков современный эквивалент API и предоставляет ли DirectX аналогичную функцию? Если такой функциональности больше нет, в чем смысл?

Жюльен Геро
источник

Ответы:

12

У Nvidia есть расширение для создания командных буферов в современном GL .

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

NVidia решила это, захватив все состояние и сбросив его после отправки:

1) Что мотивирует дизайн?

Основная цель - иметь возможность повторно использовать предварительно проверенные буферы команд. Другие API и предложения решают эту проблему с помощью различных воплощений списков команд или объектов состояния, но повторяющаяся проблема заключается в том, что взаимодействия между различными этапами конвейера предотвращают эту предварительную проверку и повторное использование. Эти взаимодействия часто зависят от аппаратного обеспечения (и отличаются от поставщика к поставщику или даже от поколения к поколению), и новые взаимодействия вводятся благодаря новым функциям, которые не представлялись, когда была предложена схема предварительной проверки.

Мы пытаемся решить эту проблему, имея монолитный объект состояния, который охватывает (почти) все состояние конвейера. Это должно предоставить достаточно информации для всех реализаций, чтобы выполнить любую необходимую перекрестную проверку. Мы пытаемся создать их таким образом, чтобы минимизировать использование нового API - поскольку мы хотим, чтобы ВСЕ состояние (включая любое добавленное в будущем), мы просто фиксируем его из текущего состояния контекста.

[...]

23) В каком состоянии остается состояние, которое изменяется токенами после вызова диспетчеризации?

РАЗРЕШЕНО: состояние сброшено.

(из расширенного текста, указанного выше)

Однако истинным преемником является функциональность буфера команд в DX12 и vulkan. Они также будут фиксировать все состояния рендеринга в один объект, который будет использоваться при создании и заполнении буфера команд. Расширение NVidia основано на этой архитектуре в результате участия NVidia в дизайне Vulkan.

чокнутый урод
источник