Аллокация памяти в Vulkan API с VK_EXT_external_memory_host расширением выводит ErrorOutOfDeviceMemory
имеется archlinux, nvidia gtx1650, nvidia-465 drivers, vulkan 1.2.
имеется код, которым я хочу экспортировать картинку из Xorg на GPU через расширение VK_EXT_external_memory_host. Данное расширение поддержано в указанных драйверах. Однако получаю ошибку ErrorOutOfDeviceMemory.
Полный лог выполнения программы.
имеется предположение, что данное поведение получается из-за неправильно выравненной памяти по переданному указателю -- данную теорию еще не проверял, но однако почему тогда именно указанная ошибка выводится, вместо, скажем, VK_ERROR_INVALID_EXTERNAL_HANDLE...
и еще -- драйвер моей видяхи не предоставляет доступной памяти с нужными memoryTypeIndex и флагом { DeviceLocal }, тоесть есть память которая только { HostVisible | HostCoherent }, ну или с добавлением { HostCached }.
на всякий случай предоставляю vulkaninfo.html
Ответы (2 шт):
мне кажется я понял в чем проблема -- похоже она в выделенной памяти -- vkImportMemoryHostPointerInfoEXT структура требует, что бы поинтер переданный в нее указывал на область памяти размером ровно столько байт, сколько указано после в выделении vkAllocateMemory() -- а он для данного случая должен быть кратным значению выравнивания.
То есть, при импорте он пытается всю память начиная от адреса указателя скопировать размером, которое указано в аллокации. Но я выделяю память не кратно значению выравнивания, а получается обычно чуть меньше, из-за чего vulkan api начинает использовать чужую память за пределами того куска памяти, которое было выделено под image.
Надо попробовать выделять память кратно значению выравнивания.
да -- все теперь работает -- сделал выделения памяти кратно выравниванию, указываю этот размер в структуре выделения памяти vulkan и все отлично теперь -- картинки импортятся в vulkan api