Почему у Вулкана есть предел выделения памяти? - PullRequest
2 голосов
/ 31 марта 2019

Существуют ли какие-либо технические причины для ограничения максимального количества выделений памяти?

Проверьте Страница справочника vkAllocateMemory .В нем говорится:

Максимальное количество допустимых выделений памяти, которые могут существовать одновременно в VkDevice, может быть ограничено пределами, зависящими от реализации или платформы.Если вызов vkAllocateMemory приведет к тому, что общее количество выделений превысит эти пределы, такой вызов завершится неудачно и должен вернуть VK_ERROR_TOO_MANY_OBJECTS.

OpenGL не ограничивает выделения, DirectX 11/12 также не будет.Так зачем Вулкану это делать?

1 Ответ

4 голосов
/ 31 марта 2019

Как объяснил здесь , это в первую очередь ограничение ОС.

OpenGL не ограничивает выделения, DirectX 11/12 также не

Ох, они делают.Они просто не сообщают вам об этом.

Драйверы OpenGL и DX11, как правило, выполняют большие выделения виртуальных (GPU) и выполняют перераспределения из тех, которые выделяются при выделении памяти.Таким образом, они могут создать иллюзию , чтобы вы могли выполнять больше аппаратных выделений.Но ограничение все еще существует.

Что касается DX12, я вполне уверен, что если вы попытаетесь выделить более 4096 куч , вы обнаружите CreateHeap, возвращающих ошибки.

Vulkan - это просто API, заранее сообщающий о существовании ограничения.

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

...