【问题标题】:Vulkan and X11 PixmapVulkan 和 X11 像素图
【发布时间】:2019-04-06 04:54:49
【问题描述】:

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

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

我一直在研究 Vulkan 和 OpenGL 之间的互操作,即。创建一个 GL 上下文只是为了使用像素图扩展,然后使用 external_objects 和此类扩展来为 Vulkan 带来加载的纹理。但在我的 Intel HD 630 上,所需的 GL_EXT_memory_object 似乎不可用(使用 Mesa 18.3 开发和最新内核,如果有办法以某种方式启用它,那就太好了)。

目前,作为一种解决方法,我使用 CPU 从像素图中获取像素,然后将其暂存到 GPU 内存。显然,在高分辨率下这可能会非常慢,即使将上传限制在仅损坏的区域也是如此。

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

【问题讨论】:

  • 再看一遍,我想我确实有所需的 GL 扩展可用,我只需要通过设置环境变量显式启用它们:MESA_EXTENSION_OVERRIDE="GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd"。我要试试这个,看看效果如何。

标签: opengl x11 vulkan pixmap


【解决方案1】:

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

【讨论】:

  • 是否有可能通过 DRI2 扩展来做到这一点?
猜你喜欢
  • 2018-11-30
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多