Vulkan和X11 Pixmap

问题描述 投票:4回答:1

我正在用一个基于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从像素图中获取像素,然后将其暂存到GPU内存。显然,即使仅限制上传到受损区域,高分辨率也会非常慢。

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

opengl x11 vulkan pixmap
1个回答
2
投票

处理这个的正确方法是使用xcb DRI3扩展来获取pixmap的DMA-buf fd,之后我们可以使用VK_KHR_external_memory_fdVK_EXT_external_memory_dma_buf导入内存。此外,VK_EXT_image_drm_format_modifier将需要处理缓冲区的供应商特定格式(由DRM修饰符指定),但遗憾的是此扩展尚不可用。在此之前,可以使用GBM来解决内部格式和缓冲区的平铺转换为线性,之后导入应该变得相对简单。

© www.soinside.com 2019 - 2024. All rights reserved.