Vulkan / VMA Изменить размер буфера аналогично `realloc` - PullRequest
0 голосов
/ 07 августа 2020

Допустим, я столкнулся с ситуацией, когда я хотел бы изменить размер буфера вулкана (VkBuffer). Например, если бы я хотел добавить больше вершин в существующий буфер вершин. Как мне увеличить / уменьшить VkBuffer? Придется ли мне просто создать новый буфер и отказаться от старого, или есть функциональность, аналогичная C realloc? Есть ли он в виде расширения vulkan?

Кроме того, я использую Vulkan Memory Allocator (VMA). Хотелось бы, чтобы оба решения использовали VMA и raw vulkan, если есть такая realloc функциональность.

1 Ответ

2 голосов
/ 07 августа 2020

Нет realloc ни в VMA, ни в расширениях Vulkan.

Исторически существовало vmaResizeAllocation(), но оно устарело и теперь не работает.

Для роста вам нужно предвидеть и предварительно выделите дополнительный размер или получите новое распределение. Для сжатия вы можете использовать уже имеющуюся память или получить новую.

Если вы получили новое распределение, вы должны сделать явное копирование, что также может иметь последствия для синхронизации. Так что это как бы выходит за рамки VMA и, возможно, не так уж хорошо для многих алгоритмов распределителя.

...