这个问题在这里已有答案:
据我了解,GPU有自己的指令集,其指令由图形驱动程序生成。然后将GPU指令发送到GPU。那么,在加载驱动程序之前图形通信如何工作?是否有一些基本指令,GPU必须至少实现这些指令以确保计算机可以执行基本的显示任务?
这个问题在这里已有答案:
据我了解,GPU有自己的指令集,其指令由图形驱动程序生成。然后将GPU指令发送到GPU。那么,在加载驱动程序之前图形通信如何工作?是否有一些基本指令,GPU必须至少实现这些指令以确保计算机可以执行基本的显示任务?
Answers:
“有一些基本指令......?” 对,就是这样。所有GPU都需要实现几个简单接口中的一个 - 它们太原始而不能被称为“指令集” - 操作系统附带的平台固件(“BIOS”或“UEFI”)和驱动程序知道如何与之交谈。现在通常选择的“简单接口”是“VGA”(“视频图形阵列”),这是最初为该标准的视频卡定义的寄存器级接口。(现在30多岁了!)
例如,如果Windows系统上的设备管理器将图形卡识别为“Microsoft基本视频适配器”,则操作系统无法找到该卡的特定驱动程序,而是加载了与VGA兼容的驱动程序。
嗯,从技术上讲,Windows 总是加载该驱动程序(因此它可以显示例如启动进度屏幕),然后(在启动后很晚)识别并加载显卡的“真实”驱动程序。
VGA标准仅支持一些低分辨率图形模式和文本模式,并且不涉及我称之为“运行程序”甚至GPU上的“指令”。本质上,系统固件或“基本视频驱动程序”只是将其置于所需模式,然后将位写入位图; 位图中的位直接对应于屏幕上的像素。必须完成绘制直线或曲线的任何算法都在CPU中完成。这是一种非常低级且缓慢的方式,可以让屏幕上显示内容。但对于操作系统安装和早期启动进度屏幕等,它足以显示固件,并与固件进行简单的交互。
我将通过解释旧硬件如何工作来尝试清除所有这些背后的“伏都教”。现代GPU不能像这样工作,但它们模仿CPU到图形卡的界面。
80年代和90年代早期的图形芯片/卡必须非常快速地产生输出(相对于时钟速度),因此它们不执行指令,而是具有固定电路。他们只是将数据从RAM中吸出,因此CPU只需要将数据转储到正确的RAM中,然后图形芯片将其拾取并将其丢弃在屏幕上。CPU还可以在图形芯片上设置各种配置变量。
在80年代,家用电脑有一个非常“愚蠢”的图形芯片,有一些固定的行为。如果我向后通过管道,它将是最有意义的。
CRT显示器
这些监视器需要模拟输入。换句话说,更高的电压=更亮的输出。彩色监视器有3个通道(红色,绿色和蓝色(或者,例如YUV或YIQ))。这些电压调节了电子束的强度。简单的东西。
CRT监视字面上使用的电磁铁,使电子束从左向右偏转,然后从低处再次开始,从左到右,从上到下依次开始。然后回到顶部并重复。
DAC
图形芯片具有“数模转换”转换器(非常常见的电子元件)。这将数字值(例如,2,4或8位)转换为可提供给监视器的电压。
扫描
图形芯片必须与电子束“保持同步”,向DAC发送正确的值,以便它能够在正确的时间输出相应的电压。(时钟用于此,我不会进入。)这里没有时间执行指令。一切都是硬连线的,并且需要一小段固定的时钟周期。
视频模式
早期的芯片速度不是很快,RAM也有限。因此,它们倾向于允许选择各种模式和其他配置参数,例如背景颜色,字体选择,光标位置和大小,调色板选择和精灵。大多数提供高分辨率“仅字符”模式和低分辨率逐像素模式。
三个值得注意的VGA模式是:
绘画像素
非常粗略,根据图形系统,管道看起来像这样:
当前像素位置⇒处理字符/字体/精灵/像素/配置数据⇒像素值⇒调色板⇒DAC
这是需要从几个RAM位置读取的第二步。例如,在文本模式下,将查找一个1字节的字符。这将形成字体表的索引。将从该表中查找一点,指示该像素是前景色还是背景色。将获取第三个字节以获得该前景/背景颜色。总而言之,从RAM读取3个字节。
但是这种“流动”几乎是一组简单的固定电路,它们的排列方式与刚刚描述的流程完全相同。
内存总线接口
英特尔CPU有这种令人烦恼的遗留物称为IO总线,但它并不重要,所以我假装它不在那里。
CPU通过在存储器总线上广播READ或WRITE请求以及地址来访问RAM。虽然大多数有效地址都会从RAM中获得响应,但某些范围会由设备处理。例如,从特定地址读取可能会为您提供有关键盘按键的信息。
通过写入“图形范围”的右侧部分,您既可以编写屏幕内容,也可以设置图形卡配置参数。“哑”图形芯片不执行任何指令。它只是一直在流动,有几个字节流过它的电路并输出电压。
使用VGA,显卡上实际上有RAM ,因为您可以在将图形卡写入图形RAM之前将其配置为预处理数据,以在某些情况下提高性能。
VESA
VGA后的图形卡提供更高的分辨率和良好的色深,但工作原理类似。许多现代图形卡仍然提供与此兼容,以便在引导期间提供更高的分辨率。但VGA是“万无一失”的,实际上每张卡都会效仿。