继 https://bbs.deepin.org.cn/post/299605 之后, 我跟 @zccrs 大佬沟通后, zccrs 大佬指出了更优的方案:
应用/客户端通过Wayland协议递给wl_buffer -> wlroots import 成 OpenGL/Vulkan 的图形纹理 (Texture纹理是什么可以问AI让它形象讲) -> treeland的QtQuick QML画布将图形纹理采样合成画布为 wlroots 用的私货类图像像素 wlr_buffer -> wlroots 将其以Vulkan协议将wlr_buffer递给Linux内核的DRM上屏显示 -> 你看到这个图像
这比我之前实现的优在应用/客户端向treeland的QML画布传递的不是渲染好只有像素信息的Buffer, 而是带着OpenGL/Vulkan说明书的Buffer (即Texture), 因此treeland不再需要跟之前我的实现那样对仅有的像素Buffer进行二次采样成纹理, 因此极大减轻了之前方案中treeland二次采样带来的额外CPU性能开销
这么做很好, 但是需要patch过的wlroots, 让treeland侧的Qt QML画布知道wlroots传来的纹理所有者是谁/生命边界在哪/如何显式同步, wlroots侧补丁在: https://github.com/Better-Deepin-Repo/wlroots-0.19-deepin/commit/c9240cd2d43493bd65bed5692ac90dee42b4a028
目前我已经实现zccrs大佬说的方案, PR链接没动( https://github.com/linuxdeepin/treeland/pull/1032 ), 我直接force-push了重构版本, 实现修好Vulkan边界/显式同步管理后上一版的各类掉帧问题瞬间没了
效果视频我有时间上传到网上, Better Deepin Repo/玲珑内测源Q群已经有
Featured Collection
Popular Ranking
Popular Events
这一轮的treeland Vulkan渲染器重构概要
继 https://bbs.deepin.org.cn/post/299605 之后, 我跟 @zccrs 大佬沟通后, zccrs 大佬指出了更优的方案:
应用/客户端通过Wayland协议递给wl_buffer -> wlroots import 成 OpenGL/Vulkan 的图形纹理 (Texture纹理是什么可以问AI让它形象讲) -> treeland的QtQuick QML画布将图形纹理采样合成画布为 wlroots 用的私货类图像像素 wlr_buffer -> wlroots 将其以Vulkan协议将wlr_buffer递给Linux内核的DRM上屏显示 -> 你看到这个图像
这比我之前实现的优在应用/客户端向treeland的QML画布传递的不是渲染好只有像素信息的Buffer, 而是带着OpenGL/Vulkan说明书的Buffer (即Texture), 因此treeland不再需要跟之前我的实现那样对仅有的像素Buffer进行二次采样成纹理, 因此极大减轻了之前方案中treeland二次采样带来的额外CPU性能开销
这么做很好, 但是需要patch过的wlroots, 让treeland侧的Qt QML画布知道wlroots传来的纹理所有者是谁/生命边界在哪/如何显式同步, wlroots侧补丁在: https://github.com/Better-Deepin-Repo/wlroots-0.19-deepin/commit/c9240cd2d43493bd65bed5692ac90dee42b4a028
目前我已经实现zccrs大佬说的方案, PR链接没动( https://github.com/linuxdeepin/treeland/pull/1032 ), 我直接force-push了重构版本, 实现修好Vulkan边界/显式同步管理后上一版的各类掉帧问题瞬间没了
效果视频我有时间上传到网上, Better Deepin Repo/玲珑内测源Q群已经有
经过这一轮实现, 我的反思与思考: