当前位置:网站首页>三代DRI的变化
三代DRI的变化
2022-06-12 17:08:00 【_kerneler】
DRI1
首先要说,DRI1已经不在考虑使用了,这里说一下它的原理:
DRI1由于当时图形卡内存大小,只有一个屏幕front buffer+back buffer由所有DRI clients和X server使用,front buffer和back buffer就像现在显示系统的双缓冲一样,所有要做渲染操作的实体都直接渲染到back buffer,然后执行swap就更新画面,front变back,back变front。另外所有渲染实体在开始渲染时,都会独占DRM设备,就像互斥锁保护的内存资源,其他的渲染实体就要等,并且渲染实体在释放设备时,所有之前上传的数据(如纹理等)都会丢失,总之,性能不行。
DRI2
DRI2和DRI3现在都在使用,但是DRI3性能更好一些,说一下DRI2原理:
DRI2是进入compositor时代的设计,buffer开始变成离屏buffer,并且离屏buffer可以做直接渲染,DRM也经过了一次大更新;每个DRI client都有自己的back buffer(附带着深度和模版 缓冲区),DRI client在back buffer做完渲染后的swap也不再是直接显示出去,而是变成提交给compositor作为一个compose源,最终的屏幕内容是compositor根据各个源的叠加、透明、边界裁剪得到,并swap到真的front buffer。
为了管理各个DRI client都有自己的back buffer这个事儿,DRM加了新功能,内存管理TTM,但是后来又重写成GEM,这些东西到DRM的事儿里再说。但是有了这个内存管理之后,DRI2 client渲染时不再锁定整个DRM设备,并且在暂停渲染时也不必释放所有显存资源。
DRI3
DRI3 client申请自己的渲染buffer,而不是去调用X server来做申请,这带来了易于改变窗口大小、重复利用之前的buffer等特性(compositor刷帧只需要更新部分缓存内容即可);DRI3放弃了不安全的机遇GEM共享buffer的机制,转而使用DMA的fd来传递,并且DRI3PixmapFromBuffer和DRI3BufferFromPixmap可以完成X server buffer与DMA buffer的转换,同样一块内存,在DRI client和X server之间传递。DRI3还有Present扩展,新鲜程度没有激起我非常强的表述欲,就当没看见了。
边栏推荐
- 借助SpotBugs将程序错误扼杀在摇篮中
- Gerrit+2触发Jenkins任务
- Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现
- Download PHP source code of leaf sharing station
- PAT甲级 1142 最大团
- 890. find and replace mode / Sword finger offer II 080 Combination with k elements
- 云开发坤坤鸡乐盒微信小程序源码
- R language calculates data Table specifies the mean value of a numeric variable when the value of one grouped variable is fixed and another grouped variable
- Compilation optimization of performance optimization
- Gerrit+2 triggers Jenkins task
猜你喜欢

Recommend 6 open source projects of yyds

Cloud development kunkun chicken music box wechat applet source code

丁总路由器设置以及401联网

博士申請 | 新加坡國立大學Xinchao Wang老師招收圖神經網絡方向博士/博後

Qiushengchang: Practice of oppo commercial data system construction

男神女神投票源码 v5.5.21 投票源码

How to change Golan back to the English version when it becomes the Chinese version

布局管理中的sizePolicy的策略问题

Extract the new Chinese cross modal benchmark zero from 5billion pictures and texts, and Qihoo 360's new pre training framework surpasses many SOTAS

Selenium element positioning
随机推荐
每天5分钟玩转Kubernetes | 汇总
R语言使用epiDisplay包的pyramid函数可视化金字塔图、基于已有的汇总数据(表格数据)可视化金字塔图
Swin transformer code explanation
5、Embedding
selenium元素定位
快速入门scrapy爬虫框架
R语言使用epiDisplay包的summ函数计算dataframe中指定变量在不同分组变量下的描述性统计汇总信息并可视化有序点图(名称、有效值个数、均值、中位数、标准差、最大值、最小值)
邱盛昌:OPPO商业化数据体系建设实战
MySQL事务简介、事务隔离级别
Swintransformer network architecture
5、Embedding
(6) Control statement if/else switch
Gerrit triggers Jenkins sonarqube scan
大端模式和小端模式的区别
怎么在公司里面做好测试工作(做好测试工作)
Alibaba cloud image station supports IPv6!
C # final review programming question (guessed by the teacher)
Interesting LD_ PRELOAD
价值超高的CA证书解析
Go的变量