Как графические процессоры PowerVR обеспечивают буфер глубины?

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

Тем не менее, я могу получить доступ к буферу глубины на моем устройстве iOS. В частности, я могу использовать внеэкранный объект Frame Buffer, чтобы превратить буфер глубины в цветную текстуру и отобразить его.

Если архитектура PowerVR не использует буфер глубины, как я могу рендерить буфер глубины?

3 ответа

Решение

Это правда, что рендереру на основе плиток для работы не нужен традиционный буфер глубины.

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

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

Metal API легко предоставляет эту функциональность, позволяя установить для storeAction буфера глубины значение "пофиг", что означает, что он не будет резервировать полученные значения глубины в основную память.

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

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

На самом деле невозможно реализовать OpenGL на "чистом" отложенном рендерере на основе плиток, потому что буфер глубины должен быть читаемым. Также обычно неэффективно делать запись в буфер глубины только потому, что буфер цвета доступен для чтения в любое время (либо через glReadPixels или неявно, в зависимости от того, когда вы представляете буфер кадра в соответствии с механизмами вашей ОС), то есть аппаратному оборудованию может потребоваться нарисовать сцену, а затем нарисовать на ней больше.

PowerVR использует буфер глубины, но не так, как обычный графический процессор (рендеринг в непосредственном режиме)

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

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

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

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

п.с.

Просто добавлю к ответу Томми: основными преимуществами различного рендеринга на основе плиток являются:

  1. Поскольку фрагменты обрабатываются фрагментом одновременно, все считывание и запись в буфер цвета / глубины / трафарета выполняются из быстрой встроенной памяти. В то время как цветовой буфер по-прежнему должен считываться / записываться в системную память на каждый фрагмент, во многих случаях буферы глубины и трафарета должны записываться в системную память только в том случае, если это требуется для последующего использования (например, в вашем случае пользователя). Трафик системной памяти является значительным источником энергопотребления... так что вы можете видеть, как он снижает энергопотребление.
  2. Дифференцированный рендеринг позволяет удалять скрытые поверхности. Меньше визуализированных треугольников означает меньше обработки фрагментов, значит меньше доступа к текстурной памяти.
Другие вопросы по тегам