Как избежать фрагментации VRAM? - PullRequest
0 голосов
/ 20 декабря 2018

Я понимаю, что нет никакого способа избежать этого наверняка , поскольку OpenGL ничего не говорит о фрагментации VRAM.

Но все равно, у меня есть фрагментация в моем приложении, и я хочу попробоватьсокращение на распространенных платформах.

Единственное, что я нашел по этой теме, было: this :

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

Что имеет большой смысл.

Действительно ли этохорошая идея?И есть ли еще что-то, о чем следует помнить?

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

1 Ответ

0 голосов
/ 20 декабря 2018

В принципе вы правы.Из всех ресурсов текстура тяжелая.Не только вы можете использовать текстуры в качестве буферов, но и как обычные изображения.Кроме того, вы можете иметь несколько разрешений одной и той же текстуры.Вы должны помнить, что на стороне драйвера есть определенные критерии, которые заставляют ресурс загружаться в оперативную память GPU или выгружаться.Так что если у вас есть текстуры с одинаковым разрешением.Даже если один из них выгружен, его блок памяти может быть выделен другому без какой-либо фрагментации.Также, когда вы создаете текстуру или любой другой ресурс, вы не можете быть уверены, что память присутствует в GPU Ram.Это может быть любое место на основе реализации драйвера.Также в течение срока службы драйвера ресурса может перемещаться этот ресурс из одной памяти в другую.Кроме этого, по крайней мере, в OpenGL вы не имеете никакого контроля над различными воспоминаниями и тем, как они распределяются.Следовательно, Vulkan предпочтительнее в тех случаях, когда вам нужно больше контроля и вы знаете, что делаете , поскольку вы можете указать не только требуемый тип памяти, но также вы можете указать свои собственные распределители для этой памяти.

...