Wayland合成器下多显卡渲染方法与流程

文档序号:33767364发布日期:2023-04-18 20:05阅读:432来源:国知局
Wayland合成器下多显卡渲染方法与流程

本发明涉及合成器性能优化,具体涉及wayland合成器下多显卡渲染方法。


背景技术:

1、wayland是一种图形显示协议(protocol),wayland协议将一个图形系统分为客户端和服务端。客户端和服务端通过wayland协议进行通信。

2、目前市面上大多数系统采用是的x11图形系统,但是整个x图形系统的代码复杂庞大,并且时代久远,很多协议代码已经被废弃,在维护上存在一定的困难。相对于xorg合成器来说,基于wayland协议的显示服务器是一个更具现代化的图形系统实现,比如将桌面管理融入合成器中,客户端的渲染交给客户端自己实现。wayland的宗旨就是保证每一帧画面都是完美的,所以对于用户使用体验感来说,同一桌面环境在wayland运行时,体验更好,动画更加流畅。

3、随着国家信创产业的大力发展,国内硬件软件水平得到了质的提升,诞生了诸多国内gpu芯片,而国内厂商的标准各不一样,两者显卡同时使用会产生许多兼容性的问题;现多显卡的应用场景日益增多,比如用一张能力强的主渲染卡完成渲染任务,而副渲染卡只作显示功能。

4、多显卡技术一致是现有wayland环境下支持的难点,现有的wayland环境下对于多显卡的各类情况支持不足,急需一套统一的框架来满足并优化多显卡的应用情形。

5、现有wayland环境下对于多显卡渲染的支持有严重缺陷:

6、1、weston 环境完全不支持多张显卡,所有厂家需要进行自己的适配工作,工作冗余且复杂;

7、2、kwin环境只支持多显卡都支持硬件加速(opengl渲染)的情况,如果遇到只具备display control功能、而没有硬件加速功能的显卡则束手无策;

8、3、当多张都不支持硬件加速的显卡、只能cpu来进行渲染时,在当前开源wayland环境下面就完全不能够支持了。

9、中国发明专利“一种多显卡渲染的方法与三维显示系统”(申请号201410186419.0),该发明实施例公开了一种多显卡渲染的方法与三维显示系统,用于提高三维场景在多显卡渲染的效率,提高三维场景的渲染帧率。本发明实施例方法包括:三维显示系统根据与多个显卡设备的连接信息进行计算得到相机分割投影矩阵,根据相机投影分割矩阵将三维场景分割成多个从相机进行渲染,每个从相机与一个显卡设备相对应,将每个从相机对应的三维场景数据发送到其对应的显卡设备上进行渲染,这样使得多个显卡设备 可以同时对三维场景的不同区域进行独立渲染并显示,大大提高了三维场景在多显卡渲染的效率,提高三维场景的渲染帧率。该发明的渲染方法首先不是针对wayland环境下面的,其次他的框架主要是应用层三维场景的框架处理进行的优化,并不涉及合成器的框架,不适用于本发明场景。

10、中国发明专利“一种双显卡渲染方法及装置”(申请号202210628538 .1),该申请提供一种双显卡渲染方法及装置,所述方法包括:初始化directx12接口,创建并计算左右眼要渲染的待渲染画面;基于所述directx12接口将待渲染图像分别发送到目标显卡和源显卡,分别对所述待渲染图像渲染;将所述源显卡中的渲染图像发送到所述目标显卡中,所述目标显卡将所述源显卡和所述目标显卡中 完成的渲染图像合并,生成合并图像;所述目标显卡将所述合并图像发送vr设备。本技术通过双显卡分别对左右眼图像进行渲染,提高渲染效率。首先此专利,需要两个显卡支持硬件加速,再者在两张显卡进行数据传输的时候需要通过cpu内存为中间介质进行传输,效率远远比不上本发明的情形一,远远比不上本发明的传输效率和对显卡支持情况;


技术实现思路

1、为解决已有技术存在的不足,本发明提供了一种wayland合成器下多显卡渲染方法,包括如下步骤:

2、步骤s1:通过显卡能力检查,选取渲染能力最强的显卡作为主渲染卡,其它的显卡作为副渲染卡;

3、步骤s2:对各显卡进行硬件加速检查,根据硬件加速检查的情况,将多显卡分为如下三种情形:

4、情形一:主渲染卡及副渲染卡均支持硬件加速;

5、情形二:主渲染卡支持硬件加速,副渲染卡不支持硬件加速;

6、情形三:主渲染卡及副渲染卡均不支持硬件加速;

7、步骤s3:根据步骤s2所划分的情形,选择不同的策略实现多显卡渲染。

8、其中,针对情形一,多显卡渲染策略如下:主渲染卡渲染完毕副渲染卡内容后,将渲染内容通过dma-buf导出给副渲染卡,副渲染卡将导出内容直接通过纹理拿到,然后进行贴图到自己的送显buffer中进行显示。

9、其中,针对情形一,多显卡通过如下操作实现其渲染策略:主渲染卡根据副渲染卡输出的分辨率通过gbm_bo_create函数创建存储副渲染卡渲染数据的gbm_bo,然后副渲染卡进行渲染时,实际是通过主渲染卡的gpu进行渲染,并渲染到主渲染卡为副渲染卡申请的gbm_bo中;副渲染卡通过eglcreateimagekhr函数将主渲染卡中的渲染内容转成eglimage,再通过gleglimagetargettexture2does函数将egl image转成纹理,最后进行纹理贴图,把渲染内容送到副渲染卡自己的送显buffer中了,完成送显操作。

10、其中,针对情形二,多显卡渲染策略如下:判断副渲染卡是否支持gbm_bo_map操作,如果支持则等主渲染卡渲染完毕副渲染卡内容后,将渲染内容直接通过gbm_bo_map映射到副渲染卡的送显buffer中;如果不支持,则通过glreadpixels函数,待主渲染卡渲染完副渲染卡需要渲染内容完成后,将渲染内容直接读取到副渲染卡的送显buffer中,随后进行送显操作。

11、其中,针对情形二,多显卡通过如下操作实现其渲染策略:主渲染卡根据副渲染卡输出的分辨率通过gbm_bo_create函数创建存储副渲染卡渲染数据的gbm_bo,然后副渲染卡进行渲染时,实际是通过主渲染卡的gpu进行渲染,并渲染到主渲染卡为副渲染卡申请的的gbm_bo中;副渲染卡通过gbm_bo_map将主渲染卡中的渲染内容直接映射到副渲染卡自己的dumb buffer里面,或者通过glreadpixels函数将主渲染卡中的渲染内容读取到副渲染卡自己的dumb buffer里面,把渲染内容送到副渲染卡自己的送显buffer中,完成送显操作。

12、其中,针对情形三,多显卡渲染策略如下:主渲染卡渲染完毕副渲染卡内容后,将渲染内容通过memcopy函数,将渲染内容拷贝到副渲染卡的送显buffer进行显示。

13、其中,针对情形三,多显卡通过如下操作实现其渲染策略:主渲染卡根据副渲染卡输出的分辨率通过drmmodecreatedumbbuffer函数创建存储副渲染卡渲染数据的dumbbuffer,然后副渲染卡进行渲染时,实际是通过主渲染卡的gpu进行渲染,并渲染到主渲染卡为副渲染卡申请的dumb buffer中;副渲染卡通过memcopy函数将主渲染卡中的渲染内容送到副渲染卡自己的dumb buffer中,从而把渲染内容送到副渲染卡自己的送显buffer中,完成送显操作。

14、本发明提供的wayland合成器下多显卡渲染方法,在wayland环境下多卡渲染功能由主渲染卡统一实现,在wayland显示协议中客户端的渲染完全由客户端自行处理,所以不会影响客户端的运行效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1