Почему важно иметь цели рендеринга с одинаковым битовым размером?

10

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

Большая часть GBuffer, который я видел, использовала один и тот же битовый размер для каждой цели рендеринга, что также часто приводило к неиспользуемым каналам. Однако, как и предполагалось вначале для моего GBuffer, на бумаге мне нужны две 24-битные цели и две 32 или три 24 и одна 32.

Я понимаю, что при одинаковом «размере» каждое вложение может быть лучше выровнено, но, фактически, лучше ли тратить каналы (или зарезервировать их для будущего использования) и иметь все RT одинакового размера, или мне следует использовать именно то, что нужно? В первом случае, почему это такое преимущество, будут ли 24-битные дополнения равны 32?

cifz
источник

Ответы:

9

Я понимаю, что при одинаковом «размере» каждое вложение может быть лучше выровнено, но, фактически, лучше ли тратить каналы (или зарезервировать их для будущего использования) и иметь все RT одинакового размера, или мне следует использовать именно то, что нужно?

Лучше иметь унифицированные 32-битные выровненные цели рендеринга, даже если это означает «напрасную трату» некоторой памяти. Это будет намного быстрее, чем при использовании не 32-битной памяти. Также у вас не будет проблем с поддержкой нескольких типов буферов, копирование и объединение буферов будет проще, так как вам не придется конвертировать между несколькими типами.

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

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

Будут ли 24-битные дополнены до 32?

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

PS: 32 или 64 бит в зависимости от архитектуры.

concept3d
источник
5
и если они все имеют одинаковый битовый размер, вы можете закрыть их без необходимости конвертации
ratchet freak