Как объяснил здесь , это в первую очередь ограничение ОС.
OpenGL не ограничивает выделения, DirectX 11/12 также не
Ох, они делают.Они просто не сообщают вам об этом.
Драйверы OpenGL и DX11, как правило, выполняют большие выделения виртуальных (GPU) и выполняют перераспределения из тех, которые выделяются при выделении памяти.Таким образом, они могут создать иллюзию , чтобы вы могли выполнять больше аппаратных выделений.Но ограничение все еще существует.
Что касается DX12, я вполне уверен, что если вы попытаетесь выделить более 4096 куч , вы обнаружите CreateHeap
, возвращающих ошибки.
Vulkan - это просто API, заранее сообщающий о существовании ограничения.
С Vulkan это просто проблема, которая никогда не должна возникать.Если вы выполняете более тысячи отдельных выделений памяти, ваша схема выделения памяти неверна.Вы должны выделить несколько больших блоков памяти, а затем использовать их подразделы для своих текстур и буферов.