Структуры данных для рендеринга на основе тайлов

18

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

С точки зрения разработчика драйвера, какие структуры данных обычно используются для представления примитивных наборов, которые принадлежат плитке, и такие структуры динамически распределяются / изменяются в соответствии с геометрией, которая перекрывает конкретную плитку?

warrenm
источник
3
Действительно интересный вопрос, и хотя я подозреваю, что большинство мельчайших деталей - секретный соус, это может быть хорошей отправной точкой для всех, кто хочет провести исследование и написать резюме: blog.imgtec.com/powervr/…
Джон Калсбек

Ответы:

11

Этот пост в блоге, о котором упоминает Джон, является довольно хорошим началом (если я сам так скажу!), Но есть некоторые дополнительные детали, которые могут быть полезны.

Для архитектуры PowerVR промежуточная структура данных - по-разному называемая списком примитивов или буфером параметров (PB) - которая хранит данные для каждого фрагмента после того, как все затенение вершин и процесс разбиения на листы завершены, фактически в основном генерируются и управляются аппаратное обеспечение, а не драйвер.

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

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

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

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

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

Рысь
источник