显示系统(二):显示适配器(显卡)背后的历史
目录
一.显示适配器的构成
1.1 早期
1.2 现代:GPU
二.两种显示模式
2.1 文本模式
2.2 图形模式
1981 年 IBM 推出第一代个人计算机,其主板上有个显示适配器(Display adaptor),用于连接显示器,负责将输出信息传递给显示器。通常,我们也将显示适配器称为显卡。
一.显示适配器的构成
1.1 早期
显示适配器上有一块存储区域,称为 framebuffer,处理器将需要显示的信息写到 framebuffer 中,由显示适配器负责解析 framebuffer 中的内容,并传递给显示器输出。
1.2 现代:GPU
随着计算机技术的发展,人们不再满足于显示简单的文本,还需要显示色彩丰富、立体感强的图形和视频,于是显示适配器的制造商在其中内置了专门的芯片负责图形的绘制,也称“渲染(render)”,这个芯片称为图形处理芯片( graphics processor)。相应地,显示适配器也演进为图形处理器( Graphics Processor Unit, GPU)。
与处理器只能一个像素一个像素( pixel)绘制相比, GPU 可以同时绘制多个像素,绘制效率非常高。所以,处理器不再自己在 framebuffer 上进行绘制了,而是将绘制命令发送给 GPU 进行绘制。
以绘制一个实心矩形为例,如果是处理器绘制,则需要一个像素一个像素地绘制;如果是 GPU 绘制,则处理器只需要告诉 GPU 类似“绘制矩形,长为 x、宽为 y,使用 xxx 颜色填充”这样一个命令, GPU 收到命令后会同时并发绘制多个像素。
二.两种显示模式
2.1 文本模式
最初个人计算机只能显示字符,比如一屏可以显示 80 x 20 个字符。
framebuffer 中存储的是以字符为粒度的信息,包括字符对应的编码及其属性。一个字符占据 framebuffer 中的2 个字节,第 1 个字节为字符对应的编码,第 2 个字节为字符的属性,如字符的前景色等,
显示器是以像素为单位进行显示的,整个屏幕相当于一个像素阵列,一个字符占据比如 8 x 16 个像素。因此,显示适配器需要根据 framebuffer 中的字符编码以及属性, 通过显示适配器内固化的软件将其转化为以像素为粒度的信息,在屏幕上逐个像素显示出来。
2.2 图形模式
显然,通过显示适配器内固化的软件将字符编码和属性转换为像素非常不灵活,而且仅仅显示字符已经不能满足人们的需求了,于是人们设计了图形模式。
在图形模式下, framebuffer 中存储的是以像素为粒度的信息, CPU 或者 GPU 负责填充每个像素的信息,无论是字符还是图形,都由 CPU 或者 GPU 绘制。显示器按照像素的信息在屏幕上显示就可以了,屏幕上显示的内容不再受限于显示适配器内固化的软件,可由 CPU 或者 GPU 随心所欲地绘制各种图形。
每个像素的信息可使用多位表示,称为色深(color depth),位数越多,能够表示的颜色就越多,当然占用的存储空间也越大。
例如, 32 位是一个典型的色深,通常称为 RGBA 格式, 32 位分为 4 个字节,其中 1~3 字节分别用来表示红、绿和蓝三原色,即 RGB。第 4 个字节 A 用来表示色彩的透明度, A 是 Alpha 的首字母。