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