mtk 游戏源码-一文看懂显示技术底层框架

3.DPU最新设计

4. 总结

PC上的DPU是嵌入在主板上的,无论是独立显存还是集成主板。 因为GPU能力越来越强,目前DPU基本上是一个赠品功能,但从历史上看,GPU是后来出现的新东西。 最早的只有DPU。 从最早的Framebuffer机制可以看出,最早的DRM框架版本中也没有GPU代码。

DPU最简单的功能就是输出Framebuffer数据到显示设备,而Framebuffer的来源来自CPU的软件渲染,而不是GPU渲染。

上图并没有给我们太多启发,因为它离我们现代的DPU设计太远了。

1、DPU和GPU之间的耦合是历史产物,可以完全独立。

【控制端采用DPU,内容端采用GPU】

通过Linux的dri显示框架,我们还可以看到KMS的相对独立性,它对应的是系统端的composer,而drm则是内容相关的应用端。 Android系统也是同样的道理。 GPU对应的是drm(但是Snapdragon和Mali不符合这个开源drm框架)。 用于概述,属于应用端流程; 而DPU对应KMS,运行在服务器端。 可以感觉到,在SurfaceFlinger(composer)中,开机时就初始化,此后保持不变,两者的分离越来越彻底。

PC端Linux与联通Android的区别

PC上的耦合性还是很强的。 DPU和GPU共享内存,代码也放在一个文件中。 缓冲区管理(GEM/TTM)自然是可互操作的。 Linux中默认的代码是合并成一段的。 这是历史遗留问题——Android不同,它本质上是分离的,ION是Android缓冲区分配的标准。

Linux平台:我们看一下联发科adreno的Linux开源代码。 系统将DPU和GPU合并到一个文件夹中:drivers/gpu/drm/msm。 功能基本上是分开的。 比如GPU相关的有:adreno、msm_gpu.c、msm_ringbuffer.c,比如DPU相关的有disp、edp、hdmi等。但是还是有一些代码是耦合在一起的,比如msm_gem.c ,mem_drv.c。 GPU命令仍然使用drm标准或定制命令。

mtk 游戏源码-一文看懂显示技术底层框架

对于GPU,UMD使用mesa(MediaTek没有官方Linux支持)

Android平台:联发科官方代码在两个完全不同的仓库,不存在代码共享。 GPU放置在drivers/gpu/msm中,并配置了KGSL。 DPU是一个私有库,不是开源的(OEM厂商可以获取。)。 这也说明两者之间并没有那么紧密的逻辑联系,即传递一个framebuffer。

对于 GPU,UMD 是 libGLES_xx.so(包括 GL 和 EGL)。 它没有 GEM 和 DRM。 它是完全闭源的,OEM无法获得源代码。

GPU和DPU可以来自不同的制造商,但它们通常来自同一制造商。 为什么?

缓冲区共享更高效:虽然缓冲区共享是通过ion实现的,但为了节省DDR带宽,共享缓冲区一般都会进行压缩mtk 游戏源码mtk 游戏源码,例如Arm的AFBC和MediaTek的UBWC。

如果您使用不同的制造商,则可以完成此操作。 比如对于ARM来说,maligpu仍然被广泛使用,但是malidpu已经很少使用了。 然后就会赠送一个AFBCDecode模块,如右图。 (联发科并没有放开这个限制)

DPU的基本功能应该是什么?

DPU的设计比GPU简单,因为它的功能是固定的并且不可编程。 它有大约两个基本功能。

在最早的Linux代码中就可以看到踪迹。 最初,2D加速功能使用CPU; 之前的2D加速开始使用GPU。 到了Android系统后,是通过GPU的专用2D模块来实现的(甚至可以配置为双GPU,一个GPU只做2D加速)。 后来出现了专用的DPU,取代了GPU的2D模块(之前的GPU不再有专用的2D模块)。 模块,由于2D本来就是3D的子集,虽然专门设计的2D模块效率更高,但不如DPU有效,所以逐渐被淘汰)。

下面给出了DPU的基本设计原型,包括4个部分。

2、DPU的原型设计2.1【DPU的四大组成部分】

mtk 游戏源码-一文看懂显示技术底层框架

这是2013年的DPU设计,当时Android发布了升级最多的4.4(实际上是最成功的一代)。 从右图可以看出,DPU的设计大致分为四个部分:

1)SourceSurfacePipes(Pipe称为overlay,前面就不区分了):支持4个overlay通道(V1-V4),支持RGBX、YUV等格式,缩放比例(1/4-4),每层都支持alpha渠道,

2)Blender:支持2个Blender,对应2个Path(不仅是LCD,还对应DP或HDMI投影);

3)目标表面后处理器:支持抖动、gamma调整; 目前的趋势是这部分变得越来越重要。

4)DisplayInterface:最多支持2个同时输出设备(化学显示设备、虚拟显示设备不需要实际输出设备); 支持LVDS、DSI、CVBS、HDMI等显示设备;

DPU更详细的图片如下:

如果放在Android系统中,我们看一个HDR视频的播放过程,可以更好地看到这4个部分。

2.2【KSM与DPU】

虽然这张图也和我们常见的DRM KSM框架非常一致,也就是说KSM和DPU在功能上几乎是等价的:

mtk 游戏源码-一文看懂显示技术底层框架

-----------------------------------------------------------------------------------------------------------------------------------------------
 Layer name
           Z |  Window Type |  Layer Class |  Comp Type |  Transform |   Disp Frame (LTRB) |          Source Crop (LTRB) |     Frame Rate (Explicit) [Focused]
-----------------------------------------------------------------------------------------------------------------------------------------------
 com.android.systemui.ImageWallpaper#0
  rel      0 |         2013 |            0 |     DEVICE |          0 |    0    0 1080 2400 |    0.0    0.0 1080.0 2400.0 |                              [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 com.miui.home/com.miui.home.launcher.Launcher#0
  rel      0 |            1 |            0 |     DEVICE |          0 |    0    0 1080 2400 |    0.0    0.0 1080.0 2400.0 |                              [*]

3、DPU 3.1最新设计【SourceSufacePipesorOverlays】

1)管道(也叫overlay)通常分为两种:(这个不能称为趋势,联发科一开始就有这两种)

2)支持更大的输入帧率,比如支持4K输入,这就需要更高的DPU频率;

3)随着XR(AR、VR)设备的出现,单眼4K已经出现(DPU必须支持8K输入)。 这样就带来了太大的带宽压力,所以目前的做法一般不是直接输入4K,而是将其分割成两个2k(实际上可用层数会减少一半),这就是Split功能; (这不是一个新功能,因为4k视频很多年前就出现了)。

4)支持旋转,主要用于视频播放,其他场景基本不使用,GPU会预旋转。 (malidp650支持这个不好,主要是带宽影响太大,从内核开源代码看,dp650之后Mali就没有更新了)

5)管子越来越多,比如8个或者16个(基本不会超过这个)

6)支持压缩格式(UBWC或AFBC); 减少显存带宽,尤其是与GPU的交互带宽。

总结:这项技术已经存在很多年了,未来没有变化趋势。 不仅仅是第三点,因为XR对码率的追求还没有结束,单眼8K也会到来,所以DPU必须支持16K输入。 这个带宽压力太大了(特别是在缩容的时候)。 即使拆成两块8K,压力还是很大,所以未来是否加装两块DPU还不得而知。

3.2【搅拌机】

1)合成层数越来越多,例如支持10层合成(虽然大多数层不会互相重叠);

2)合成路径越来越多,比如支持4条(同时使用3条已经很少见了)

3)支持3D功能; (可以区分左右眼,因为3D功能在很多年前就已经普及,所以并不是什么新技术)

4)Dimlayer:Android上常见的场景。 作为渐变色,只有灰度值发生变化,其他不变;

5)Backgroundcolor:对于单色图像也有一些优化方案。

总结:对于4和5来说,优化方案完全是基于应用场景的缩减。 为了节省帧率,也算是稍微调整了一下。 在XR未来的发展中,Writeback功能可能会进一步优化;

3.3【目标表面后处理器】

一开始,后处理只有抖动、伽玛校准以及色温、对比度、饱和度调整功能。 它在四个模块中并不重要,但却是近年来增长最快的模块。 如今很多旗舰手机都采用了独立显示芯片PixelWorks(过去简称PW)。 推广的功能有:MEMC、HDR、阳光屏(CABL)、护眼模式、Demura、超分辨率。 Snapdragon 拥有所有这些功能。 将其全部放入您自己的后期处理中。

1) 超分辨率和散景

这里的超分是指DestinationScaler,是在整个屏幕数据上完成的。 它与上面的 Sourcepipe 层超级评分不同,尽管算法相同。

目前几乎所有平台都不再使用简单的双线性配准,而是各自的算法,但仍然基于单帧技术。 虽然MTK声称已经支持AI超分,但功效并没有让你觉得很牛逼。 。

mtk 游戏源码-一文看懂显示技术底层框架

PC上有Nvidia的AI超分辨率DLSS和AMD的传统超分辨率FSR,网上反映都不错。 但放到手机上,要么帧率高,要么在手机上这些高PPI的应用场景中,超分辨率是不可能实现的。 优势不是那么大。 (在PC上表现良好的FSR超分辨率算法在手机上确实效果不佳)

随着XR的码率越来越高,这种需求将会不断发展,也是未来的一个发展方向。

2)支持HDR、SDRtoHDR,这是基本操作。

3)光照调节:与Android根据环境光调节不同,主要是基于内容的背光调节算法。 可分为室内和室外。 室内光线不强,主要是CABL和FOSS造成的,分别针对LCD和OLED屏幕; 户外采用ARM的阳光屏技术。 事实上,Snapdragon在前面采用了自己的LocalToneMapper策略(室内室外均可使用)取代了ARM的阳光屏技术,主要反弹图像暗部区域的细节,不允许高亮区域过饱和。

4)MEMC:是电视标配,目前也安装在手机上。 这也是PW首先将其引入手机的最重要原因。 通过插帧,可以实现流畅的30帧和60帧视频。

5)Demura:OLED上的必经工序

总结:同样的工作如果在DPU中处理,帧率会更低。 PW是后处理后放置的接口模块,所以PW做了的话帧率会比较低; 如果DDIC这样做的话,帧率会更低。 ,越往前,帧率越低。 除了工艺之外,还在于制造工艺,所以PW的价值在于它的算法能力以及是否能够超越Snapdragon或MTK。

3.4【显示界面】

东西太多了,就不一一列举了(前面会专门讲一下mipi)。 可见,未来的发展在于XR。

4. 总结

DPU分为4个部分,功能已经比较稳定:其中显示后处理是后续升级的重点(超分辨率和散景是优化的重点)。 同样的功能,比独立显示芯片PW或DDIC的效率更高。 更好的帧速率;

XR将极大地影响DPU的发展:无论是帧率带来的带宽压力,还是凝视传输等最新技术,DPU都需要做出重大改变。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 mtk 游戏源码-一文看懂显示技术底层框架 https://www.wkzy.net/game/186077.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务