О значении glInvalidateFramebuffer - PullRequest
0 голосов
/ 24 января 2020

У меня есть вопрос об общем использовании glInvalidateFramebuffer:

Насколько я знаю, цель glInvalidateFramebuffer - «пропустить хранилище содержимого кадрового буфера, которое больше не нужно». Его основное предназначение для gpus на основе плиток - избавиться от глубины и содержимого трафарета, если после рендеринга нужен только цвет. Я не понимаю, зачем это нужно. Насколько я знаю, если я рендеринг в FBO, то все эти данные хранятся в этом FBO. Теперь, если я делаю что-то только с содержимым цвета или ничего с этим FBO в последующем розыгрыше, почему вообще доступны данные глубины / трафарета? Предположительно он где-то хранится и потребляет пропускную способность, но, насколько я могу судить, он уже находится в памяти GPU FBO в результате рендеринга, так когда же произойдет эта предполагаемая дорогостоящая дополнительная операция хранилища?

Предположительно, есть дорогостоящие этапы сохранения для вложений FBO, но зачем они нужны, если в результате рендеринга данные уже находятся в памяти Gpu?

С уважением

1 Ответ

0 голосов
/ 24 января 2020

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

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

Я написал дольше Если вам нужна более подробная информация об этом здесь:

https://developer.arm.com/solutions/graphics/developer-guides/understanding-render-passes/single-view

Для графических процессоров, не основанных на тайлах, основной вариант использования, кажется, использует его как более низкий стоимость версии clear в начале прохода рендеринга, если вы на самом деле не заботитесь о начальном цвете. Скорее всего, использование его в конце прохода рендеринга мало что даст (но это также не должно повредить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...