我正在用基于Vulkan的合成器编写X11窗口管理器。我想知道是否有一种方法可以有效地将窗口像素图作为纹理加载。
在OpenGL中,可以直接使用EXT_texture_from_pixmap扩展将像素图绑定到纹理。据我所知,在Vulkan中没有这样的东西。
我一直在研究Vulkan与OpenGL之间的互操作,即。仅使用pixmap扩展名创建GL上下文,然后使用external_objects和此类扩展名使加载的纹理可用于Vulkan。但是在我的Intel HD 630上,似乎所需的GL_EXT_memory_object不可用(使用Mesa 18.3开发人员和最新内核,如果有某种方式启用它,那就太好了。)
目前,作为一种解决方法,我正在使用CPU从像素图中获取像素,然后将其暂存到GPU内存中。显然,即使在仅将上传内容限制在损坏的区域时,高分辨率也可能会非常慢。
有效检索基于Vulkan的渲染器中使用的像素图内容的最佳方法是什么?
答案 0 :(得分:2)
处理此问题的正确方法是使用xcb DRI3扩展名获取像素图的DMA-buf fd,然后可以使用VK_KHR_external_memory_fd
和VK_EXT_external_memory_dma_buf
导入内存。此外,将需要VK_EXT_image_drm_format_modifier
处理缓冲区的供应商特定格式(由DRM修饰符指定),但是不幸的是,此扩展名尚不可用。在此之前,也许可以使用GBM来解决,以将内部格式和缓冲区的平铺转换为线性,然后导入应该变得相对简单。