Vulkan и X11 Pixmap

Я пишу оконный менеджер X11 с композитором на основе Vulkan. Мне интересно, есть ли способ эффективно загружать растровые изображения окон в виде текстур.

В OpenGL можно напрямую использовать расширение EXT_texture_from_pixmap для привязки растрового изображения к текстуре. Насколько я знаю, в Вулкане такого нет.

Я изучал взаимодействие между Vulkan и OpenGL, т.е. создайте контекст GL только для использования расширения pixmap, а затем используйте external_objects и подобные расширения, чтобы сделать загруженную текстуру доступной для Vulkan. Но на моем Intel HD 630 кажется, что требуемый объект GL_EXT_memory_object недоступен (с использованием Mesa 18.3 dev и последней версии ядра, если есть способ каким-то образом включить его, это было бы здорово).

В настоящее время в качестве обходного пути я использую ЦП для получения пикселей из растрового изображения, а затем помещаю их в память графического процессора. Очевидно, это может быть очень медленным с высокими разрешениями, даже если выгрузка ограничена только поврежденными регионами.

Каким будет лучший способ эффективно получить содержимое растрового изображения, которое будет использоваться в модуле рендеринга на основе Vulkan?


person jaelpark    schedule 01.11.2018    source источник
comment
Глядя на это еще раз, я думаю, что у меня действительно есть необходимые расширения GL, мне просто нужно было явно включить их, установив переменную среды: MESA_EXTENSION_OVERRIDE="GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd". Я собираюсь попробовать это и посмотреть, как это пойдет.   -  person jaelpark    schedule 15.11.2018


Ответы (1)


Правильный способ справиться с этим - использовать расширение xcb DRI3 для получения DMA-buf fd растрового изображения, после чего мы можем импортировать память, используя VK_KHR_external_memory_fd и VK_EXT_external_memory_dma_buf. Кроме того, VK_EXT_image_drm_format_modifier потребуется для работы с форматом буфера, зависящим от производителя (заданным модификатором DRM), но, к сожалению, это расширение пока недоступно. Пока этого не произошло, с помощью GBM можно было бы обойти проблему, чтобы преобразовать внутренний формат и разбиение буфера в линейный, после чего импорт должен стать относительно простым.

person jaelpark    schedule 27.03.2019
comment
Возможно ли это сделать случайно с расширением DRI2? - person Asad-ullah Khan; 23.07.2021