Этот пост в блоге, о котором упоминает Джон, является довольно хорошим началом (если я сам так скажу!), Но есть некоторые дополнительные детали, которые могут быть полезны.
Для архитектуры PowerVR промежуточная структура данных - по-разному называемая списком примитивов или буфером параметров (PB) - которая хранит данные для каждого фрагмента после того, как все затенение вершин и процесс разбиения на листы завершены, фактически в основном генерируются и управляются аппаратное обеспечение, а не драйвер.
Структуры ПБ в памяти физически разделены на две части. Во-первых, блоки преобразованных данных вершин, включая атрибуты вершин. Блоки сжимаются, и, как вы можете себе представить, они по большей части просто упаковываются и сжимают данные с плавающей запятой. Вторая структура в памяти - это данные листов, которые фактически представляют собой список списков.
Список верхнего уровня в этой структуре данных называется областью, и он может кодировать набор плиток, а не одну плитку за раз, для данного примитивного блока. Таким образом, область - это набор положений экранных плиток, состояний листов, а затем список сжатых блоков, которые содержат геометрию в этой области. Регионы - это то, над чем работает растеризатор, и вы можете себе представить, что пустые тайлы просто пропускаются автоматически, хотя в некоторых случаях у растризатора есть веская причина посещать пустые регионы.
Память, используемая графическим процессором для PB, динамически распределяется во всех современных реализациях PowerVR. Указатель на эту память предоставляется драйвером, и драйвер с помощью графического процессора изменит его размер по мере необходимости. Этот механизм является компромиссом между необходимостью часто перераспределять и минимизировать количество выделенного пространства PB.
Современные графические процессоры изо всех сил стараются свести к минимуму косвенность памяти, но ходить по PB, чтобы обеспечить стадию растеризации, - один из тех случаев, когда это действительно сложно, и другого выбора нет. К счастью, погоня за указателями оборачивает большие блоки, которые хорошо кэшируются и передаются в ядро.
Другие архитектуры не работают точно так же, как PowerVR, потому что отчасти причина, по которой PB используется в нашей архитектуре, состоит в том, чтобы помочь реализовать концепцию полностью отложенного затенения пикселей, которую мы реализуем, но общая концепция применима ко всем другим тайлерам в мобильное пространство, которое я знаю.