[AI Development Lab] 【treeland + vulkan】这几周的Vibe Coding心得
Tofloor
poster avatar
mozixun
Moderator
8 hours ago
Author

我在给treeland实现完整能试用的Vulkan Renderer的长跑中, 有很多经历和感想, 在这分享一下:

先再次感谢 @罐子 大佬提供的GPT-5.5 (XHigh)让我能不间断地调用GPT-5.5, 也感谢TG群组里deepin开发忙里偷闲给的指导

该项目由智谱GLM-5.2完成前期验证, GPT-5.5完成主体部分, 智谱GLM-5.2修复最后的VRR异步问题

PR链接: https://github.com/linuxdeepin/treeland/pull/1032 提前合并修复的treeland (已合并Vulkan Renderer补丁) : https://gitee.com/LFRon/treeland-fix-mirror/tree/master

先说一下最终成果 (看着没啥区别就对了, 因为要的就是跟treeland GLES2后端没啥区别) :

aeaec3fe5b1518ac126c6570b9577d84.png

Blur效果失效, 这是 @zccrs 大佬测试过在Vulkan后端的treeland的确无法实现的问题

然后我讲讲自己从6月有这个想法一路弄到现在的经历:

在一个多月前的最开始, 我就在想很多人吐槽DDE卡慢, 那虽然有了treeland但是能不能更流畅点, 于是我转来转去忽然发现wlroots有Vulkan renderer支持, 然后我突然想到treeland就是用了wlroots技术栈的那应该可以, 于是不经意间就开始了开启Vulkan Renderer的漫漫长征路

最开始, 我对treeland的技术架构一无所知, 只知道这东西基于wlroots, 不知道为什么treeland依赖Qt, 甚至不知道这个Vulkan Renderer到底指的是什么, 只听说用Qt合成各种各样的复杂动效, 于是我就抱着玩玩的态度, 蹭蹭 @罐子 大佬的CodeX, 于是就告诉AI "帮我给treeland渲染器实现一下Vulkan Renderer" 这么简单的话然后AI就实现了一个, 结果实现完我调WLR_RENDERER=vulkan进去果然电脑是白屏的

然后我就很纳闷为什么, 直到我发现AI在思考的时候由于没有wlroots代码而直接凭空乱猜, 然后我才知道要喂给AI确切的代码库, 于是就把Qt6+Qt6-Wayland源码什么的通通往里喂, 然后让AI写代码的时候加尽可能多的日志方便AI进行之后的问题排查, 我以为这样喂完源码就完事了, 结果跑完发现电脑还是白屏, 我心态爆炸后打了几天游戏顺便日常维护一下玲珑应用升级一下deepin-CachyOS内核就没太管

但过了几天我空下来的时候又开始手痒了, 于是又发起了无畏冲锋, 不断地给AI日志让AI调, 然后终于能出现UI了, 我欣喜若狂结果一进DDM(桌面):

8f6a96d163e52c5be18e142f23ee1dfa.jpg

然后我以为成功就在眼前, 于是不断地让AI加日志然后我运行再给AI运行日志以为这样就能修好, 结果是奋斗到凌晨1点仍然没有任何收获

然后心态爆炸的我又摆烂了几天浑水摸鱼去了

过了几天又是固定剧情: 我又手痒了, 于是又开始拷打GLM-5.2实现, 结果拷打完还是一样的效果, 但我仔细问AI修不好的原因. 发现AI自己说的难修的根源是Qt QML的RHI后端也切了Vulkan导致生命周期管理一堆问题, 然后疑惑的我就去TG的deepin开发群里问, 然后就有个大佬 @大天使 告诉我只要wlroots跑在Vulkan上了你管那么多干嘛, 然后我想一想发现还真是, 于是就拷打AI让AI不要动treeland的Qt QML RHI的OpenGL(EGL)后端, 仅仅把wlroots渲染后端改Vulkan就行了, 然后我那天再捣鼓了几个小时, 开起来了, 我非常高兴, 于是就有了这帖子: https://bbs.deepin.org.cn/post/299209

然而我这样开了treeland的Vulkan renderer之后就马上发现CPU高占用 (比如跑编译) 时很容易导致显存泄露而让内核态amdgpu驱动暴毙, 于是我又去拷打AI让AI加日志然后让AI优化, 结果AI优化来优化去一直优化不好, 不但treeland的QML动画和特效不流畅而且高CPU占用下很容易卡死, 我又修了两个晚上发现修不好, 于是我就挂了个PR在treeland仓库又去摆烂打游戏了

就这样过了几天, 我突然拿到 @zccrs 大佬的回复: https://github.com/linuxdeepin/treeland/pull/1032#pullrequestreview-4550748909

https://github.com/linuxdeepin/treeland/pull/1032#issuecomment-4839245409

然后固定剧情我又手痒了, 拷打AI问AI为什么我那样让treeland的Qt QML RHI走OpenGL, wlroots走Vulkan一直优化不好, 然后AI回答我因为你把QML已经合成了整张屏幕的OpenGL指令先走OpenGL驱动绘制成像素到dmabuf再从dmabuf拿出像素用Vulkan重新绘制一遍上屏, 显得非常多余且没必要, 然后我仔细阅读AI的回复后, 再根据zccrs刚才两条回复, 突然之间明白了treeland要用Qt做什么: 原来是用QtQuick(QML)能力合成整张屏幕的画布, 这时候我感觉懂了一点, 就又去接着QML画布合成的原理继续问AI这treeland同时用Qt+wlroots是想干嘛, 然后让AI先顺着treeland的GLES2后端研究, 在有了前面的半句后AI果然很快就搞清楚了后面半段: 将Qt QML已经合成的画布递给wlroots进行上屏, 然后我才恍然大悟原来treeland同时用Qt+wlroots是想这么操作, 然后我就立刻去问zccrs大佬是不是这样, 得到zccrs大佬的肯定后, 我就明白treeland大致架构了, 然后也就知道treeland开启vulkan到底意味着什么了, 于是我就拷打AI让AI实现Qt QML RHI后端切Vulkan的完整treeland Vulkan Renderer实现

结果果不其然, 我这么一做又回到了之前的情况: ddm元素不全, 桌面dde-shell无法显示任何内容, 但这时我已经清楚treeland的整个架构了, 于是给AI喂了正确的架构信息后, 让AI回答我为什么这么难修, 这次AI回答我的是treeland里的QML画布控制各个应用内OpenGL渲染语义有各种各样的生命周期问题, 然后我明白了AI当前的实现是想让画布直接控制应用OpenGL/Vulkan渲染上屏, 但这很显然非常难。

于是我又面对困境了, 但是我想起了安卓 (AOSP) 类似的HWUI Vulkan实现, 也是让系统UI本体和特效跑在Vulkan上, 各个应用该走OpenGL ES的还是走OpenGL ES, 于是我认为安卓这边一定有东西能让treeland参考, 就让AI联网搜索Android (AOSP) 源码和安卓开发者文档搞清楚Android HWUI Vulkan到底怎么工作的, 果然AI搜索完就能回答我: 安卓实现是让各个应用在它们自己需要的驱动程序渲染完后, 经过Buffer中转渲染完的像素, 再由SurfaceFlinger合成上屏。

然后我联想treeland的架构就想到一个妙招: 那就学习参考安卓的实现, 让各个应用在自己的OpenGL/Vulkan中渲染成像素Buffer, 再让QML直接把这些Buffer塞画布里不就行了吗, 这样就不需要去管什么具体的OpenGL/Vulkan生命周期等乱七八糟的东西, 直接合成然后加特效再给wlroots上屏不就完事了嘛, 于是我思考后先跟AI论证, AI读完代码+我给的Qt, wlroots, libdrm等源码后肯定了我的想法, 于是我就让AI这么去实现, 果然AI刚实现了两次, 就能成功显示UI了, 只是当时光标还有问题以及DTK应用画面帧刷新不及时, 但UI的确能比较正常地显示了

再之后我再对各个具体问题让AI加环境变量加日志仔细分析, 再不断优化Vulkan renderer过程去掉影响性能的防御性代码, 果然AI就能很快修完, 短短三四天我就让treeland的Vulkan Renderer能正常合成各应用到QML画布中并正确走wlroots上屏了

我弄到现在, 最大感悟是AI在写代码上的确是个很强大的工具, 但前提是你要能给它正确的方向和正确的程序架构, 以及你想要的实现到底如何实现, 具体用什么结构实现, 如果不告诉它, 遇到大一点的项目就很容易跟我一样四处踩坑, 最后撞了个满头包并一事无成

Reply Favorite View the author
All Replies
avatar
SoftCat
deepin
8 hours ago
#1

AI:我不生产代码,我只是代码的搬运工和组装工

架构得你先想好joy

Reply View the author
avatar
流星追月
deepin
8 hours ago
#2

恭喜你,通过AI让你成为了架构师,或者说是项目经理。

一个渲染框架,当然需要你对它说你需要什么,目的是什么?实现这些目的的路径有哪些,成功的案例有哪些?是否可以抄袭,如果可以抄袭,代码不要完全一样,用另外一套代码解决。

我也很好奇,在大模型满天飞的情况下,一个渲染框架的开发进度一直拖延?

这是我百思不得其解的地方。

Reply View the author
avatar
mozixun
Moderator
7 hours ago
#3
流星追月

恭喜你,通过AI让你成为了架构师,或者说是项目经理。

一个渲染框架,当然需要你对它说你需要什么,目的是什么?实现这些目的的路径有哪些,成功的案例有哪些?是否可以抄袭,如果可以抄袭,代码不要完全一样,用另外一套代码解决。

我也很好奇,在大模型满天飞的情况下,一个渲染框架的开发进度一直拖延?

这是我百思不得其解的地方。

在大模型满天飞的情况下,一个渲染框架的开发进度一直拖延

当前GLES2后端也能用, 而增加Vulkan渲染后端的改动还是非常大的, 因为它涉及到Vulkan显式同步管理等一系列操作, 你可以去看我那个PR, 动效提升我还没在低端机上试过, 我7月10多回家去赛扬本上试一下

Reply View the author