Vulkan和X11 Pixmap

6

我正在编写一个基于Vulkan的合成器的X11窗口管理器。我想知道是否有一种有效的方法将窗口像素图作为纹理载入。

在OpenGL中,使用EXT_texture_from_pixmap扩展直接将像素图绑定到纹理中。据我所知,在Vulkan中没有这样的东西。

我一直在研究Vulkan和OpenGL之间的互操作性,也就是创建一个GL上下文来使用pixmap扩展,然后使用external_objects等扩展将加载的纹理可用于Vulkan。但是在我的Intel HD 630上,似乎所需的GL_EXT_memory_object不可用(使用Mesa 18.3 dev和最新内核,如果有一种启用它的方法,那就太好了)。

目前,我正在使用CPU从pixmap获取像素,然后将其暂存到GPU内存中。显然,即使仅限于损坏区域的上传,这也可能非常缓慢,尤其是在高分辨率下。

什么是有效检索pixmap内容以在基于Vulkan的渲染器中使用的最佳方法?


再次查看,我认为我实际上已经拥有所需的GL扩展,只需要通过设置环境变量来显式启用它们:MESA_EXTENSION_OVERRIDE="GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd"。我将尝试这样做,看看效果如何。 - jaelpark
1个回答

3

正确的处理方式是使用 xcb DRI3 扩展获取像素图的 DMA-buf fd,然后我们可以使用 VK_KHR_external_memory_fdVK_EXT_external_memory_dma_buf 导入内存。此外,还需要使用 VK_EXT_image_drm_format_modifier 来处理缓冲区的供应商特定格式(由 DRM 修饰符指定),但不幸的是该扩展尚不可用。在此之前,可能可以通过 GBM 将缓冲区的内部格式和平铺转换为线性,然后导入操作应该会相对简单。


有没有可能通过DRI2扩展来实现这个? - Asad-ullah Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接