查看原文
其他

开机动画和bios界面是cpu渲染还是显卡渲染的?

wolf uefiblog UEFI社区 2023-12-29
点击上方“公众号” 可以订阅哦!

开机画面、BIOS设置界面甚至进入Windows的开机Logo界面,当然都是BIOS代码(执行在CPU上)驱动核显或是独显来显示出来的,但如题目说的“渲染”,就狭义的2D或者3D引擎的Render来讲,却不一定存在。为什么这么说呢?

我们先从源头来讲。现代独显自带支持UEFI的OptionRom,它提供符合UEFI标准的GOP接口(Graphics output protocol)[1]驱动,下面简称GOP驱动。有两种特殊情况:

  1. 核显怎么办?核显也有GOP驱动,只是大部分都被包装在BIOS image中,也就是BIOS自带了。

  2. 传统Legacy设备呢?老的不支持UEFI的显卡,由UEFI BIOS的CSM + thunk来讲VGA ROM转换出来GOP接口,供UEFI启动时候使用。

Anyway,我们现在有了GOP驱动来让显卡干活。GOP接口里面最重要的接口就是Blt,熟悉图像处理或者Windows API的同学根据名字就知道它要干什么。没错,就是将一块内存中的图形,搬到显存中(往往是MMIO),从而显示在屏幕上,非常直接。GOP中并没有如DirectX那么多复杂接口,没有任何3D图形显示接口。这么简单的操作,是不是一个memcpy就行了呢?

实际情况复杂得多,因为还要考虑Video to Video等特殊操作,源地址和目的地址可能会重叠等等因素,这个块搬动的代码需要仔细衡量,它的效率会严重影响显示性能。因为这个动作主要是由CPU来完成,对CPU的性能是个考验。怎样才能提高性能?毕竟谁如果想要搞个很炫酷的画面,都不想变成一格格显示吧。

利用CPU的特殊指令是个好主意,其实还有一个更好的办法,那就是利用显卡的2D BLT引擎。我在编写945芯片组的GOP驱动的时候,就直接调用了北桥里面核显的2D引擎,不但将几十行复杂的判断和copy函数变成了一行,性能还增加了十倍以上!

在GOP驱动里面利用显卡自带的2D引擎来Blt,不会增加它的硬件耦合性,毕竟GOP驱动本身就是和显卡强绑定的,没有一个通用的GOP驱动。只有这时候,它才能真正用上显卡的2D引擎,尽管也很难称得上是Render。

参考资料

[1] GOP驱动介绍:https://uefi.org/sites/default/files/resources/UPFS11_P4_UEFI_GOP_AMD.pdf


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存